JavaScript rendering
JavaScript rendering is the step in which a crawler executes a page's scripts before reading its content. Google queues every page it fetches with an HTTP 200 status for rendering, unless a robots meta tag says otherwise, and runs the scripts in an evergreen build of Chromium[1]. Server log measurements published by Vercel and MERJ in December 2024 found the crawlers behind ChatGPT, Claude, Perplexity and Meta do not[2], and neither does Common Crawl's CCBot[3], so anything a client-side script writes into the page is invisible to them.
How Google handles it
Googlebot keeps crawling and rendering in separate queues. Every response with an HTTP 200 status is queued for rendering unless a robots meta tag says otherwise, and a headless Chromium then runs the scripts[1]. Across more than 100,000 Googlebot fetches of nextjs.org, excluding error status codes and non-indexable pages, every HTML page rendered fully, including content fetched asynchronously and streamed React Server Components[4]. The wait is usually short: over 37,000 rendered pages matched with server-beacon pairs gave a median delay of 10 seconds and a 75th percentile of 26 seconds, with a tail near 18 hours at the 99th[5]. A noindex tag in the initial HTML cancels rendering entirely, so a script written to remove it never runs[6].
AI crawlers stop at the first response
The same partnership measured the main AI crawlers and found none of them executing JavaScript, covering OpenAI's GPTBot, OAI-SearchBot and ChatGPT-User, Anthropic's ClaudeBot, Meta-ExternalAgent, Bytespider and PerplexityBot[2]. They download script files without running them, at 11.50% of ChatGPT's requests and 23.84% of Claude's[7]. Gemini is the exception, riding Googlebot's infrastructure and rendering in full, as does AppleBot through a browser-based crawler, while Common Crawl's CCBot does not render[3]. Volumes in the month measured were 4.5 billion Googlebot fetches across Gemini and Search, against 569 million for GPTBot and 370 million for Claude[8].
Rendering support by crawler
| Crawler | Operator | Executes JavaScript |
|---|---|---|
| Googlebot | Yes, evergreen Chromium | |
| Gemini | Yes, on Googlebot infrastructure | |
| AppleBot | Apple | Yes, browser-based crawler |
| Bingbot | Microsoft | Generally yes |
| GPTBot | OpenAI | No |
| OAI-SearchBot | OpenAI | No |
| ChatGPT-User | OpenAI | No |
| ClaudeBot | Anthropic | No |
| PerplexityBot | Perplexity | No |
| Meta-ExternalAgent | Meta | No |
| Bytespider | ByteDance | No |
| CCBot | Common Crawl | No |
Compiled from the Vercel and MERJ log study[2][3], Google's rendering documentation[1] and Microsoft's 2018 statement on bingbot[9]. Support is a moving target and is worth rechecking against each operator's own documentation.
Consequences for client-rendered sites
Google's documentation still advises server-side or pre-rendering, since not all bots run JavaScript[10], and Google's answer surfaces add no requirement of their own: a page must be indexed and eligible for a snippet before it can appear as a supporting link in AI Overviews or AI Mode[11]. Microsoft's 2018 guidance describes bingbot as generally able to render while still recommending dynamic rendering for sites that rely heavily on JavaScript[9]. For assistants that read only the first response, a single-page application delivers an empty shell, and titles, prices, body copy and structured data injected after load are absent from what the model sees[7]. MERJ's 2026 guidance frames the fix as one canonical URL served in several representations rather than a second site[12].
Data
Show the numbers (5)
| Point | million fetches |
|---|---|
| Googlebot | 4500 |
| GPTBot | 569 |
| Claude | 370 |
| AppleBot | 314 |
| PerplexityBot | 24.4 |
References (12)
- Understand the JavaScript SEO basics - Google Search Central documentation Archive
- The rise of the AI crawler - Vercel and MERJ Archive
- The rise of the AI crawler - Vercel and MERJ Archive
- How Google handles JavaScript throughout the indexing process - Vercel and MERJ Archive
- How Google handles JavaScript throughout the indexing process - Vercel and MERJ Archive
- How Google handles JavaScript throughout the indexing process - Vercel and MERJ Archive
- The rise of the AI crawler - Vercel and MERJ Archive
- The rise of the AI crawler - Vercel and MERJ Archive
- bingbot Series: JavaScript, Dynamic Rendering, and Cloaking - Bing Webmaster Blog Archive
- Understand the JavaScript SEO basics - Google Search Central documentation Archive
- AI features and your website - Google Search Central documentation Archive
- The agent-readable web: serving the right representation to the right crawler - MERJ
Last updated 2026-09-04. Written and maintained by Baseline Labs.