Skip to content

Server-rendered HTML on the homepage

What the scan checks: it fetches your homepage as GPTBot with a plain request (no JavaScript) and counts the visible words in the raw HTML. Fewer than ~100 words of real content means the page is a client-rendered shell, and the check fails.

This is the site-wide version of the render-time floor. Your homepage is where entity signals live: the brand name, the tagline, the Organization schema, the internal links out to everything else. If a bot fetches it and gets an empty <div id="root">, the engine cannot learn who you are or find the rest of your site. Everything downstream in the audit, entity recognition, content extraction, internal-link discovery, assumes the homepage renders server-side.

Serve the homepage’s content in the initial HTML response:

  • Static-generate the homepage where you can. A marketing homepage rarely needs per-request rendering, so SSG (Astro, Next.js output: 'export' or a static route, Nuxt nuxi generate) gives the fastest, most crawlable result.
  • If it must be dynamic, use SSR so the server returns HTML with the copy already present.
  • Do not gate the hero and intro copy behind a client-side data fetch.

Confirm the fix the same way a bot would:

Terminal window
curl -s https://example.com/ | python3 -c "import sys,re; print(len(re.sub('<[^>]+>',' ',sys.stdin.read()).split()))"

If that word count is low, open the raw output and check whether your headline and intro text are actually in it. When they are, the check passes. For the deeper mechanics and per-page version, see answer content in raw HTML (T2).