Short answer: Google runs JavaScript with an up-to-date version of Chromium, so it can see content that scripts add. It works in three phases: it crawls the page, renders it when its resources allow, and indexes the rendered HTML. Rendering can wait, and not every bot runs JavaScript, so Google still calls server-side rendering a great idea.
The three phases of a JavaScript page
| Phase | What Google does | What can go wrong |
|---|---|---|
| Crawling | Fetches the URL if robots.txt allows it and reads the links in the HTML | Blocked pages and files aren’t rendered at all |
| Rendering | Runs the JavaScript in a headless Chromium once its resources allow | The page can wait in the queue for seconds or longer |
| Indexing | Uses the rendered HTML to index the page | Content missing from the rendered HTML can’t be indexed |
From Google Search Central, “Understand the JavaScript SEO basics”, read November 3, 2026.
What JavaScript can change, and how
Google only finds links that are a elements with an href attribute. In a single-page app, move between views with the History API, not with # fragments.
You can set the title, the meta description and the canonical with JavaScript. Google prefers the canonical in the original HTML. If a script sets it too, it must match; if the HTML can’t carry it, set it only with JavaScript.
A noindex in the original HTML may make Google skip rendering, so a script that removes it may not work. If you want the page indexed, leave noindex out of the original code.
When a single-page app shows a page that doesn’t exist, redirect with JavaScript to an address that answers 404, or add a noindex with JavaScript. Our guide to soft 404 errors explains why.
How to check your JavaScript pages
- Check that robots.txt doesn’t block your JavaScript or CSS files.
- Make every link an a element with an href.
- Use the History API for client-side routing, not # fragments.
- Put the title, meta description and canonical in the original HTML when you can.
- Don’t count on JavaScript to remove a noindex.
- Give missing pages a real 404, or a noindex added by JavaScript.
- Look at the rendered HTML in the URL Inspection tool and compare it with what you expect.
Our guide to robots.txt shows how to see what you block, and our guide to lazy loading images covers images that load as the visitor scrolls.
What our own pages send before JavaScript runs
At 2:59 AM on November 3 we read our 301 redirect guide three ways: the raw HTML from the server, and rendered in our own headless Chromium with JavaScript on and off.
The raw HTML already had the title, the meta description, the canonical, 1,350 words and 17 links in the main content. With JavaScript on, the tags and links were the same and the text grew by 41 words. With it off, nothing changed.
On our home page, rendering added 125 words, but no new ones: an animation repeats a strip of phrases. The only new link is our email address, which a script writes into the page.
Before you rely on JavaScript
- robots.txt doesn’t block your scripts or styles.
- Links are a elements with an href.
- Views change with the History API, not fragments.
- The title, description and canonical are in the HTML.
- No page needs JavaScript to drop a noindex.
- URL Inspection shows your content in the rendered HTML.
RememberGoogle can run your JavaScript, but rendering can wait and other bots may not run it at all. Put the content, links and tags in the HTML your server sends, and check the rendered page in URL Inspection.
If you want us to check how Google sees your pages, see our technical SEO service.
Quick answers about JavaScript SEO
Can Google read content that JavaScript adds?
Yes. Google renders pages in a headless Chromium and indexes the rendered HTML. Content that doesn’t show up in that rendered HTML can’t be indexed, so check it in the URL Inspection tool.
How long does Google take to render a page?
Google says a page may wait in the rendering queue for a few seconds, but it can take longer. A headless Chromium renders it once Google’s resources allow.
Should I use server-side rendering?
Google says server-side rendering or pre-rendering is still a great idea, because it makes your site faster for users and crawlers, and not all bots can run JavaScript.
Why does Google use old versions of my JavaScript?
Googlebot caches aggressively, and its renderer may ignore caching headers, so it can use outdated JavaScript or CSS. A fingerprint of the content in the file name, such as main.2bb85551.js, gives each update a new name.
Can I add structured data with JavaScript?
Yes. Google says you can generate the JSON-LD with JavaScript and inject it into the page. Test the result before you rely on it, for example with the Rich Results Test.
Sources
Read on November 3, 2026. Google Search Central: Understand the JavaScript SEO basics. Our own case: our 301 redirect guide and home page, read as raw HTML and rendered with JavaScript on and off, on November 3, 2026.
