In short
A JavaScript shell is a page whose delivered HTML carries almost no text. The content only appears once the browser runs JavaScript and fetches it. A person notices nothing. An AI crawler gets the frame and nothing else.
Why this hits AI crawlers in particular
Because they run no JavaScript. Vercel analysed this across its own network in December 2024: none of the major AI crawlers render JavaScript. GPTBot and ClaudeBot do download JavaScript files, ChatGPT on 11.5 percent of requests and Claude on 23.8 percent, but they do not execute them. GPTBot alone made 569 million requests there in the measured month.
The one exception is Google-Extended. It belongs to the AI side but inherits Googlebot’s infrastructure and therefore renders.
That leaves an uncomfortable asymmetry. Your site can look fine to Google and still be empty to the models.
What it means for us
Across eleven hosts we run or look after, the window from 11 August to 10 September 2026 brought exactly 17,290 verified requests from AI crawlers. None of them ran JavaScript, and none of them appears in a counter that runs in the browser. Looking only at analytics, you see none of this traffic, see AI crawler.
On a page built as a JavaScript shell, those 17,290 requests would have found nothing readable.
The most common mistake
“Google can do JavaScript, so the others can too.”
Google can, because it spent years and a lot of money building for it. The AI providers take the text and move on. What looks the same between a search engine and an answer engine is technically a different thing.
Where the boundaries run
Server-side rendering and static delivery. Both solve the problem, because the finished text is already in the HTML before any script runs. Whether the page is built on every request or once at deployment makes no difference to the crawler.
Client-side rendering. The case that produces the shell. Not wrong in itself, and behind a login it is the right choice. For pages meant to be found, it is not.
Verified crawl. Answers the other half of the question, whether the request was genuine at all, see Verified crawl.
How to check it yourself
Fetch the raw HTML without a browser and count the text in it:
curl -s https://your-site.com | sed 's/<[^>]*>//g' | tr -s ' \n' ' ' | wc -w
Compare that with what you read in the browser. If the page visibly carries several hundred words and this command returns a two-digit number, you have a shell. Small differences are normal, a factor of ten is not.
Sources
- Vercel, The rise of the AI crawler, 17 December 2024, retrieved 10 September 2026: https://vercel.com/blog/the-rise-of-the-ai-crawler
- Own measurement across eleven hosts, Munot daily cubes, 11 August to 10 September 2026