FEATURE Render Gap analysis

AI crawlers don’t run JavaScript. Does your site?

GPTBot and PerplexityBot read your raw HTML and skip your JavaScript entirely. Beacon renders your page in a real headless browser and shows you exactly the content — and keywords — AI engines never see.

Start free Run a free check
See the output

An example render-gap report

This is what Beacon shows for a client-rendered page — Example · sample data

Render mode
Client-rendered
Near-empty for AI
Content only in JS
63%
of visible words absent from raw HTML
Verdict
AI crawlers like GPTBot & PerplexityBot see a near-empty page — your headings, pricing and FAQ load only after JavaScript runs.
Static HTML vs Rendered DOM
Static HTMLAI crawlers
632 words16 links
Static (no JS)
Rendered DOMReal browser
1,730 words34 links
Rendered (with JS)
Keywords AI crawlers miss6 hidden
pricingfeaturesreviewsavailabilitybookinginstant
What Render Gap shows

See your page through an AI crawler’s eyes

A real render, a real diff — the precise gap between what bots fetch and what users see.

Static vs rendered comparison

See your raw HTML side by side with the fully JavaScript-rendered DOM — exactly the difference between what GPTBot fetches and what a browser shows.

% of content only in JS

A single number: how much of your visible text exists only after JavaScript runs, and is therefore invisible to non-rendering AI crawlers.

Keywords AI crawlers miss

The specific terms — product names, prices, FAQ answers, key copy — that appear in the rendered DOM but are absent from the static HTML.

Render mode classification

Beacon labels each page server-rendered, hybrid, or client-rendered so you instantly know how exposed you are.

Real headless render

We load your page in an actual headless browser, run its JavaScript, and diff the result — no heuristics, no guessing what a crawler sees.

Fix guidance (SSR / prerender)

Concrete next steps: server-side rendering, static generation, or dynamic prerendering for AI bots — mapped to your stack.

Try it on your site

Check your render gap free

Enter a URL for an instant AI-readiness score. The full static-vs-rendered diff — word gap, render mode and the keywords bots miss — runs inside Beacon.

https://
How it works

Why AI crawlers read an emptier page than your users

AI crawlers like GPTBot (OpenAI / ChatGPT), PerplexityBot, ClaudeBot and Amazonbot request your URL and parse the raw HTML that comes back — the same bytes you’d see with “View Source.” They don’t launch a browser engine or run your scripts. So a single-page app that ships an almost empty <div id="root"></div> and injects all its real content (headlines, prices, FAQ answers) with JavaScript looks complete to a human and blank to a bot. You can rank in Google, look perfect to visitors, and still be invisible to the AI engines your buyers ask for recommendations.

Beacon doesn’t guess. We fetch your page’s static HTML the way a non-rendering crawler does, load the same URL in a real headless browser to capture the rendered DOM, then diff the two — reporting the percentage of content that exists only after JavaScript runs, the exact keywords missing from the static version, and your render mode (server-rendered, hybrid, or client-rendered) so you know instantly how exposed you are.

The fix is always the same principle: get your important content into the HTML the server sends, before any JavaScript runs — via server-side rendering, static generation, or dynamic rendering for bots. Render Gap pairs with the rest of Beacon: the free AI Visibility Checker, AI Search Visibility, a full SEO Audit, then a free account to track your render gap over time.

Frequently asked questions

Do AI crawlers execute JavaScript?

Almost none of them do. GPTBot (ChatGPT/OpenAI), PerplexityBot, ClaudeBot, Amazonbot and most other AI crawlers fetch your raw HTML and parse it as-is. They do not spin up a browser engine to run your JavaScript, so any content injected by JS after load is effectively invisible to them.

What is a render gap?

A render gap is the difference between your static HTML (what AI crawlers download) and your JavaScript-rendered DOM (what a human in a browser sees). Beacon expresses it as the percentage of visible content and the set of keywords that only exist after JavaScript executes. A large render gap means AI engines are reading a near-empty page.

Will my React or Next.js site have a render gap?

It depends on how you render. A pure client-side React app (e.g. Vite SPA or create-react-app) ships an almost empty HTML shell and builds everything with JS — that is a maximal render gap. Next.js, Remix, Astro and similar frameworks can server-render or statically generate pages, which closes the gap — but only for the routes you actually configure that way. Beacon checks the real output rather than assuming.

How do I fix a render gap?

Move your important content into the HTML the server sends. The main options are server-side rendering (SSR), static site generation (SSG / prerendering at build time), and dynamic rendering, where you serve a prerendered HTML snapshot to bots. At minimum, make sure headings, body copy, prices, and FAQ answers are present in the static HTML rather than fetched and injected by client JavaScript.

Does Google see JavaScript content?

Mostly yes — Googlebot runs a modern rendering engine and will execute your JavaScript in a second pass, so client-rendered content can still rank (though rendering is slower and can be deferred). The critical difference is AI search: GPTBot, PerplexityBot and most LLM crawlers do not render JavaScript at all. So you can pass a Google JS-SEO check and still be invisible to ChatGPT and Perplexity.

See what AI crawlers really read on your site

Free account — render-mode classification, the keywords bots miss, and how to close the gap.

Start free Run a free check