Google crawls and indexes most pages in two passes. The first indexes whatever HTML Googlebot receives on the initial request. The second — rendering JavaScript and indexing what it produces — is queued separately through the Web Rendering Service and can land hours to weeks later, depending on crawl and rendering capacity.
Key takeaways
- Wave one is immediate; wave two is queued. Raw HTML gets indexed on the first crawl. JS-rendered content waits for a separate rendering pass.
- The gap has no fixed number. Reports and Google's own statements describe hours to weeks — treat any specific figure you read as a snapshot, not a guarantee.
- It affects content, links and structured data alike — anything that only exists in the DOM after client-side JavaScript runs waits for wave two, not just visible text.
- Server-side rendering skips the wait entirely — if it's in the initial response, there's no second wave to queue for.
- This is why time-sensitive content is the real risk, not content in general. A blog post landing a day late is harmless; a corrected price or an urgent update is not.
The two waves, precisely
Wave one happens the moment Googlebot fetches your URL — it reads whatever HTML exists in that initial response, full stop. For a server-rendered page, that's the actual content. For a client-rendered single-page app, it's often close to an empty shell: a root <div>, a script tag, nothing readable yet.
Wave two is where the JavaScript actually runs. Google queues the URL for its Web Rendering Service, which executes the page's scripts roughly the way a browser would, then indexes whatever the DOM looks like after that execution — the fully rendered version, including content, internal links, and any structured data that JavaScript injected rather than shipped in the source.
| Wave | What's indexed | Timing |
|---|---|---|
| Wave one | Raw HTML from the initial response | Immediate, on crawl |
| Wave two | Fully JS-rendered DOM, via the Web Rendering Service | Queued — hours to weeks, variable |
How long the gap actually is
Nobody outside Google can state a precise number, and Google hasn't committed to one. Documented reports and statements from Google describe anywhere from a few hours to several weeks, depending on how often the site is crawled and how much Web Rendering Service capacity is available at that moment. Google representatives have also periodically said this gap matters less over time as rendering capacity improves — worth knowing, but not the same as it being solved.
| Claim | Status | Basis |
|---|---|---|
| Google indexes raw HTML before rendering JavaScript | Documented | Confirmed in Google's own developer documentation on JavaScript SEO basics |
| The rendering pass is queued separately, not instant | Documented | Confirmed by Google's own statements about the Web Rendering Service |
| The delay is "hours to weeks" | Inferred | Consistent range across multiple reports and Googler statements; no single fixed figure published |
| The gap has shrunk meaningfully in 2026 versus prior years | Inferred | Google has said rendering capacity improves over time; no measured before/after figure available to confirm by how much |
| There is a fixed, universal rendering timeout Googlebot applies per page | Unsupported | Specific numbers circulate widely but aren't consistently sourced to a current, citable Google statement |
What's actually affected
Everything that only exists in the DOM after JavaScript executes waits for wave two — not just body text. That includes internal links a crawler would otherwise follow immediately, structured data injected by a client-side script rather than present in the source, and any meta content a JS framework rewrites after hydration. If your canonical tag, title, or JSON-LD only reaches its final form post-render, all of it is on wave-two time, not wave-one time.
What to actually do about it
- Serve time-sensitive content in the initial HTML response. Server-side rendering or static generation puts it in wave one, where there's no queue to wait for.
- Don't rely on client-side JavaScript for canonical tags, titles, or structured data if you need those recognized promptly — ship them in the source, not injected after hydration.
- Check Search Console's URL Inspection tool to see what Google actually has indexed for a given URL right now, not what your browser renders — the two can differ for exactly this reason.
- Treat "it's not showing up yet" as expected, not broken, for JS-rendered content on a normal publishing cadence — the fix is architectural, not a resubmission request.