Why this matters more for AI search than for Google

Google has run a rendering service for years. Googlebot fetches the HTML, queues the page, runs the JavaScript in a headless Chrome, then indexes the result. Google's guidance for its AI features says it can process content in JavaScript as long as it isn't blocked, so content that appears after rendering can reach AI Overviews and AI Mode.

The AI companies' own crawlers are newer and built for scale, and running a browser for every page is expensive. In December 2024 Vercel and MERJ analysed a month of crawler traffic across Vercel's network: about 569 million GPTBot fetches, 370 million from Claude's crawler, 314 million from Applebot and 24 million from PerplexityBot. JavaScript files made up 11.5% of ChatGPT's fetches and 23.8% of Claude's, yet neither executed them. The study's conclusion was that none of the major AI crawlers rendered JavaScript, with two exceptions: Applebot, which uses a browser-based crawler, and Gemini, which relies on Googlebot. None of the crawler documentation from OpenAI, Anthropic or Perplexity says their bots render JavaScript today.

In practice, if a page needs JavaScript to show its text, ChatGPT search, Claude and Perplexity are likely to index it as empty or close to it.

What breaks

Look for these patterns on the pages you most want cited:

  • Client-side rendered apps (a React, Vue or Angular single-page app without server rendering) where the HTML response is little more than <div id="root"></div>.
  • Content loaded after the page, such as product details, prices or FAQ answers fetched from an API once the page has loaded.
  • Tabs and accordions that build their content with JavaScript on click. Content that is in the HTML but hidden with CSS is fine; content that does not exist until someone clicks is not.
  • Links generated by JavaScript. Crawlers that do not render cannot follow them, so deeper pages may never be discovered.
  • Structured data injected by a tag manager. JSON-LD added through Google Tag Manager is visible to Google after rendering and invisible to crawlers that do not render.

How to see what a non-rendering crawler sees

Your browser always runs JavaScript, so it shows you the wrong version. Check the raw response instead:

  1. Fetch the page from the command line and search the output for a sentence from the middle of your article. If it is not there, a non-rendering crawler cannot see it.
curl -s -A "Mozilla/5.0 (compatible; GPTBot/1.2; +https://openai.com/gptbot)" https://www.example.com/your-page/ | less
  1. Disable JavaScript in Chrome. Open DevTools, press Command+Shift+P (Control+Shift+P on Windows and Linux), type "javascript", choose Disable JavaScript and reload. What remains is roughly what those crawlers get.
  2. Compare with Google's view using the URL Inspection tool in Search Console, which shows the rendered HTML. The difference between that and the curl output is exactly the content that depends on JavaScript.

Fixes, from least to most work

  • Move critical content into the HTML. Often only a few elements load late: an FAQ block, a summary, a price. Render those on the server and keep the interactive parts in JavaScript.
  • Put JSON-LD in the page source. Write structured data into the HTML template rather than injecting it with a tag manager.
  • Use real links. Every page you want crawled should be reachable through an <a href> in the HTML.
  • Pre-render or statically generate marketing pages, guides and documentation. Most frameworks support this per route, so the app itself can stay client-rendered.
  • Adopt server-side rendering (Next.js, Nuxt, SvelteKit, Astro and others) for the whole site if most of your valuable content lives in a single-page app.

Avoid serving a separate, content-rich version only to bots. Google describes this "dynamic rendering" as a workaround rather than a recommended solution and points to server-side rendering, static rendering or hydration instead.

A quick audit

For each of your ten most important pages, record:

CheckPass if
Main text in raw HTMLA sentence from the body appears in the curl output
Headings in raw HTMLThe H1 and H2s are present
Links in raw HTMLLinks to related pages are plain <a href> elements
JSON-LD in raw HTMLThe structured data block appears in the curl output
Response timeThe HTML arrives quickly and without redirect chains

Fix the pages that fail before you work on anything else in AI search. Content that crawlers cannot read cannot be cited, however good it is.

Primary sources and further reading

Book-derived explanations on this page are editorial synthesis. Platform-specific claims link to the platform's own current documentation.

Frequently asked questions

Does Gemini render JavaScript?

Gemini relies on Googlebot, which renders JavaScript, and Google says its AI features can process content in JavaScript as long as it isn't blocked.

Is it enough to have a fast, server-rendered home page?

No. Assistants cite specific pages, often deep guides and documentation. Check the pages you want cited, not just the home page.

Will AI crawlers start rendering JavaScript?

Possibly. Server-rendered HTML works for every crawler today and for any crawler later, so it is the safe default either way.