Fix: Rendering Failures

Ensure AI crawlers see fully rendered content by reducing JavaScript dependency.

What this means

A low Rendering Score indicates a high Ghost Ratio. This means the HTML delivered to crawlers contains far less text than what users see after JavaScript executes. AI crawlers like GPTBot typically do not render JavaScript, so they miss your content entirely.

How SEODiff detects this

SEODiff estimates the ghost ratio using framework-aware heuristics:

PatternEstimated Ghost Ratio
Static / WordPress / Hugo0.00 – 0.05
Next.js with SSR markers0.05
React SPA, 200+ words visible0.35
React SPA, <200 words visible0.80
Angular / Vue SPA0.50 – 0.80

The rendering score is then: 100 × (1 − GhostRatio^1.5). A ghost ratio of 0.80 yields a rendering score of only ~28.

Common causes

How to fix

Option 1: Server-Side Rendering (SSR)

Configure your framework to render pages on the server. This ensures the initial HTML contains all content.

# Next.js — use getServerSideProps or make pages Server Components
export async function getServerSideProps() {
  const data = await fetchData();
  return { props: { data } };
}

Option 2: Static Site Generation (SSG)

Pre-render pages at build time. Best for content that doesn't change frequently.

# Next.js
export async function getStaticProps() {
  const data = await fetchData();
  return { props: { data }, revalidate: 3600 };
}

Option 3: Pre-rendering service

Use a service like Prerender.io or Rendertron to serve pre-rendered HTML to bot user agents. This is a quick fix but adds latency and complexity.

Option 4: Inline critical content

Even if you use a SPA, inline the most important text (title, description, key data) in the initial HTML as a <noscript> fallback or inside <script type="application/ld+json">.

How to validate

  1. Run curl -s https://yoursite.com/ | wc -w — compare word count to what you see in the browser.
  2. Re-scan with SEODiff and check the Rendering Score.
  3. Target a Ghost Ratio below 0.10 (Rendering Score 97+).