GPTBot fetched JavaScript files on 11.5% of its requests across Vercel's network in December 2024, and it executed none of them. Anthropic's Claude fetched JavaScript at nearly twice that rate, 23.84%, and ran zero lines of it too. Almost two years on, the mechanic hasn't changed. As of September 2026, GPTBot, ClaudeBot, and PerplexityBot still read the raw HTML a server sends them and ignore anything that only appears after a browser executes your JavaScript. Google's Gemini crawler is the one major exception, because it reuses Googlebot's own rendering pipeline. For a site built on client-side rendering, that gap decides whether an AI engine can see the page's content at all.
Does GPTBot render JavaScript?
No. OpenAI's developer documentation lists four separate crawlers, GPTBot, OAI-SearchBot, ChatGPT-User, and OAI-AdsBot, and describes what each one does without mentioning JavaScript execution anywhere. Vercel's December 2024 crawl study found GPTBot generated 569 million fetches across its network in a single month, and it rendered none of the client-side content those fetches touched.
GPTBot identifies itself with a user agent string ending in +https://openai.com/gptbot, and OpenAI publishes its crawler IP ranges at openai.com/gptbot.json so site owners can verify a request is genuine. It respects robots.txt disallow rules for training. ChatGPT-User works differently: OpenAI's documentation notes that robots.txt rules may not apply to it, because a person, not an automated crawl job, triggered the fetch when they asked ChatGPT to visit a page.
Does ClaudeBot render JavaScript?
No. Anthropic operates three separate bots. ClaudeBot collects training data, Claude-User fetches a page when someone asks Claude a live question, and Claude-SearchBot checks pages for search-result quality. None of them execute JavaScript, according to both Anthropic's own documentation and Vercel's testing. Claude generated 370 million fetches across Vercel's network in the same December 2024 window, fetching JavaScript files on 23.84% of requests and running none of them.
Anthropic's documentation states plainly that it respects robots.txt and will not attempt to bypass CAPTCHAs to reach blocked content. That leaves the same practical limit as GPTBot: whatever text exists in the HTML response is what ClaudeBot can use, and whatever only appears after your framework hydrates the page stays invisible to it.
Does PerplexityBot render JavaScript?
No. PerplexityBot generated 24.4 million fetches across Vercel's network in December 2024, far fewer than GPTBot or Claude, and like both of them it never executed the JavaScript it downloaded. Perplexity's own crawler documentation doesn't claim rendering capability either.
The gap shows up in how Perplexity treats pages it can't fully read. SEO analyst Glenn Gabe tested this directly in August 2025 and found a JavaScript-dependent page got pushed into Perplexity's secondary "Reviewed" section rather than appearing as a primary citation, even when it directly matched the query he asked.
The one exception: why Gemini can see what the others can't
Google's Gemini crawler, Google-Extended, does render JavaScript, for a specific structural reason: it shares Google's Web Rendering Service with Googlebot. Google engineer Martin Splitt confirmed this directly in May 2025, explaining that the AI crawler Gemini uses "also renders" because the rendering service is shared across Google's products, web search included.
Apple's crawler behaves the same way, rendering JavaScript fully instead of reading raw HTML. That makes Gemini and Apple's crawler outliers worth planning around separately from ChatGPT, Claude, and Perplexity: a page that only shows content after a client-side render can still surface correctly in Gemini's answers while staying invisible everywhere else. If you've already put work into optimizing specifically for Gemini, this is one more reason those pages can behave differently from the rest of your GEO surface.
Google's Gemini crawler is the only major AI answer engine that renders JavaScript the way a browser does, because it reuses Googlebot's rendering infrastructure instead of reading raw HTML like GPTBot, ClaudeBot, and PerplexityBot.
What a real-world test actually found
In August 2025, Glenn Gabe ran a direct test rather than relying on vendor claims. He asked ChatGPT, Perplexity, and Claude to read pages from a site built entirely on client-side rendering, then compared the results against server-rendered pages on the same domain.
All three systems reported the same limitation back to him: they could not read content that only appeared after JavaScript executed. The affected pages also showed generic default favicons in AI search results, even though they displayed correctly in Google and Bing, and follow-up tests on other JavaScript-heavy sites produced identical results. Gabe's fix matches what OpenAI's, Anthropic's, and Perplexity's own documentation implies without saying outright: render the content server-side, or the page functionally doesn't exist for these three engines.
Why the mechanics still matter two years later
Crawl volume from these bots keeps growing, so a rendering gap in 2026 blocks more requests than the same gap did in 2024. Cloudflare's Radar data shows GPTBot's share of overall crawler traffic rose from 4.7% to 11.7% between July 2024 and July 2025, and ClaudeBot's share rose from 6% to 9.9% over the same period.
The trade-off looks different depending on the engine. Cloudflare found Anthropic's crawl-to-refer ratio, the number of pages it crawls for every visit it sends back, fell 87% between January and July 2025, from roughly 287,000 crawls per referral down to about 38,000. Perplexity moved the other way: its ratio more than tripled over the same period, meaning it now crawls far more pages before sending back each visitor than it used to. Either way, more of your site is getting scanned by bots that can only read what's already sitting in the HTML, which raises the cost of getting the rendering wrong. Which crawlers even reach your pages in the first place is a related but separate question, covered in our breakdown of what robots.txt actually blocks for each bot.
How to check whether your site is readable by AI crawlers
Four checks catch most of the gap between what you assume an AI engine sees and what it actually reads, and none of them need specialized tools.
View the page's raw source, not the browser's rendered DOM, for the specific sentence or stat you want an engine to cite. If it's missing from source but visible on screen, JavaScript added it.
Ask ChatGPT, Claude, or Perplexity directly to summarize a specific URL and see whether it can, the same test Gabe ran.
Check server logs for GPTBot, ClaudeBot, and PerplexityBot user agents to confirm they're reaching your actual content pages, not just the homepage.
If a page is built client-side, add server-side rendering or static generation for the content routes specifically. The rest of the app can stay client-rendered without changing what these three crawlers see.
A guide like our look at llms.txt covers the adjacent question of telling AI crawlers what exists on your site in the first place, once you've confirmed they can actually read it. Tools such as VizibleAI can also show which of your pages are getting fetched and cited across these engines, instead of guessing from server logs alone.
Frequently Asked Questions
Do any AI crawlers render JavaScript in 2026?
Only Google's Gemini crawler, Google-Extended, and Apple's crawler render JavaScript fully, because both reuse rendering infrastructure built for their existing search engines. GPTBot, ClaudeBot, and PerplexityBot all read raw HTML only, according to vendor documentation and independent testing through 2025 and 2026.
What happens if my page's content only appears after JavaScript runs?
The major AI answer engines see an empty or near-empty page. Glenn Gabe's August 2025 test found ChatGPT, Perplexity, and Claude all reported they couldn't read JavaScript-dependent content, and the affected pages were pushed into lower-priority citation sections instead of appearing as primary sources.
Does GPTBot even fetch JavaScript files?
Yes. Vercel's crawl data found GPTBot requested JavaScript files on about 11.5% of its fetches, and Claude did so on 23.84%, but neither crawler executed the code once it downloaded it. Fetching and executing are separate steps, and both bots stop after the first one.
Is ChatGPT-User the same crawler as GPTBot?
No. OpenAI documents four separate crawlers: GPTBot trains models, OAI-SearchBot powers ChatGPT's search results, ChatGPT-User fetches a page a person asks it to visit, and OAI-AdsBot checks ad landing pages. OpenAI's documentation notes robots.txt rules may not apply to ChatGPT-User, since a person triggered the request rather than an automated crawl.
How do I make my site readable without rebuilding it as a static site?
Server-side rendering or pre-rendering just the content-bearing routes is usually enough. The page's core text needs to exist in the initial HTML response; navigation, personalization, and other interface chrome can stay client-side without changing what an AI crawler sees.
Tracking whether these crawlers actually cite the pages they can read
Knowing that GPTBot can't render your JavaScript doesn't tell you which of your pages are getting fetched, or whether the ones AI engines can read are the ones actually showing up when someone asks ChatGPT, Claude, Gemini, or Perplexity about your category. VizibleAI tracks brand mentions, citations, and share of voice across all four engines, so you can see the difference between a page that's merely crawlable and one that's actually getting cited. Plans start at €39 a month.



