Home/Learn GEO/Does JavaScript run?
Technical GEO · Rendering

Do AI crawlers run JavaScript?

This is the question with the widest gap between how confidently it is answered and how much evidence sits behind the answer. Two engines document rendering, one class renders by construction, and the rest were measured once, in one month, by one company.

On this page
Share this
Share on X Share on LinkedIn
The short answer

Some do, most say nothing either way, and the confident version of the answer is not supported by its evidence. Google and Apple both state in their own documentation that they render JavaScript, and agentic browsers render because they are Chromium builds; for the classic AI crawlers the entire published record is one infrastructure log study, dated 17 December 2024, which found no execution by any of the five crawler families it examined, even though the OpenAI agents spent 11.50% of their fetches downloading JavaScript files and Anthropic’s 23.84%.1

Key takeaways
  • Google and Applebot document rendering in their own words, and Gemini inherits Googlebot’s renderer. OpenAI, Anthropic and Perplexity say nothing either way.
  • The 569 million figure everybody quotes is a crawl-volume statistic from another section of the same post. The rendering test states no sample size and no calendar window.
  • Execution was detected by a beacon that fires when a page finishes rendering, so a crawler with no renderer and one whose beacon could not phone home look the same.
  • Microsoft’s assistant was excluded for lacking a unique user agent, and several tokens these vendors document today were not in the sample.
  • None of it changes what you ship: text in the initial HTML response is readable by every class of system, even as JSON.
The split

Do AI crawlers run JavaScript?

There are three groups here, not two, and most of the argument online comes from collapsing them into one. Two engines document rendering in their own words: Google “is able to process content within JavaScript as long as it isn’t blocked”, with the caveat that JavaScript frameworks make the work “generally more complex”,3 and “Applebot may render the content of your website within a browser”, which Apple warns it may fail to do if your JavaScript and CSS are blocked in robots.txt.5 Gemini inherits Googlebot’s renderer,1 and agentic browsers render because they are Chromium: Tow Center researchers found in October 2025 that one returned a nine-thousand-word subscriber-only article sitting behind a client-side overlay, while the same companies’ ordinary chat interfaces said they could not reach it.9

The third group is the one everybody argues about, and it is the group where nobody has said anything. Read the bot documentation OpenAI, Anthropic and Perplexity publish and the words render, rendering and JavaScript do not appear once (checked 30 Aug 2026).678 The silence is itself the finding, and it is why one log study carries so much weight.

01

Documented to render

Google and Applebot, in their own words, plus Gemini by inheritance. Assume your scripts run here, and that blocking your JS or CSS hurts you.

02

Renders by construction

Agentic browsers are Chromium. They run your bundle, read the DOM, and reach your logs looking like an ordinary Chrome session, not a declared bot.

03

Measured once, silent since

The OpenAI, Anthropic, Meta, ByteDance and Perplexity crawlers. One log study saw no execution. None of the five documents a position either way.

The measurement

What did the December 2024 study actually measure?

A hosting company and an SEO consultancy reading their own server logs, published as a blog post on 17 December 2024 under four named authors.1 The properties were the documentation site for the framework that hosting company maintains, its wider network, and two job boards used as cross-stack controls. That is the sample: first-party log data, the strongest evidence available for what a crawler did, and at the same time a convenience sample of one vendor’s traffic, which is weak evidence for what crawlers do generally.

The window deserves stating precisely, because it gets repeated wrongly. The post prints no calendar range anywhere. Its traffic figures are introduced with “in the past month”, and its data-collection section says the primary data comes from monitoring those properties “for the past few months”. The only date on the page is the publication date, so any restatement that assigns a start month is an inference, not a quotation, and this site was making exactly that inference until August 2026.

The number everyone quotes also belongs to a different claim. The 569 million GPTBot fetches and 370 million from Anthropic’s crawler sit in the section on scale and distribution, next to 4.5 billion for Googlebot, 314 million for Applebot and 24.4 million for PerplexityBot. Those measure how much crawling happened. The rendering section that follows reports its conclusion with no sample size at all: no page count, no request count, no per-crawler breakdown. Quoting the volume figure as the rendering test’s n is the most common error made with this source.

Detection

How was execution detected, and what can that test miss?

By a beacon. The method is not in the AI-crawler post; it sits in the July 2024 article that post links for details, where the same team describes placing custom edge middleware on those properties to identify bot requests and inject a lightweight JavaScript library into the HTML served to them. That library fires when the page finishes rendering and reports a request identifier and a timestamp to a separate server, and matching those reports against raw access logs tells you which requests rendered.2

It is a good design, and it is one-sided. A beacon that fires proves execution. A beacon that never fires proves only that no report arrived, and things other than a missing renderer produce that: a crawler running scripts in a sandbox with no outbound network, one that drops subresource requests, one whose fetch of the beacon is blocked or times out. None is distinguishable from a client that simply reads HTML. “None of the major AI crawlers currently render JavaScript” is a reasonable reading of a null result. It is not the only reading.

The earlier article states its own scope plainly: it focused on Googlebot, which supplied over 37,000 rendered pages matched to server-beacon pairs across 1 to 30 April 2024, and it says the team was still gathering data on AI providers.2 The instrumentation was validated at scale against a crawler that does render. What it produced for crawlers that apparently do not is an absence, and an absence has no sample size to report.

Coverage

Which crawlers were covered, and which were not?

Five families were named as not rendering, two as rendering, and one assistant was excluded outright for having no unique user agent.

CrawlerIn the Dec 2024 sample?What was observedVendor statement on rendering today
Googlebot and GeminiYesRenders, on shared infrastructureYes, Google documents it3
ApplebotYesRenders in a browserYes, Apple documents it5
GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBotYesNo execution observedNone, either way67
Meta-ExternalAgent, Bytespider, PerplexityBot, CCBotYesNo execution observedNone, either way8
OAI-AdsBot, Claude-SearchBot, Claude-UserNot in the sampleNever measuredNone, either way
Microsoft’s assistantExcluded by the authorsNever measuredNot covered by this study

Read that list against what the same vendors publish today and the gap is plain. Anthropic now documents three robots rather than one, splitting training, user-initiated fetches and search quality.7 OpenAI now lists four tokens rather than three, including an ads crawler.6 None of the tokens added since the study was in the sample, so for those the honest answer is not “they do not render”, it is “nobody has looked”.

Twenty months

What has changed since December 2024?

Three things, and none of them is a replication. First, the documentation moved. Anthropic now describes ClaudeBot for training, Claude-User for user-initiated fetches and Claude-SearchBot for search quality, on a page last updated 7 April 2026.7 Google’s generative-AI guidance was last updated 10 July 2026 and still carries the same sentence about processing content within JavaScript.3 Every addition on the quiet side stayed quiet, so the silence has widened rather than closed.

Second, a whole class of client arrived. Agentic browsers were not a mass-market product when the study ran and are now shipped by two of the companies in its sample. They render everything, they are indistinguishable from Chrome in an access log, and they read text that a crawler-level block was meant to protect.9 Any advice that says AI cannot see your JavaScript is already wrong for a growing share of AI traffic.

Third, nothing replicated. No second log study of AI crawler rendering has been published that this curriculum could find, no vendor has confirmed or denied the finding, and the follow-up on AI providers promised in the earlier article has not appeared.2 Twenty months is a long time here. The right response is not to flip the conclusion, and not to keep quoting it as settled either.

The SPA case

What do you do if your site is a single-page app?

A rewrite is not the requirement. The requirement is narrower: the words a reader would quote have to be in the initial HTML response. The study scopes its own recommendation that way, naming main content, titles, descriptions, categories and navigation as the things to server-render, and leaving client-side rendering in place for counters, widgets and interactive enhancements.1

There is more headroom than teams assume, because the target is the response body rather than rendered markup. The same post notes that content in the initial HTML response, including JSON data, may still be indexed, since these systems can interpret content that is not HTML.1 A framework that already serialises its page data into the document has cleared the bar without migrating anything.

So do the fetch first. Request the page with a plain command-line client, no JavaScript, and read what comes back. If the headline, the first two paragraphs and the internal links are there, the topic is closed for that page. If it is an empty container and a bundle, you know the problem per page rather than per site. One team that ran this across a marketing site expecting a migration found eleven of fourteen key pages already served their copy, and the three that did not were the pricing table, the comparison grid and a customer story: the three pages an engine would most want to quote.

Cheapest fixes that land

  • Prerender or statically generate the pages that carry your argument, and leave the app alone
  • Serialise the page copy into the initial response, as HTML or JSON, before touching the framework
  • Render cleanly when resources are missing, what Apple’s docs call graceful degradation5

Not worth doing

  • Sniffing user agents to serve bots a different page: Google calls dynamic rendering a workaround, not a recommended solution4
  • A framework migration justified by one unreplicated blog post rather than by a fetch you ran yourself
  • Blocking your own JavaScript and CSS in robots.txt, which breaks the two engines that do render
What one unreplicated measurement can and cannot establish

It can establish this much: on those properties, in that month, requests carrying those user agents produced no render beacon. That is a real observation and the best evidence anyone has published. It cannot establish that those crawlers have no renderer, that the finding holds in 2026, that it holds for tokens the vendors added later, or that it holds outside one hosting network whose largest sampled property is the documentation site for a framework that vendor maintains. The incentive is worth naming without treating it as disqualifying: the publisher sells server-side rendering, and the finding recommends server-side rendering. First-party log data is still the right evidence here; one blog post with no stated sample and no window is not enough of it.

Where a product fits, and where it does not

Nothing on this page needs software. The check is one command per page, and the fix is a build-time decision your own team owns. Bavior does not crawl your site, does not render pages, and cannot tell you whether an engine executed your bundle; no tool can, because the engines do not report it. What it does sits downstream: it runs a fixed prompt set across five engines on a schedule and records which sources each answer cited, which is how you find out whether moving your copy into the initial response changed who gets named. Where a cited source is a live discussion thread, it drafts a reply on an account you control, for you to approve before anything posts. The free AI visibility check and the free GEO audit run without a paid plan; paid plans are from $99/mo billed monthly, or $79.17/mo billed annually (as of 30 Aug 2026).

Sources, all checked 30 Aug 2026
  1. Zecchini, Moore, Ubl, Siddle, “The rise of the AI crawler”, Vercel and MERJ, 17 Dec 2024 (the only published measurement; first-party log data; no calendar window stated): vercel.com/blog/the-rise-of-the-ai-crawler
  2. Zecchini, Moore et al., “How Google handles JavaScript throughout the indexing process”, Vercel and MERJ, 31 Jul 2024 (the beacon method; Googlebot, 1 to 30 April 2024, over 37,000 matched pages): vercel.com/blog/how-google-handles-javascript-throughout-the-indexing-process
  3. Google Search Central, “Google’s Guide to Optimizing for Generative AI Features on Google Search”, last updated 10 Jul 2026 (JavaScript processing; first-party): developers.google.com/search/docs/fundamentals/ai-optimization-guide
  4. Google Search Central, “Dynamic rendering as a workaround”, last updated 10 Dec 2025 (first-party): developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering
  5. Apple, “About Applebot” (browser rendering, blocked resources, graceful degradation; first-party): support.apple.com/en-us/119829
  6. OpenAI, crawler and bot documentation (four tokens; no rendering statement anywhere on the page; first-party): developers.openai.com/api/docs/bots
  7. Anthropic, “Does Anthropic crawl data from the web?”, updated 7 Apr 2026 (three robots; no rendering statement; first-party): support.claude.com/en/articles/8896518
  8. Perplexity, bots documentation (PerplexityBot and Perplexity-User; no rendering statement; first-party): docs.perplexity.ai/guides/bots
  9. Chandrasekar and Jaźwińska, Tow Center for Digital Journalism, “How AI Browsers Sneak Past Blockers and Paywalls”, 30 Oct 2025: cjr.org/analysis/how-ai-browsers-sneak-past-blockers-and-paywalls.php
FAQ

Frequently asked questions.

Does my single-page app need a full rewrite to be cited by AI search?

Almost certainly not. The requirement is that the words a reader would quote arrive in the initial HTML response, not that your whole application is server-rendered. Prerendering or statically generating the handful of pages that carry your argument satisfies it, and the December 2024 study explicitly leaves client-side rendering in place for view counters, widgets and interactive enhancements, where nothing quotable lives.

Is it true that AI crawlers cannot see JavaScript?

Not as a general statement. Google and Applebot both document that they render, Gemini runs on Googlebot's infrastructure, and agentic browsers are Chromium builds that execute everything. The claim traces to one infrastructure log study published on 17 December 2024, which observed no execution by five crawler families. Nobody has replicated it, and no vendor in that group documents a position either way.

How do I test whether my page's text is in the initial HTML response?

Request the page with a plain command-line client that runs no JavaScript, then read what comes back. If the headline, the first two paragraphs and the internal links are present, the question is closed for that page. If you get an empty container and a script bundle, you have found a real problem, and you have found it per page rather than per site.

If agentic browsers render everything, does server-side rendering still matter?

Yes, because the two classes read your site for different reasons. An agentic browser renders one page a person asked for, in one session. A crawler builds the index that decides whether you are a candidate at all, and the crawlers with the largest measured volumes are the ones with no documented renderer. Serving your copy in the response covers both; relying on agentic rendering covers only the traffic that already found you.

Bavior Editorial

The team that researches and maintains Bavior’s writing on Reddit marketing and AI search visibility. Every figure here is attributed to a named source with the date it was checked, and none of our links are affiliate links.

Found a number that looks wrong? Tell us and we will re-check it: support@bavior.com

Your text is either in the HTML,
or it is a guess.

Start free trial