ReadableByAI
Menu ▾
Learn — AI crawlers, measured

Do AI crawlers run JavaScript? What GPTBot, ClaudeBot and PerplexityBot actually receive

By Alex Bouchard · 6 September 2026

Short answer: no. The crawlers that feed ChatGPT, Claude and Perplexity fetch your HTML and read what is in it. They do not run your JavaScript, so anything your page draws after load — the hero copy a React app injects, the product list a fetch call fills in, the pricing table that mounts on the client — is not there for them. To those crawlers, a client-rendered page is a handful of words, or none.

What the vendors say, and what the measurements say

OpenAI documents GPTBot, OAI-SearchBot and ChatGPT-User; Anthropic documents ClaudeBot, Claude-SearchBot and Claude-User; Perplexity documents PerplexityBot and Perplexity-User. None of those pages, checked in September 2026, say the crawler executes JavaScript. Vercel, which sees these crawlers hit its network at scale, put it plainly in its crawler study: none of the major AI crawlers render JavaScript — it names OpenAI, Anthropic, Meta, ByteDance and Perplexity — while Googlebot and Applebot do. The AI crawlers do download .js files as text; they just never execute them.

Our own measurement agrees. The ReadableByAI Index fetched 661 company sites the way these crawlers fetch them and counted the words in the raw HTML; about a quarter of the startups served a page that is effectively blank without JavaScript. The full method and the aggregate numbers are in the Index report.

Check it in one command

Replace the domain. The word count of the output is what the crawler has to work with.

curl -sL -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot" \
  https://example.com/ | sed -e 's/<script[^>]*>[^<]*<\/script>//g' -e 's/<[^>]*>/ /g' | wc -w

A few hundred words or more and you are readable. Single digits and you are shipping a shell: a <div id="root">, a script tag, and nothing else. The browser version of the same test is view-source, or disabling JavaScript and reloading.

The fix is rendering, not a rewrite

The words have to be in the HTML response. Every mainstream framework has a switch for that: Next.js App Router pages are server components by default and static generation is one export away; Nuxt, SvelteKit, Remix and Astro render on the server out of the box; a Vite or Create React App single-page app can be prerendered at build time for its marketing routes. It is usually a day or two of engineering for the pages that matter, and you can leave the app itself client-rendered behind the login.

Two traps to avoid. First, a noscript fallback is not a fix: crawlers read it, but so does nothing else, and it drifts out of date. Second, rendering the words is not enough if an edge rule turns the crawler away before it reads them — see what Cloudflare's AI-bot defaults actually block.

Check your own site

Paste your domain. The scan fetches your homepage with each crawler's documented user agent, counts the words that survive without JavaScript, and shows you the exact HTML each one received.

Scan free →

Sources

Questions people ask

Does ChatGPT execute JavaScript when it reads a website?

Nothing in OpenAI's crawler documentation says GPTBot, OAI-SearchBot or ChatGPT-User execute JavaScript, and Vercel's study of crawler traffic on its network found they do not render it. Treat the raw HTML your server sends as the whole page as far as ChatGPT is concerned.

Does Google's AI render JavaScript?

Yes. Gemini and Google's AI features draw on Googlebot's index, and Googlebot renders pages. Applebot also renders. That is why a client-rendered site can rank in Google and still be blank to ChatGPT, Claude and Perplexity.

How do I check whether my site is blank to AI crawlers?

Fetch your homepage with JavaScript disabled — curl with a crawler user agent, or view-source in a browser — and count the words in the HTML. Our free scan does exactly that with each vendor's documented user agent and reports the word count per crawler.

Is a single-page app always invisible to AI?

Only if the content is rendered on the client. Server-side rendering, static generation or prerendering puts the words in the HTML response, and the framework you already use almost certainly supports one of them.

Check your own site

Sixty seconds, no signup: fetch your homepage the way GPTBot, ClaudeBot and PerplexityBot fetch it, count the words that survive, and read what your robots.txt actually tells each AI bot.

Scan free →

Corrections: every claim on this page is attributable to vendor documentation or to our own published measurement. If one is wrong, tell us and it gets fixed with a dated note.