Deutsch

JavaScript SEO is the work of making sure search engines can crawl, render, and index content, links, and metadata that a page creates or changes with JavaScript. It matters most for sites built with frameworks such as React, Vue, or Angular and for single-page applications.

At a glance

Type
area of technical SEO
Affects
crawling, rendering, indexing
Google's renderer
headless Chromium (evergreen)
Rendering approaches
CSR, SSR, static rendering, hydration

Last checked:

How does Google process JavaScript?

Google describes three phases. During crawling, Googlebot fetches the URL and reads the HTML in the server response. Pages that return status 200 are then queued for rendering, where a headless, evergreen version of Chromium runs the JavaScript. The rendered HTML is what Google uses for indexing. How long a page waits in the render queue depends on Google’s resources.

The gap between the raw HTML and the final DOM is where problems start. Content that only appears after a click, a scroll event, or a failed API call may be missing from the version Google indexes. The rendering service also clears cookies, localStorage, and sessionStorage between page loads and declines permission requests such as camera or location access.

Other crawlers don’t necessarily render at all. A December 2024 analysis by Vercel found that the crawlers of OpenAI, Anthropic, and Perplexity fetch some JavaScript files but don’t execute them. For those bots, content that exists only after client-side rendering is invisible. The AI operators do not document this behavior, so it rests on third-party measurements, and according to reports nothing has changed as of October 2026. Google’s own guidance notes that not all bots can run JavaScript.

In practitioner tests of JavaScript changes from 2017, the home page reflected them in search results after eight days, while less important pages took about two months. Google now says a page often spends only a few seconds in the rendering queue, though it can take longer. The time until the next crawl comes on top of that.

From URL to search resultFive stations from left to right: discovery via links and sitemaps, crawling after checking robots.txt, rendering after waiting in the render queue, indexing with duplicate clustering and canonical selection, serving matching results. Links found in the rendered HTML lead back to discovery. Below each station are typical hurdles according to Google.1 · CRAWLING2 · INDEXING3 · SERVINGDiscoverlinks onknown pages,sitemapsCrawlcheck robots.txt,then fetchthe URLRenderrender queueChromium runsthe JavaScriptIndexcluster pages,pick canonical,storeServeresults fromthe index forthe querynew links from the rendered HTMLTYPICAL HURDLES ACCORDING TO GOOGLEno link,no sitemap*server ornetwork errors,robots.txt blocksno 200 statusor noindex: mayskip renderinglow quality,noindex, duplicateof another URLnot relevant,low quality,robots meta ruleSchematic. Google counts discovery and rendering as part of the crawling stage.* An inference, not a Google statement.
Schematic path of a URL through Google Search. Google describes three stages: crawling (including discovery and rendering), indexing and serving search results. Indexing is not guaranteed. Sources: Google Search Central: In-depth guide to how Google Search works; Google Search Central: Understand JavaScript SEO basics.

Rendering options

With client-side rendering (CSR), the browser builds the page from JavaScript. With server-side rendering (SSR) or static generation, the server sends finished HTML. Google recommends server-side rendering, static rendering, or hydration. It calls dynamic rendering, a separate prerendered version for bots, a workaround and not a long-term solution.

Where the HTML is created: CSR, SSR, SSG and dynamic renderingFour rows show where the content of a page is created. With CSR the server sends an empty HTML shell and JavaScript in the browser builds the content. With SSR the server renders the HTML on every request and hydration makes it interactive in the browser. With SSG the HTML is created at build time. Dynamic rendering serves finished HTML to crawlers and the JavaScript version to users; Google calls this a workaround.SERVERFIRST HTML RESPONSEBROWSERCSRClient-siderenderingsends HTML shelland JavaScript<div id="app">no contentJavaScript buildsthe contentSSRServer-siderenderingrenders HTMLon every requestcontent isin the HTMLhydration makesthe page interactiveSSGstatic renderingprerenderingHTML is builtahead of timecontent isin the HTMLshows HTML at once,hydration optionalDynamicrenderingworkarounddetects crawlers,renders for themcrawlers: HTMLusers: empty shellfor users, JavaScriptbuilds the contentSchematic. Google renders JavaScript in a separate step after crawling.Not all bots run JavaScript.
What matters for crawlers is whether the content is already in the first HTML response. Google recommends server-side rendering or prerendering and calls dynamic rendering a workaround, not a long-term solution. Sources: web.dev: Rendering on the Web; Google Search Central: Understand the JavaScript SEO basics; Google Search Central: Dynamic rendering as a workaround.

Example

A store loads the products of a category page with fetch(). The source HTML contains only:

HTML
<div id="products"></div>
<button onclick="loadMore()">Load more</button>

After rendering, Google sees the first 24 products. The rest appear only after a button click and have no URL of their own. Paginated links such as <a href="?page=2"> give crawlers a way to reach them.

Raw HTML and rendered HTML comparedLeft: the raw HTML as the server sends it, with an empty title and an empty div with the ID app. Right: the same document after rendering, where JavaScript has added the title, an H1 and two links. Google only sees this content and these links in the rendered HTML.RAW HTMLserver responseRENDERED HTMLDOM after JavaScriptJavaScript<head><title></title>empty</head><body><div id="app"></div>empty<script src="app.js"></body><head>+<title>Running shoes</title></head><body><div id="app">+<h1>Running shoes</h1>+<a href="/women/">Women</a>+<a href="/men/">Men</a></div><script src="app.js"></body>Schematic example. Anything JavaScript adds only exists in the rendered HTML.
The raw HTML of a JavaScript page lacks the title, heading and links. Google indexes the rendered HTML and parses it for links again. Source: Google Search Central: Understand the JavaScript SEO basics.

Common mistakes

  • Links without href: Google can reliably follow only <a> elements with an href attribute. onclick handlers and fragment routes like #/product aren’t enough. For single-page apps, Google recommends the History API.
  • Soft 404s in client-side apps: The app shows “page not found” while the server returns 200. Google suggests a JavaScript redirect to a URL that returns 404, or adding a noindex robots meta tag.
  • Removing noindex with JavaScript: If the served HTML contains noindex, Google may skip rendering and JavaScript execution, so a script that removes the tag later may never run.
  • Blocked files: Google won’t render JavaScript from files or pages blocked in robots.txt.
  • Conflicting canonicals: If JavaScript sets a canonical URL, Google advises keeping it identical to the one in the original HTML.

Checklist

These points come from Google’s JavaScript SEO basics.

  • Important content, links, and metadata are present in the rendered HTML, checked with the URL Inspection tool in Search Console.
  • Every page has a unique <title> and its own meta description, even when JavaScript sets them.
  • Links are <a> elements with an href attribute.
  • Single-page apps use the History API for routing instead of fragment URLs.
  • Error pages in single-page apps use a JavaScript redirect to a URL that returns 404, or add noindex with JavaScript.
  • A canonical set by JavaScript is identical to the canonical in the original HTML.
  • Pages that should be indexed have no noindex in the served HTML.
  • robots.txt doesn’t block JavaScript files or APIs needed for rendering.
  • JavaScript file names include a content fingerprint, such as main.2bb85551.js, so Google doesn’t use outdated cached files.

FAQ

How can I see what Google renders? The URL Inspection tool in Search Console and the Rich Results Test show the rendered HTML, loaded resources, and JavaScript console messages. Comparing that output with the page source shows which content depends on JavaScript.

Is React bad for SEO? Google can render React apps like any other JavaScript. Problems come from implementation choices, such as content that depends on user interaction or links without href. Server-side rendering or static generation reduces the risk for Google and for crawlers that don’t run JavaScript.

Sources

  1. Understand the JavaScript SEO basics – Google Search Central (updated Mar 4, 2026)developers.google.com
  2. Fix Search-related JavaScript problems – Google Search Centraldevelopers.google.com
  3. Dynamic rendering as a workaround – Google Search Centraldevelopers.google.com
  4. Link best practices for Google – Google Search Centraldevelopers.google.com
  5. The rise of the AI crawler – Vercel (secondary source, Dec 17, 2024)vercel.com
  6. More JavaScript SEO experiments with Google Tag Manager – searchVIU blog (2017)searchviu.com
  7. Rendering on the Web – web.devweb.dev

Last updated: