Definition
Ghost Ratio (0.0–1.0) measures the proportion of visible content that is "ghosted" — present for browser users but invisible to AI crawlers that don't execute JavaScript. A ghost ratio of 0.80 means 80% of the content is only available via client-side rendering.
How SEODiff estimates it
SEODiff uses a framework-aware heuristic to estimate Ghost Ratio without running a headless browser:
- Server-rendered frameworks (WordPress, Hugo, Jekyll, MediaWiki) → ghost ratio = 0.0
- SSR frameworks (Next.js, Nuxt, Remix) with >500 words of text → 0.05; with less text → 0.15
- SPA frameworks (React, Angular, Vue) — depends on text density:
- <200 words of text → 0.80 (likely full CSR)
- <1000 words → 0.50 (partial SSR)
- >1000 words → 0.30 (likely SSR with some client components)
- Unknown stack — estimated from script-to-text ratio and text density
Rendering classification
Ghost Ratio maps to rendering type:
- SSR (ghost ratio < 0.10): Server-side rendered — AI crawlers see all content.
- Hybrid (0.10 – 0.40): Some content is server-rendered, some requires JavaScript.
- CSR (ghost ratio ≥ 0.40): Client-side rendered — most content is invisible to AI crawlers.
Impact on scoring
Ghost Ratio directly feeds the Rendering Score via a non-linear curve:
RenderingScore = round(100 × (1 − GhostRatio^1.5))
The exponent (1.5) means the penalty accelerates as ghost ratio increases. A ghost ratio of 0.30 yields a Rendering Score of 84, while 0.80 yields only 28.
Common causes of high ghost ratio
- React/Angular/Vue SPAs without server-side rendering
- Next.js apps using
use client for most components
- Hydration errors that leave the server response empty
- Dynamic content loaded after page load via API calls
- Single-page applications with hash-based routing