Skip to main content
SlapMyWeb
Technical SEO

SPA SEO

Making a single-page application indexable, since its content is assembled in the browser.

SPA SEO is making a single-page application indexable. The problem is that content is assembled in the browser: Googlebot renders JavaScript but on a delay and with a budget, and most AI crawlers do not run it at all. The fix is server-side rendering or static generation, so the HTML arrives complete.

Definition

A single-page application ships a near-empty HTML shell and builds the page client-side. Google's two-pass indexing will usually render it eventually, but rendering is deferred and not guaranteed to complete.

Beyond content, SPAs commonly break routing-adjacent basics: URLs that do not change on navigation, metadata that updates only after hydration, and links implemented as click handlers rather than anchors, which a crawler cannot follow.

Why It Matters

This is the single most common reason a well-built modern site has almost nothing indexed. It is also the reason AI answer engines cite competitors instead — they never see the content.

Example

Viewing source and finding <div id="root"></div> with no content is what a non-rendering crawler sees. Server-side rendering puts the real HTML there.

Googlebot renders, but that is not the whole story

Googlebot does execute JavaScript, which is why "SPAs can't rank" is out of date. What it does is defer: pages are crawled first, queued for rendering, and rendered when capacity allows. The delay varies and the queue has a budget.

For a large site or a frequently changing one, that delay is the problem — content can be days old before it is indexed, and pages can be dropped from the render queue entirely.

The larger issue is everything that is not Googlebot. GPTBot, ClaudeBot and PerplexityBot do not execute JavaScript at all. A site whose content only exists after hydration is not merely slow to index; it is absent from every AI answer engine, which for many sites is now the faster-growing channel.

How SlapMyWeb checks this

The audit fetches each page twice: once without executing JavaScript, as most AI crawlers do, and once in a headless browser. A large gap between the two word counts is the signature of a single-page application, and it is reported directly — a page with 40 words unrendered and 1,200 rendered is telling you what a non-executing crawler sees.

Know the term.
Check your own site.

A free audit tells you whether this is currently costing you score points — and exactly what to change.

Run a free audit
Free foreverNo signupResults in 30s