AI Search (GEO)
AI Search (GEO)High

Server-Side Rendering

Checks that main content renders in the initial HTML response, not only after JavaScript executes.

What this check measures

We fetch the page without executing JavaScript and measure how much content is present in the raw HTML. An SPA with `<div id="root"></div>` and nothing else scores zero.

Why it matters

AI crawlers (GPTBot, ClaudeBot, PerplexityBot) do not execute JavaScript. Pure SPAs are invisible to them — no matter how good the content is. Google renders JS but with a delay and reliability penalty. SSR solves both problems.

search

How our audit detects it

Fetch page with JS disabled. Measure text-to-HTML ratio and check for main content elements (H1, first paragraph) in the raw HTML body.

Typical findings

  • error_outlineLovable app: only <div id="root"></div> in body.
  • error_outlineCreate React App: no content without JS.
  • error_outlineBolt Vite SPA: loading skeleton in HTML, real content only post-hydrate.

How to fix

Migrate to a framework with SSR (Next.js, Remix, Astro, SvelteKit) or add a static-site-generation layer (vite-plugin-ssr, vite-plugin-prerender). At minimum, put critical copy statically in index.html.

Copy-paste fix prompt for your stack

Lovable · Cursor · Bolt · v0 · Replit · Windsurf · Claude Code · Base44

View the fix prompt →

Frequently asked questions

Do I need to migrate my whole app to Next.js?expand_more
No — pre-render the public marketing pages with a static generator and keep the logged-in app as SPA.
Does Google render JS?expand_more
Yes but delayed ("second wave") and imperfectly. AI crawlers do not. For GEO, SSR is not optional.

Want this checked on your site?

Pantra runs the full audit (SEO, Security, GEO, Performance, Schema, Technical, Images) in 10 seconds and generates stack-specific fix prompts.

Scan my site

Related checks