Across the 100,000+ sites our audit engine has crawled in 2026, content that is present in the rendered DOM but absent from the raw HTML is the eighth most common failure we log — it appears on 31.4% of audited sites (H1 2026). It sits in the same tier as missing alt text and duplicate title tags: not exotic, not confined to experimental stacks, and frequently present on sites whose teams are confident they render on the server.
Five patterns account for most of what we see.
The homepage is fine and nothing else is
Teams pre-render the homepage because it is the page they demo, the page they test, and the page every tool defaults to. Paginated listings, filtered categories, search results and account-adjacent pages fall back to client rendering — and those routes are where the majority of a site's indexable URLs live. Always test a deep page.
Navigation is JavaScript, not anchors
Menus and pagination built from click handlers and router.push() produce no href for Googlebot to follow in pass one. The pages are reachable for humans and invisible to the first crawl. The fix is unglamorous: real <a href> elements, with the JavaScript enhancing them rather than replacing them.
A framework upgrade silently flipped a route
Rendering behaviour is a property of configuration, not of your framework. A major-version upgrade, a component moved from server to client, or a new edge-caching rule can move a route from server-rendered to client-only without any visible change in a browser. Nobody notices, because the page still looks correct to everyone who looks at it.
The content is there, but it took too long
A page that renders correctly after twelve seconds of API calls is a page whose render can time out. Google's renderer, like ours, gives up eventually. Slow rendering is a rendering failure with a delay attached.
The server treats crawlers differently
Some servers refuse requests carrying Googlebot's user agent — usually as bot filtering nobody remembered was enabled. If this test reports that the Googlebot user agent was refused, that is worth immediate investigation: the real Googlebot verifies itself by reverse DNS, but a blanket block on the user-agent string catches it too.