SPA SEO: bots can still see a shell

Your SPA can look correct to users and still fail crawler fetches if critical HTML is missing at response time.

What crawlers fetch

Crawlers and social bots first evaluate server response HTML. If title, canonical, metadata, and meaningful body content are missing, indexing and sharing quality can degrade even when the browser UI eventually hydrates.

The empty-shell failure mode

A typical failure mode is an almost-empty response:

<div id="root"></div>

Application content appears only after client-side JavaScript executes. Some bots execute less JavaScript than real browsers, and execution timing can vary.

Observable contract over assumptions

RenderShield focuses on an explicit response contract for crawler routes:

Human vs bot check example

# Googlebot-style request
curl -sS -D - -o /tmp/bot.html \
  -A 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' \
  'https://yoursite.com/prerender/spa-seo' \
  | rg -i 'HTTP/|x-rendershield:'

# Browser-style request
curl -sS -D - -o /tmp/human.html \
  -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' \
  'https://yoursite.com/prerender/spa-seo' \
  | rg -i 'HTTP/|x-rendershield:'

Expected header behavior:

Next steps