Do AI crawlers render JavaScript is the question underneath a lot of confused reports I get, which usually arrive worded as something else: my site is indexed fine in Google but ChatGPT says it cannot find us. Those two facts are compatible, and the reason is rendering.
There is a confident answer circulating on this, which is that AI crawlers do not render JavaScript. It is probably right. It is also resting on far less evidence than the confidence suggests, and the difference matters when you are about to spend a sprint on it.
Does Googlebot render JavaScript?
Yes, and Google documents it directly. From JavaScript SEO basics:
“Google processes JavaScript web apps in three main phases: 1. Crawling 2. Rendering 3. Indexing”
Rendering is its own phase with its own queue:
“Googlebot queues pages for both crawling and rendering. It is not immediately obvious when a page is waiting for crawling and when it is waiting for rendering.”
That is the baseline. Google fetches your page, and separately, later, runs an evergreen Chromium over it and indexes what comes out. A client-side React app can therefore rank perfectly well in Google Search.
Bing is the only other search engine that has documented anything, and its statement is old. The 2018 bingbot post on JavaScript and dynamic rendering says Bing renders, but not at scale, and recommends dynamic rendering. Eight years is a long time to be quoting a blog post as current behaviour, and I would flag it as dated rather than lean on it, especially since Copilot draws on Bing’s index.
Which AI crawlers document their rendering behaviour?
None of them. This is the finding that changed how I answer the question.
I went looking for a rendering statement in the vendor documentation of every major AI crawler. OpenAI’s bots page covers robots.txt control and IP ranges and says nothing about JavaScript. Anthropic’s crawler article names ClaudeBot, Claude-SearchBot and Claude-User and describes what each is for, with no rendering statement. Perplexity’s bots guide documents robots.txt handling and firewall allowlisting, again with nothing about rendering.
So the honest status for every AI crawler is undocumented, not confirmed no. Those are different things and the internet keeps flattening them into one.
The best evidence available is a third-party test. Vercel and MERJ published a crawler study on 17 December 2024, from real request data:
“The results consistently show that none of the major AI crawlers currently render JavaScript.”
“while ChatGPT and Claude crawlers do fetch JavaScript files (ChatGPT: 11.50%, Claude: 23.84% of requests), they don’t execute them.”
Fetching a file and executing it are separate things, and that distinction is the whole finding. A bot pulling your bundle is not a bot running your app.
Now the caveat every article repeating this study leaves out. That data is from December 2024. It is roughly 21 months old at the time of writing, in a field that ships changes monthly, and Claude-SearchBot was not even in the sample. Treat it as the strongest available evidence and as evidence with an expiry date on it.
Vendor positions from OpenAI, Anthropic, Perplexity, Google and Bing documentation. Test figures from the Vercel and MERJ crawler study of 17 December 2024.
Why does Google index my React site when ChatGPT cannot see it?
Put the two behaviours side by side and the split explains itself.
Google fetches your near-empty HTML shell, queues it, runs Chromium, and indexes the text that JavaScript put there. An AI crawler that does not execute JavaScript fetches the same shell and reads what is in it, which on a client-rendered app is a loading state and a script tag.
Which crawler visited also decides which product you disappear from, and this is where I see people fix the wrong thing. GPTBot collects training data. OAI-SearchBot is the one that feeds ChatGPT’s search results. Blocking or breaking one has nothing to do with the other, which is the same per-agent distinction behind why ChatGPT cannot see a website in the first place.
How do I check what GPTBot actually sees on my site?
Do not take my word for it or anyone else’s. This is testable in about ten minutes, and there are two halves to the test.
Half one, the raw HTML. Request your page with the crawler’s user agent string and search the response for a sentence you know is on the page. OpenAI publishes the exact string, currently ending in GPTBot/1.4. If your headline, your prices, or your FAQ answers are not in that response body, they were never in the crawler’s hands. Compare that against the fully rendered DOM in your browser’s developer tools. A large gap in word count between the two is your answer.
Half two, the logs. Filter access logs for GPTBot, OAI-SearchBot, ClaudeBot and PerplexityBot. Cloudflare, Vercel and ordinary cPanel raw logs all give you this. Then ask one question of the results: did the bot ever request the API endpoint your front end calls? A React app that loads its content over an XHR call has a log fingerprint. If the crawler hits the page and never hits the endpoint, it left with nothing, no matter what the rendered page looks like to you.
That second check is the one I trust most, because it is your own data about your own site rather than an aggregate study about somebody else’s.
How do I fix client-side rendering for AI search?
The fix is not exotic, and it is the same fix that has been correct for JavaScript SEO for a decade. Server-side render, or statically generate, so the meaningful text arrives in the first response. This site is statically generated for that reason, among others: every sentence you are reading is in the raw HTML before a single script runs.
If a full rendering change is out of reach, the cheap version still works. Put the title, the H1, the key facts, the prices and the FAQ text into the server response, and let JavaScript enhance the page rather than build it. A crawler that cannot run your app can still read a paragraph.
One thing I would not do is invest heavily on the strength of a 2024 study. Run the two checks above on your own site first. They cost an afternoon, they answer the question for your stack rather than the average stack, and unlike the study, they cannot go out of date without you noticing.
Sources
- Understand JavaScript SEO basics, Google Search Central, for the three-phase crawling, rendering and indexing model.
- The rise of the AI crawler, Vercel and MERJ, 17 December 2024, for the no-execution finding and the 11.50% and 23.84% fetch rates.
- OpenAI bots documentation, for the user agent strings and the absence of any rendering statement.
- Does Anthropic crawl data from the web, Anthropic support, for the three crawler names.
- Perplexity bots guide, for its documented crawler behaviour.
- bingbot Series: JavaScript, Dynamic Rendering, and Cloaking, Bing Webmaster Blog, October 2018. Dated, and the only Bing statement there is.
