SSR/CSR gap: when the raw HTML holds almost nothing

In brief

An SSR/CSR gap means the raw HTML returned by the server holds less than 10% of the content visible in the browser: Google indexes a heavily stripped version and LLMs, which mostly read the raw HTML, capture almost nothing. You need to render the main content server-side instead of injecting it with JavaScript.

CriticalP1 — Direct ranking

What is it?

The raw HTML contains less than 10% of the content visible in the browser.

Why it hurts SEO and AI

Almost all the content is injected by JavaScript. Google sees a heavily stripped-down version on the first crawl, and LLMs — which read almost exclusively the raw HTML — capture close to nothing. Your content exists for humans but not for the machines that decide your visibility.

When it is NOT a problem

  • The page is an app interface intentionally client-rendered (back office, dashboard) and not meant to be indexed.
  • The measured gap is on secondary content (recommendations, lazy-loaded comments) and the main body is in the raw HTML.
  • You are on the very first crawl of a new page: Seogard does not alert until it has a baseline.
Before
<!-- Raw HTML returned by the server -->
<div id="app"></div>
<script src="/bundle.js"></script>
<!-- 90%+ of the content injected later by JS -->
After
<!-- Raw HTML returned by the server -->
<main>
  <h1>Trail running guide</h1>
  <article>All the editorial content is already here...</article>
</main>

On the left the server returns a shell and the content depends on JS. On the right it is present in the raw HTML that Google and AI systems read first.

How to fix it

  1. View the real source (Ctrl+U, not the inspector) and compare it with what you see on screen: measure what is missing server-side.
  2. Identify the content injected by JavaScript and why it does not come out of server rendering (client-side data, client-only component, SPA fallback).
  3. Move the main content to server-side rendering (SSR) or pre-generation (SSG) so it appears in the HTML response.
  4. Redeploy then re-crawl: the raw HTML should now contain most of the visible content.

This scan checks what is missing from the raw HTML but appears in the JavaScript render

Is this issue on your site?

How much of your content does Google actually see? Enter a URL: Seogard compares the raw HTML your server returns with the browser render and quantifies the gap in 30 seconds. Free, no credit card.

  • No credit card
  • Result in ~30 s

What you get back

The full content becomes indexable on the first crawl and citable by AI systems.

Seogard catches this regression automatically — through its SSR checker.

Frequently asked questions

How do I measure the gap between my raw HTML and the browser render?

Compare the raw source (Ctrl+U, without running JS) to the rendered DOM in the inspector: if the raw is nearly empty, most of the page depends on JavaScript.

Does Google eventually see JavaScript-injected content?

Yes, on its second rendering pass, but with a delay from 24 hours to several weeks. AI answer engines almost never run it.

Related rules

Updated July 10, 2026