JavaScript SEO guide: how Google crawls, renders and indexes JS pages, CSR vs SSR vs static rendering, why AI crawlers often miss JS content, and how to test and fix it.

In short
JavaScript SEO makes sure that content and links generated by JavaScript can be crawled, rendered and indexed. Google can render JavaScript, but in a separate step that can be delayed and that fails when scripts are blocked or need a click. Many AI crawlers do not execute JavaScript at all. The safest setup is server-side rendering or static generation, real "a href" links, and the important content present in the initial HTML.
Want to go further? Ask
Modern frameworks such as React, Vue, Angular or Svelte build pages in the browser. That is great for interactivity and risky for visibility. JavaScript SEO is the set of practices that keeps a JS site readable by search engines and by the AIs. This guide explains how Google processes JavaScript, the rendering options, the common mistakes and how to test your pages.
In three phases: crawling, rendering, indexing. Google Search Central describes the pipeline this way:
The consequence: anything missing from the raw HTML depends on the rendering step succeeding. If a script fails, times out or is blocked by robots.txt, Google indexes what it saw before, which may be an empty shell.
The difference is where the HTML is built: in the browser, on the server for each request, or once at build time.
| Rendering mode | How it works | SEO impact |
|---|---|---|
| Client-side rendering (CSR) | Server sends minimal HTML; JavaScript builds the page in the browser | Highest risk: content depends on rendering, often invisible to AI crawlers |
| Server-side rendering (SSR) | Server builds full HTML for each request, then JavaScript hydrates it | Safe: content and links in the first HTML |
| Static generation (SSG) | HTML generated at build time and served as files | Safest and fastest for content pages |
| Hybrid (SSR or SSG plus islands) | Static or server HTML, JavaScript only for interactive parts | Good balance for most sites |
| Dynamic rendering | Bots receive a pre-rendered version, users the JS app | Workaround that Google no longer recommends |
Frameworks such as Next.js, Nuxt, SvelteKit or Astro make SSR and static generation the default for content pages. For a blog, documentation or product pages, there is rarely a reason to render content only in the browser.
Most issues come from content or links that only exist after an interaction.
Because most AI crawlers read the raw HTML only. Crawler log analyses, such as Vercel's 2024 study of AI crawler traffic, found that the bots of OpenAI and Anthropic fetch JavaScript files but do not execute them. A page whose text appears only after JavaScript runs may look empty to the systems that feed ChatGPT, Claude or Perplexity, even if Google indexes it correctly.
If being cited by the AIs matters to you, put the main answer, headings, tables and links in the server HTML, and check that your robots.txt lets the AI crawlers you want in. Our guide on robots.txt for AI crawlers lists the main bots, and the AI crawlability audit shows what they can read on your pages.
Compare the raw HTML with what Google renders.
Six rules cover most cases:
JavaScript and SEO work together when the content does not depend on JavaScript to exist. Render content pages on the server or at build time, keep links real and test what Google and the AIs actually see. Sorank publishes its articles as clean HTML directly in your CMS, with internal links and structured data, on autopilot: see the plans and the 3-day free trial.

Yes. Google renders pages with a recent version of Chromium, so it can see content added by JavaScript. Rendering happens after crawling, sometimes with a delay, and fails if scripts are blocked, too slow or depend on user actions. Content present in the initial HTML is always the safest option.
Not automatically, but it adds risk. With client-side rendering the first HTML is almost empty, so search engines must run JavaScript to see the content, and many AI crawlers do not. Server-side rendering or static generation deliver the content directly and avoid these problems.
Most do not today. Analyses of crawler logs, such as the one published by Vercel in 2024, found that the crawlers of OpenAI and Anthropic download JavaScript files without executing them. Content that only appears after JavaScript runs is therefore often invisible to ChatGPT, Claude and similar assistants.
THEY TRIED SORANK BEFORE YOU
