How do I fix a page that is blank without JavaScript for AI crawlers?
AI crawlers like GPTBot and ClaudeBot do not execute JavaScript, so a client-side rendered single-page app looks like an empty page to them. Fix it with server-side rendering or prerendering — Next.js, Nuxt, Remix, Astro, or a prerender service — so the raw HTML already contains your headline, copy, and links.
Agents affected
How to tell you have this problem
- Our scanner reports "Raw HTML has almost no visible text" (check empty_raw_html, critical) or "Most content only appears after JavaScript runs" (content_only_in_js, critical).
- View-source on your page shows a nearly empty <div id="root"></div> or <div id="app"></div>.
- The scan shows a large gap between bot-view text length and browser-view text length.
How to fix it
See exactly what AI bots see — the raw HTML with tags stripped. If this prints almost nothing, bots get nothing:
curl -s https://yoursite.com/ | sed -e 's/<[^>]*>//g' | tr -s '[:space:]' ' ' | head -c 400Best fix: move to a framework that server-renders by default. Next.js (App Router), Nuxt, Remix, SvelteKit, and Astro all ship HTML with the content already in it. In Nuxt, for example, make sure SSR has not been switched off:
// nuxt.config.ts export default defineNuxtConfig({ ssr: true, // default — do not set to false for content pages })If you cannot migrate the SPA: prerender at build time (e.g. react-snap, vite-prerender-plugin, or your host’s prerendering) so each route has a static HTML snapshot, or serve bot traffic a rendered snapshot via a service like Prerender.io.
Redeploy, re-run the curl test — your headline and main copy must appear — then re-scan to confirm both rendering checks pass.
FAQ
Google renders JavaScript — do AI crawlers really not?
Correct. Googlebot runs a rendering queue, but GPTBot, ClaudeBot, PerplexityBot, and similar AI crawlers fetch raw HTML and do not execute JavaScript. Content that only exists after JS runs is invisible to them. That is why our scanner compares the raw fetch against a rendered browser view.
Do I need to server-render every page?
Prioritize the pages you want cited: home, product, docs, pricing, and blog pages. An internal dashboard behind a login can stay client-rendered — AI crawlers cannot log in anyway.
Is partial hydration or "islands" architecture enough?
Yes — what matters is the HTML in the initial response. Islands frameworks like Astro send full HTML and hydrate interactive parts, which is ideal: bots read everything, users get interactivity.
Not sure if your site has this issue?
Run a free scan — we test this check (and 60+ others) against your live site and give you the exact paste-ready fix. No signup needed.