AI Summary: Google documents crawling, rendering, and indexing as separate phases and notes that not all bots run JavaScript. SSR and pre-rendering put meaningful content in the first response, while CSR can make rendering and failure states harder to observe; neither approach guarantees indexing or AI citation.
The practical difference
Server-side rendering (SSR) generates HTML on the server for a request. Pre-rendering generates HTML ahead of time. Client-side rendering (CSR) sends a smaller document and fills it with JavaScript in the browser. These are delivery choices, not quality labels: a well-built CSR route can work, and an SSR route can still ship incomplete or misleading content.
Google's JavaScript SEO guidance describes crawling, rendering, and indexing as separate phases. Googlebot can render JavaScript with an evergreen Chromium, but rendering may happen later, and Google notes that not all bots can run JavaScript. [1] Server-side or pre-rendering can therefore reduce the time and dependency chain before users and crawlers receive meaningful content. That is a delivery observation, not an indexing promise.
Choose by contract, not fashion
Use SSR or pre-rendering for indexable titles, descriptions, H1s, article bodies, canonical links, and crawlable navigation. Use CSR for interactions that genuinely need a browser, while keeping their initial state understandable and their URLs stable. Hydration should enhance, not replace, the content that makes the route worth visiting.
| Check | What to verify |
|---|---|
| First response | HTML contains title, primary heading, answer content, and important links |
| Status | Public success routes return meaningful HTTP status codes |
| Rendering | JavaScript enhancement does not remove or contradict server content |
| Failure | Network, script, and data errors expose a readable state |
| Navigation | Important links have real href values and remain discoverable |
Verification checklist
Fetch a public route with curl or an HTTP client and save the first HTML response. Confirm the title, H1, canonical link, main content, and primary links are present. Then run a real browser with JavaScript enabled and compare the rendered page with the response. Test a blocked script, slow data request, and missing API response. Record whether the route still communicates its purpose and whether its HTTP status remains honest.
The goal is a stable first representation, predictable enhancement, and an honest failure state.