Do AI crawlers render JavaScript, or just fetch HTML?
GPTBot, ClaudeBot, and PerplexityBot skip the browser Googlebot uses. Here's what they see on JavaScript-heavy pages, and how to fix it for AI citations.
Googlebot has run a browser inside its crawler for years, so a page built entirely in JavaScript still gets indexed once it renders. The crawlers behind ChatGPT, Claude, and Perplexity are a different story. Most of them fetch raw HTML and stop there, which means a client-side-rendered page can look empty to the exact bots deciding whether to cite you.
How Googlebot handles JavaScript
Googlebot fetches a page, queues it for rendering, then runs it through a headless version of Chrome to execute the JavaScript before indexing the result. Rendering is delayed and resource-limited, but it happens. That is why a single-page app can still rank in classic Google search, even if it takes longer to get indexed than a static page would.
What AI crawlers actually fetch
AI crawlers work differently. OpenAI's GPTBot, Anthropic's ClaudeBot, and Perplexity's PerplexityBot are built to fetch a URL and read the HTML response. None of them are documented as running a JavaScript engine the way Googlebot does. If your content depends on a client-side fetch call or a framework that hydrates the page after load, these bots likely see an empty shell: a root element with nothing rendered inside it.
- GPTBot (OpenAI): fetches HTML, no JavaScript execution documented.
- ClaudeBot (Anthropic): same pattern, reads what the server returns.
- PerplexityBot: built for retrieval, not rendering.
- Bingbot's AI-related crawling inherits Bing's own pipeline, which does render, but on a different schedule than Google's.
Vendors rarely publish exact rendering specs, and this can change without notice. Treat it as the current default, not a permanent guarantee, and verify against your own server logs periodically rather than assuming last year's behavior still holds.
Why it matters for AI citations
AEO depends on a bot being able to read your actual content, not just find the URL. If your pricing table, product descriptions, or article body only render after a JavaScript bundle runs, a non-rendering crawler has nothing to extract into an answer. You can rank the page in Google and still be invisible to ChatGPT's citations, because the two crawlers are reading fundamentally different versions of the same URL.
This shows up most on marketing sites built with a client-heavy framework, single-page apps that fetch content after load, and any page where the meaningful text sits behind a loading spinner. The page looks complete in a browser. The raw response an AI crawler receives can be close to blank.
How to check what a bot sees
- Fetch the page with a plain HTTP request, or your browser's network tab with JavaScript disabled, and read the raw response.
- Compare it to what you see with JavaScript enabled. If the raw HTML is missing your headings, body text, or product data, a non-rendering crawler is missing it too.
- Check your server logs for GPTBot, ClaudeBot, and PerplexityBot requests and confirm they get a 200 status with real content, not a redirect or an empty shell.
- Re-test after any framework, hosting, or CDN change. A migration to a new rendering strategy can quietly break this.
How to fix it
The fix is the same one JavaScript SEO has used for years: render the important content on the server or at build time, so it is present in the initial HTML response regardless of who is asking. Server-side rendering, static site generation, and incremental static regeneration all work. Dynamic rendering, serving a pre-rendered snapshot to known bots while serving the client-rendered app to users, is a viable stopgap, but it adds a second code path to maintain, and Google itself has cooled on recommending it long-term.
- Move core content (headings, body copy, prices, specs) into the server-rendered HTML.
- Avoid gating primary content behind a client-side fetch that only runs after hydration.
- If you use dynamic rendering, keep the snapshot honestly identical to the page users see.
- Do not assume a good Google ranking means AI crawlers can read the page too. Test the two paths separately.
Googlebot's willingness to render JavaScript bought a lot of sites some slack. AI crawlers have not extended the same courtesy, at least not yet. If you want your pages to show up in AI answers, check what a non-rendering bot actually receives, not just what loads in your browser.