AI agents do not run your JavaScript
Browsers download your JavaScript bundle, run it, and paint the page. As of mid-2026, the major AI crawlers do not: GPTBot, ClaudeBot, PerplexityBot and their peers fetch the raw HTML response and read whatever text is in it. Google's own crawler renders JavaScript; the AI fleet, for cost and speed, generally does not.
If your site is a client-rendered single-page app, the raw HTML is a near-empty shell: a root div, some script tags, maybe a loading message. Your copy, your prices, and your docs all mount after JavaScript runs, which means agents see none of them. The page works perfectly for humans and is blank for machines.
See exactly what agents see
One command shows the truth. Strip the tags from your raw HTML and read what remains; that text is your entire site as far as most agents are concerned.
bashcurl -s https://yoursite.com \
| sed 's/<[^>]*>//g' \
| tr -s '[:space:]' ' ' \
| head -c 600
If the output is empty, a cookie notice, or a please-enable-JavaScript message, that is your pitch to the agent economy.
What a blank page costs
An assistant comparing three vendors quotes the two whose pages contain readable claims and prices; the third is not rejected, it is simply never considered. A shopping agent cannot add to cart a product whose name and price never appear in the HTML. A cited answer cannot quote text that does not exist at fetch time.
The loss is silent because your dashboards measure humans. Rankings, conversion, and session metrics all look normal while every agent-mediated question about your category gets answered from a competitor's server-rendered pages.
SaaS docs are a special case worth naming: developers now ask assistants how to integrate tools before they ever open your site. Docs rendered client-side are docs the assistant cannot quote, which quietly costs you the developers who pick whatever the assistant could explain.
How to fix it, cheapest first
If you are on a hosted platform such as Shopify, WordPress, or most site builders, your pages are already server-rendered and you likely pass. This problem belongs mostly to custom apps built as client-side SPAs.
For app frameworks, enable server-side rendering or static generation for the public pages: Nuxt for Vue, Next for React, SvelteKit, Astro. You rarely need to convert the whole app. Prioritize the pages agents ask about: homepage, pricing, product pages, docs, and policies. The dashboard behind login can stay client-rendered forever.
If a rebuild is off the table, prerender: generate static HTML snapshots of public routes at deploy time and serve them as the initial response. Whatever you serve must be the same content humans get, since serving crawlers a different page creates a parity problem that scanners and platforms treat as cloaking.
html<!-- What an agent sees on a client-only SPA -->
<body>
<div id="app"></div>
<script src="/assets/index-8f3a2c.js"></script>
</body>
<!-- What it should see: real content in the initial HTML -->
<body>
<main>
<h1>Acme CRM: pipeline software for small teams</h1>
<p>Plans from $29/month. 14-day free trial, no card required.</p>
<a href="/pricing">Pricing</a> <a href="/docs">Docs</a>
</main>
<script src="/assets/index-8f3a2c.js"></script>
</body>How AgentReady checks it
The scanner asks: is the main content readable without JavaScript? It extracts readable text from your raw HTML, no script execution. Under 150 words combined with SPA markers (an empty root div, framework bundles) fails; 150 to 400 words warns. At 5 points this is the heaviest check in the Comprehension pillar.
The methodology's reasoning: most agents read raw HTML and do not run your JavaScript. If the page is empty until JS loads, agents see a blank page where your content should be.
Frequently asked questions
- Which AI crawlers execute JavaScript?
As of mid-2026, the mainstream AI crawlers fetch raw HTML and do not document JavaScript rendering; observed behavior agrees. Googlebot renders JavaScript, but treating JS-only content as invisible to AI agents is the safe engineering assumption.
- Is putting content in a noscript tag enough?
It is better than nothing, since noscript content is part of the HTML, but it doubles your maintenance and drifts out of date. Server-rendering the real page is the fix; noscript is a patch.
- Do I need to server-render the app behind login?
No. Crawlers never see authenticated pages, and agents acting for a user interact with forms and endpoints rather than your rendered dashboard. Spend the effort on public marketing, product, docs, and policy pages.