Server-side vs client-side rendering for SEO

Why rendering strategy is one of the few technical decisions that can make content invisible, how to check what search engines actually see, and what to do about it.

Published ·3 min read·3 sources cited

The short version

  • Server-rendered content is in the HTML. Client-rendered content requires JavaScript to execute first.
  • Search engines can render JavaScript, but it is a second pass, and relying on it is a risk with no compensating benefit.
  • The check takes ten seconds: view source — actual source, not the inspector — and look for your content.
  • For any page that needs to rank, render it server-side or statically. There is no SEO argument for the alternative.

This is one of very few technical decisions that can take a page from ranking to invisible, which makes it worth more attention than its share of SEO discussion suggests. The failure is also unusually easy to ship, because a client-rendered page looks perfect in a browser.

The short answer

Fit for your workflow

Server-render or statically generate anything that needs to rank.

Search engines do execute JavaScript, and Google documents how. But it happens in a second pass with no guarantee of timing, and other consumers of your pages — including some AI crawlers — may not execute JavaScript at all. Since modern frameworks make server rendering straightforward, the risk buys you nothing.

Marketing and content pages
Static generation. Fastest and most reliable.
Frequently changing content
Server-side rendering.
Logged-in application views
Client-side is fine — these should not be indexed anyway.
Existing client-rendered site
Check what is indexed before assuming there is a problem.

The approaches

Rendering strategies compared
ApproachContent in initial HTML?SEO risk
Static generation (SSG)YesNone
Server-side rendering (SSR)YesNone
Incremental static regenerationYesNone
Client-side rendering (CSR)NoReal
Hydration after server renderYesNone — this is the normal modern pattern
Dynamic rendering (serving bots differently)Yes, to botsWorkaround, adds complexity

The fifth row is worth separating out, because it causes confusion. A React or Vue app that server-renders and then hydrates in the browser is server-rendered for SEO purposes — the content is in the HTML. Using a JavaScript framework is not the problem; shipping an empty HTML shell is.

How to check in ten seconds

  1. View page source — Ctrl+U or right-click, View Page Source. Not the inspector, which shows the rendered DOM and will mislead you.
  2. Search the source for a distinctive sentence from your main content.
  3. Not there? Your content is client-rendered and you are relying on a second pass.
  4. Cross-check with the URL Inspection tool in Search Console, which shows the rendered HTML Google actually used.
  5. Crawl with JavaScript disabled in Screaming Frog to see the whole site the way a non-executing crawler does.

What else reads your HTML

Search engines are the most forgiving consumers of your pages, not the least. Google documents a rendering pipeline that executes JavaScript; many other things that read your site do not. Social preview crawlers, link preview generators in messaging apps, RSS readers, archival crawlers and a number of AI agents fetch the HTML and never run a script.

That widens the cost of client-side rendering well beyond rankings. A client-rendered page can produce an empty preview when someone shares it, contribute nothing to how an assistant describes your category, and be archived as a blank shell. Server rendering fixes all of those at once, which is why Google’s own JavaScript SEO guidance treats it as the safer default rather than merely the faster one.

There is a middle case worth knowing. A page can be server-rendered for its main content and client-rendered for secondary elements — reviews loaded on scroll, a related-products carousel, comments. That is usually fine, because the thing being indexed is present. The test is not whether any JavaScript runs; it is whether the content you want ranked is in the initial HTML.

The inspector is not the source

Developer tools show the DOM after JavaScript has run, which means a client-rendered page looks identical to a server-rendered one there. This single confusion is responsible for a lot of sites shipping invisible content with everyone satisfied it was fine.

Frequently asked questions

Can Google index JavaScript content?

Yes, in a second rendering pass. The risk is timing and reliability rather than capability, and other crawlers including some AI agents may not execute JavaScript at all.

Is React bad for SEO?

No. React that server-renders or statically generates is fine. React that ships an empty HTML shell and builds the page in the browser is the problem, and that is a configuration choice.

How do I check if my content is server-rendered?

View the page source — not the inspector — and search for a sentence from your content. If it is not there, it is client-rendered.

What about dynamic rendering?

Serving pre-rendered HTML to bots works as a compatibility workaround but adds a separate code path to maintain. Server rendering is simpler and better.

Sources

Every figure on this page traces to one of these. Dates are when we last read the page — pricing and features change, so treat anything older than a few months as a starting point rather than gospel. All outbound links here are nofollow.

  1. [1]
    Understand JavaScript SEO Basics

    Google Search Central · developers.google.com · Official documentation · read 2026-09-18

  2. [2]
    Google Search Console

    Google · search.google.com · Vendor page · read 2026-09-18

  3. [3]
    Screaming Frog SEO Spider Pricing

    Screaming Frog · screamingfrog.co.uk · Vendor page · read 2026-09-18

Keep reading

This is one of very few technical decisions that can take a page from ranking to invisible, which makes it worth more attention than its share of SEO discussion suggests. The failure is also unusuall…