skip to content →
criticalSEO RULE · R03

SPA placeholder detected: when a JavaScript site looks empty to Google

A single-page app that renders content client-side can ship an HTML shell with no real text to crawlers. Google can render JavaScript, but inconsistently and with delay. The fix is to render the page content server-side (SSR) or prerender critical routes.

A single-page app that renders content client-side can ship an HTML shell with no real text to crawlers. Google can render JavaScript, but inconsistently and with delay. The fix is to render the page content server-side (SSR) or prerender critical routes. The "SPA placeholder" pattern is an initial HTML response that is essentially <div id="app"></div> plus a script bundle. The real text, headings, and links only appear after the JS runs. Crawlers that don't execute JS — and even Googlebot under load — index the empty shell.

Last updated·part of the 50-rule library

What it is

The "SPA placeholder" pattern is an initial HTML response that is essentially <div id="app"></div> plus a script bundle. The real text, headings, and links only appear after the JS runs. Crawlers that don't execute JS — and even Googlebot under load — index the empty shell.

Why it matters

A page that ships with no visible content cannot rank. AI answer engines (ChatGPT, Perplexity) rarely execute JS at all, so a SPA placeholder means zero AI citations. SSR or prerendering also dramatically improves Largest Contentful Paint, which is a Core Web Vital.

How to fix it

  1. Choose SSR or prerendering. Vue/Nuxt, Next.js, and SvelteKit all ship SSR. Smaller sites can use vite-ssg or similar to prerender static HTML at build time.
  2. Verify with view-source. Open your page, view source (not the rendered DOM), and confirm the headline, intro, and key links are present in the raw HTML.
  3. Test with Google's URL Inspection. In Search Console, fetch the page as Google and view the rendered HTML. Confirm the same content appears.
  4. Cache the SSR output. A CDN cache in front of SSR makes the response near-instant for crawlers and humans alike — and removes the temptation to revert to client-only rendering for performance.

Authoritative sources