How Googlebot renders JavaScript: the two-wave model
Googlebot operates in two waves. In the first wave, it fetches and processes HTML immediately — this is fast, typically within hours of a URL being discovered. In the second wave, it renders JavaScript using a headless Chromium instance. This second wave is queued and processed based on crawl budget and server capacity — it can take days, weeks, or in some cases months for JS-rendered content to be indexed.
The practical implication: if your page's critical content — the H1, the body text, the internal links, the structured data — is only present after JavaScript executes, Google may index an empty or skeletal version of the page during the first wave. That version can rank (or fail to rank) before the second wave corrects it.
In technical SEO audits of React and Vue applications, this is one of the most consistently found issues. A site that looks complete in a browser can appear nearly empty in Google's cached version — and the owner has no idea, because they only ever view the site in a browser.
Client-side rendering vs server-side rendering vs static generation
The rendering strategy you choose determines how reliably your content is indexed. Understanding the trade-offs is the foundation of JavaScript SEO.
| Strategy | How it works | SEO risk | Best for |
|---|---|---|---|
| Client-Side Rendering (CSR) | Browser downloads JS bundle, executes it, renders HTML | High — content invisible until JS executes; indexing delay | Authenticated dashboards, tools not requiring SEO |
| Server-Side Rendering (SSR) | Server renders full HTML on each request, sends to browser | Low — full HTML available on first request | Content sites, e-commerce, any page requiring SEO |
| Static Site Generation (SSG) | HTML pre-built at deploy time, served as static files | Very low — fastest possible first-byte time | Blogs, documentation, pages that change infrequently |
| Incremental Static Regeneration (ISR) | Static pages rebuilt on a schedule or on-demand | Low — combines SSG speed with dynamic content capability | E-commerce product pages, news sites |
| Dynamic Rendering | Serves pre-rendered HTML to crawlers, JS to browsers | Low for indexing, but adds infrastructure complexity | Legacy CSR apps that cannot be migrated to SSR |
How to diagnose JavaScript SEO issues
The fastest diagnostic is to compare what Google sees against what a browser renders. There are three methods:
Google Search Console URL Inspection
Use the URL Inspection tool in GSC to see Google's rendered version of any page. The 'More info' tab shows the rendered HTML. If your H1, body content, or structured data is absent from the rendered HTML, you have a JavaScript SEO problem.
curl / wget (raw HTML check)
Fetch the page with curl -L https://yoursite.com/page and examine the raw HTML. If your content is absent from the raw response, it is only present after JS execution — and therefore invisible to first-wave crawling.
Google's Rich Results Test
Run your URL through search.google.com/test/rich-results. This tool renders the page as Googlebot would and shows what structured data it finds. Missing schema that appears in your source code is a JS rendering failure.
JavaScript SEO best practices
Render critical content server-side
H1, meta description, canonical URL, structured data, and the first 200 words of body content should all be present in the server-rendered HTML.
Avoid lazy-loading critical content
Content that only loads after a user interaction (scroll, click) may never be seen by Googlebot. Ensure all indexable content is in the initial render.
Use canonical tags in server-rendered HTML
If your canonical tag is injected by JavaScript, Googlebot may process the page without it during first-wave crawling, creating duplicate content risk.
Test with JavaScript disabled
Disable JavaScript in your browser (DevTools → Settings → Disable JavaScript) and reload the page. What you see is approximately what first-wave Googlebot sees.
Monitor Google's rendered cache
Check the GSC URL Inspection tool monthly for key pages. The rendered HTML should match what a browser shows.
Avoid infinite scroll without pagination
Googlebot does not scroll. Content below the initial viewport in an infinite scroll implementation may never be crawled. Use pagination or a 'load more' button with a URL parameter.
From our work
A recurring pattern in technical audits of React-based sites: the site has been live for six to twelve months, rankings are flat despite good content, and the owner assumes the problem is link building. A GSC URL Inspection check reveals that Google's rendered version of the homepage is missing the H1, the main navigation links, and all structured data — because all of it is injected by JavaScript after the initial HTML load. Implementing SSR for the critical pages resolves the indexing issue within four to six weeks, and rankings begin moving without any additional link building.
Frequently asked questions
Can Googlebot crawl JavaScript?
Yes, but with a delay. Googlebot crawls HTML immediately and adds JavaScript rendering to a second wave queue. This two-wave process means JS-rendered content can take days or weeks to be indexed, compared to hours for server-rendered HTML.
Is client-side rendering bad for SEO?
Not inherently, but it introduces indexing risk. If your critical content — headings, body text, internal links, structured data — is only present after JavaScript executes, there is a window during which Googlebot may index an empty or incomplete page. Server-side rendering eliminates this risk.
What is dynamic rendering and when should I use it?
Dynamic rendering serves pre-rendered HTML to crawlers and JavaScript to browsers. It is a pragmatic workaround for sites that cannot implement SSR but need reliable indexing. Google acknowledges it as a valid approach, though SSR or SSG is preferable long-term.
Freelance SEO & AI Consultant — London
Semantic SEO Specialist · Technical SEO · Koray Framework Practitioner
I audit and fix JavaScript SEO issues for London businesses — from GSC rendering diagnostics to SSR implementation and structured data validation. About me →
Related guides
Is JavaScript hiding your content from Google?
Technical SEO audits that include JavaScript rendering diagnostics — direct-to-consultant, no agency markup.
View Technical SEO Audit