Why AI assistants see a blank page on your site

By The AI Visibility Checker team8 min read

Last updated: July 12, 2026

TL;DR

Most AI crawlers — GPTBot, ClaudeBot, PerplexityBot — don't run JavaScript. They read the raw HTML your server sends before any script executes. If your site is client-side rendered, that raw HTML is an empty <div id="root">, so the bot sees a blank page no matter how good the content looks in a browser. The fix is to server-render or pre-render your content so it's in the HTML on arrival. It's not optional — for AI visibility, server-side rendering is table stakes.

What the bot actually receives

When a browser loads a single-page app, it downloads a near-empty HTML shell, runs your JavaScript, and the JavaScript fetches data and paints the content. A human never notices. But an AI crawler that doesn't execute JavaScript stops at step one: it gets the shell, finds no real text, and moves on. Google's crawler is the main exception — it renders using Google's own infrastructure — but the AI-specific bots overwhelmingly do not. So your beautifully rendered page and the page a model sees can be two completely different documents.

Why a blank page means zero citations

Here's how a retrieval bot decides whether to cite you: it fetches candidate pages, converts each to plain text, and scores the passages against the user's question with a fast model, keeping the two-to-six best as sources. If your page converts to plain text and produces nothing — because the content only exists after JavaScript runs — you have no passages to score. You're not ranked low; you're not in the running at all. A competitor with plainer design but server-rendered HTML wins the citation by default.

Setups most at risk

  • Client-only SPAs — Create-React-App-style builds, or Vue/Angular apps with no server rendering.
  • Content behind interactions — text that only loads on scroll, tab-click, or “read more” without being in the initial HTML.
  • JS-injected key facts — prices, specs, FAQs or descriptions pulled from an API after load.
  • Framework defaults gone wrong — a page you assumed was server-rendered but is actually shipping client-side because of a mis-set rendering mode.

How to check in 30 seconds

View the raw HTML the way a non-JS bot does and look for your actual content:

curl -sS https://example.com | grep -o "<h1[^>]*>.*</h1>"
# nothing back? your <h1> is painted by JavaScript — bots won't see it

Or open “View source” (not “Inspect” — that shows the rendered DOM) and search for a sentence you can see on the page. If it's missing from the source, it's missing for AI. A scan does this automatically and flags the exact elements that only appear after rendering.

The fix: put the content in the HTML

  1. Server-side render (SSR) or statically generate (SSG) your important pages so the HTML arrives complete. Frameworks like Next.js, Nuxt and Astro do this by default when configured for it.
  2. Pre-render / hydrate. If a full rewrite isn't on the table, pre-render critical routes to static HTML and hydrate on top — the bot gets real content, the user still gets interactivity.
  3. Put facts in the initial payload. Prices, specs and FAQ answers should be in the server HTML, not fetched client-side after load.
  4. Verify per agent. Re-check the raw HTML after deploying, and add the check to CI so a future framework upgrade can't silently reintroduce the blank page (see testing AI visibility in CI/CD).

Prioritise the pages you actually want cited — product, pricing, docs, cornerstone content — before worrying about the long tail.

FAQ

Doesn't Google render JavaScript? Isn't that enough?

Google does render (which is why an SPA can still rank in Search), but the AI-specific crawlers — GPTBot, ClaudeBot, PerplexityBot — largely don't. So relying on rendering keeps you in Google while leaving you invisible to ChatGPT, Claude and Perplexity.

Is “dynamic rendering” (serving bots a different page) a good fix?

It's a last resort, not a first choice. It adds a moving part that can drift out of sync with what users see, and you have to maintain the bot list. True SSR/SSG gives bots and humans the same content and is far more durable.

My content is in the HTML but still not cited — why?

Rendering is necessary, not sufficient. Once bots can read you, citation depends on structure and authority — answer-first, quotable passages the model can extract. See how to write content AI assistants cite.

Find out what AI actually sees: run a free scan — it flags content that only appears after JavaScript. Related: why AI assistants ignore your site.