No major AI crawler runs your JavaScript. Here is how to check in one command.

Summary

Vercel and MERJ reported in December 2024 that no major AI crawler executes JavaScript: GPTBot requested JavaScript files 11.5% of the time and ClaudeBot 23.8%, and neither ran them. Gemini and Applebot are exceptions because they reuse existing rendering infrastructure. The practical consequence is that whatever appears in the initial HTML response is the entire content of the page as far as most AI crawlers are concerned. A single curl command with a crawler user-agent tells you which situation you are in, and the fix is usually smaller than a rebuild.

Published

What did Vercel and MERJ actually find?

In December 2024, Vercel and MERJ published an analysis of AI crawler behaviour and reported that none of the major AI crawlers execute JavaScript. GPTBot requested JavaScript files 11.5% of the time and ClaudeBot 23.8%, but neither ran them — they downloaded the files and treated them as text. Google's Gemini and Applebot were the exceptions, because both reuse rendering infrastructure that already existed for classic search.

That is a narrower claim than "AI cannot read your site", and the difference matters. It does not mean your site is invisible. It means that whatever a crawler receives in the initial HTML response is the entire content of your page as far as that crawler is concerned.

Why this outranks almost every other technical fix

Most technical work moves a page's chances at the margin. This one is binary. If your content is injected by JavaScript after load, a crawler that does not run scripts receives a near-empty document — a shell, a loading state, maybe a navigation menu. There is nothing to chunk, nothing to embed, nothing to retrieve and nothing to cite.

It also fails silently. Your analytics look normal because human browsers render fine. Your rankings may be unaffected, because Googlebot does render JavaScript. The only symptom is absence from answers you were never watching in the first place.

How to check, in one command

Request the page with a crawler's user-agent, do not execute anything, and search the returned HTML for a phrase you know is on the page:

curl -A "GPTBot/1.2 (+https://openai.com/gptbot)" https://example.com/your-page -s | grep -i "a phrase from your page"

If the phrase comes back, the content exists in the initial response. If nothing comes back, it does not — and that is the whole finding. Run it against your homepage, one service page, and one blog post, because different templates often render differently.

Two notes on interpreting it. Use a phrase from the body copy rather than the title, since titles are often server-rendered even when body content is not. And check a page that loads content on scroll separately, because lazy-loaded sections frequently fail even when the top of the page passes.

What to do with each outcome

Result What it means What to do
Phrase found on every template Content is server-rendered. This is not your problem. Move on to entity and passage structure.
Found on some templates, not others Mixed rendering — common when a marketing site and an app share a framework Identify which templates fail and convert those to static or server rendering.
Nothing found anywhere Client-rendered. Most AI crawlers see an empty page. Fix rendering before any content work. Everything else is premature.

The fix is usually smaller than it sounds

"Server-side rendering" sounds like a rebuild and usually is not. Next.js, Nuxt, SvelteKit and Astro all have static-generation or server-rendering modes for exactly this, and marketing pages are typically the easiest part of an application to convert because they rarely depend on user state. The expensive scenario is a hand-rolled single-page application with no framework support, and even then the pages that matter for retrieval are usually the static ones.

On a hosted platform — Shopify, Webflow, WordPress — templates are server-rendered by default, and the usual culprit is a third-party app or widget injecting content client-side. Check what is inside the missing region before assuming the platform is at fault.

What this test does not tell you

It does not tell you whether you will be cited. It tells you whether you are eligible to be. A page that passes this test can still be ignored for being generic, poorly structured, or attached to an organisation the engine cannot identify. But a page that fails it cannot be cited at all, which is why it is worth spending ten minutes on before anything else.

Frequently asked questions

Do AI crawlers execute JavaScript?

Not the major ones. Vercel and MERJ found in December 2024 that GPTBot and ClaudeBot download JavaScript files but never run them, requesting them 11.5% and 23.8% of the time respectively. Gemini and Applebot do render, because they reuse infrastructure built for classic search.

How do I test whether my content is visible to AI crawlers?

Request the page with a crawler user-agent and no script execution, then search the returned HTML for a phrase from your body copy. If the phrase is absent, the content does not exist for crawlers that cannot render. Test at least three templates, since rendering often differs between the homepage, service pages and articles.

Does my site need a rebuild if it fails the test?

Usually not. Next.js, Nuxt, SvelteKit and Astro all support static generation or server rendering, and marketing pages are typically the easiest part of an application to convert because they rarely depend on user state. On hosted platforms the usual cause is a third-party widget injecting content client-side rather than the platform itself.

Find out what the engines currently say about you

Send me your company name and website. I run a set of buyer questions across ChatGPT, Perplexity, Gemini, Claude and Google's AI Overviews, and send back a recorded walkthrough of what came out: where you appeared, where you did not, who was named instead, and the two or three structural reasons why. No charge, no obligation, and you keep the findings whether or not you decide to hire me.

I run these myself, so there is a queue. Expect a few working days rather than an instant report.