JavaScript SEO for React Sites: What Google Actually Sees
React sites can rank perfectly well — and fail invisibly. Here is how Google renders JavaScript, where it breaks, and how to check what the crawler really sees.
Google can render JavaScript. That sentence has lulled a thousand React sites into complacency. The full truth: Google renders JavaScript in a second wave, with a queue, a budget, and plenty of ways for your content to fall through the cracks — silently, while your analytics look fine because humans see everything.
The two-wave reality
When Googlebot fetches a page it first processes the raw HTML — links, meta tags, canonical, whatever is served. Rendering the JavaScript happens later, when a headless Chromium gets around to it. If your critical content, internal links or meta tags exist only after hydration, they are invisible in wave one and at the mercy of the render queue in wave two.
Where React sites break
- Client-only rendering. An empty
<div id="root">in the HTML means the first wave indexes nothing. - Meta tags set in JavaScript. Titles and canonicals swapped client-side can be missed or mixed up.
- Links that are not links.
onClicknavigation withouthrefattributes leaves crawlers with no path through the site. - Blocked resources. A robots.txt that disallows your JS bundles quietly disables rendering.
- Lazy content that needs interaction. Googlebot does not click, scroll-to-load below-the-fold content cautiously, and never fills forms.
The fix hierarchy
Prefer solutions in this order: static generation (pre-rendered HTML for every route) → server-side rendering with hydration → client rendering only for genuinely private or app-like views. Frameworks make this a configuration choice now — there is rarely a good reason for a public marketing page to be client-only in 2026.
How to see what Google sees
- URL Inspection in Search Console → View crawled page → compare the rendered HTML against what you expect.
- Screaming Frog with JavaScript rendering enabled, then diff raw vs rendered — missing links and text jump out immediately.
- Disable JavaScript in your browser and load the page. Whatever survives is your first-wave reality.
href links everywhere, and verify with the URL Inspection tool — not with your own browser, which always renders everything.Building or fixing a React site? My web development service ships SEO-safe rendering from the start.