Google processes JavaScript pages in three phases: crawl, render, index. The render phase is queued separately, so a page can be crawled today and rendered later. Content that only exists after JavaScript runs is therefore indexed on a delay.
What breaks
- Content that requires user interaction, a click to expand, an infinite scroll with no links. Googlebot does not click or scroll.
- Blocked resources. If the script or API endpoint is disallowed in
robots.txt, rendering fails and Google indexes an empty shell. - Client-side routing without real URLs. Fragment-based routes (
#/page) are not separate URLs to Google. - Timeouts. Rendering has a budget; a page waiting on slow third-party calls may be captured incomplete.
- Errors. One uncaught exception can stop the render.
Metadata set by script
Titles, descriptions and canonical tags injected by JavaScript can work, but they are read at render time. Server-rendering these elements is far more reliable.
Alien Road recommends: server-render or pre-render anything that must be indexed, titles, canonical tags, main copy and internal links at minimum. We treat client-only rendering of primary content as a defect on client projects, because it converts a deterministic outcome into a probabilistic one for no user benefit.