Skip to content

Answer content in raw HTML, no JavaScript

What the scan checks: it compares the raw HTML your server returns against the fully JavaScript-rendered page, and reports two numbers.

  • Lead coverage — how much of the page’s opening content is already in the raw HTML. Under 70% the check fails: that is the window an engine reads first.
  • Full-document coverage — how much of the whole rendered page is in the raw HTML. This never fails on its own, but when the opening is server-rendered and the body is not, the check warns and names both numbers.

It also flags raw HTML over 1.5MB: Google documents a 2MB cap on the HTML it fetches per page, so content past that point is never read. No AI-crawler vendor documents an equivalent limit, so treat this as a Google-surface concern rather than a proven AI-crawler one.

Most AI crawlers fetch your HTML and do not execute JavaScript, or execute it inconsistently and on a delay. Content that a browser paints from a client-side React, Vue, or single-page-app bundle is, from the bot’s perspective, a page of empty <div>s. This includes anything lazy-loaded over XHR, FAQ accordions that fetch answers on click, and components marked 'use client'. If your answer text is not in the initial HTML, the engine has nothing to extract or cite.

The durable fix is to render content routes on the server:

  • Next.js: use Server Components or getServerSideProps / getStaticProps (SSG) for content pages, so the HTML ships with the text already in it. Avoid pushing the main content into a client component.
  • Nuxt / SvelteKit / Astro: enable SSR or static output for content routes rather than client-only rendering.
  • Widget-level fix: if the site is mostly fine and only one widget fails (a pricing table loaded from an API, a lazy FAQ), refactor that widget so the answer text is in the initial HTML and hidden with CSS until interaction. The user experience is identical; the bot now sees the content.

Verify with a plain fetch that does not run scripts:

Terminal window
curl -sA "GPTBot/1.1" https://example.com/your-page | grep -i "your answer text"

If your target text is missing from that output, the crawler is missing it too. A prerender or dynamic-rendering middleware is an acceptable 90-day stopgap while you migrate, not the destination.

If the check warned on full-document coverage rather than failing, the pattern is almost always a server-rendered hero above a client-rendered body: the intro reads fine to a crawler and everything below it does not. Grep the raw fetch for a phrase from the middle of the page, not just the first paragraph.