Most AI crawlers don't run your JavaScript
Most AI crawlers fetch HTML and never execute JavaScript, so a client-rendered page can look completely empty to them even though it renders fine in a browser.
The gap between your browser and a crawler
Googlebot renders JavaScript, on a delay and a budget. Most AI crawlers do not render at all — they fetch HTML, parse it, and move on. Whatever is not in that first response effectively does not exist.
This is why a beautifully working SPA can be invisible in AI answers while ranking acceptably in Google.
Check it in one command
Curl your own page and look at what comes back. If your headline is not in there, no crawler that skips JS will ever see it:
curl -s https://yoursite.com | grep -o '<h1[^>]*>[^<]*' # Or measure how much readable text survives without JS: curl -s https://yoursite.com \ | sed -e 's/<script[^>]*>.*<\/script>//g' -e 's/<[^>]*>/ /g' \ | tr -s ' ' | wc -c
Why the text-to-markup ratio misleads
A tempting metric is readable text as a share of total HTML. It is a poor pass/fail test on its own: modern React and Next.js apps inline large hydration payloads, so a properly server-rendered page can show a 2% ratio and still be perfectly readable.
We built our checker on absolute text length instead, precisely because the ratio failed real, well-built sites. Ratio is useful as a token-cost signal — how expensive you are to read — not as a rendering verdict.
Fixing it
Server-render or statically generate anything that carries meaning: headings, body copy, prices, specs. Next.js App Router does this by default until you opt out with a client component; the common failure is fetching content in a useEffect and rendering nothing until it resolves.
Interactive extras can stay client-side. The substance cannot.
Does this apply to your site?
The free checker runs this check and eighteen others, then generates the files to fix whatever fails.
Run the checkerRelated
- Which AI crawlers is your robots.txt blocking?GPTBot, ClaudeBot, PerplexityBot and Google-Extended each read robots.txt. A single Disallow can make your site invisible to AI answers — often unintentionally.
- JSON-LD is how AI answer engines know what you areStructured data turns a page into facts an engine can quote with confidence. Which schema types matter, and the @graph mistake that makes valid markup look invalid.