Paul LovellBook a call
Back to Blog
7 min readPaul Lovell

React Server Components vs. Traditional SSR: The Technical SEO Comparison

Traditional SSR solves the blank-page problem but still ships a full JS bundle to hydrate. RSC changes that calculation — here's what actually improves.

Technical SEOJavaScript SEOCore Web Vitals

For years, server-side rendering was the standard fix for React SEO — render HTML on the server before it reaches the client, and you avoid the blank-page problem of a pure single-page app. But traditional SSR has a built-in cost: the browser still downloads the full JavaScript bundle for every component on the page in order to hydrate it, even though the HTML already arrived complete.

React Server Components change that calculation by keeping server-only components' code on the server permanently — it's never shipped to the client at all.

RSC vs SSR, compared

FeatureTraditional SSRReact Server Components
Server outputHTML + full JS bundle for hydrationHTML + minimal client JS + RSC payload
Client JS bundleIncludes code for static content tooZero JS shipped for server components
Hydration costFull-page component hydrationSelective hydration on client components only
Data fetchingWaterfalls or blocking server callsDirect streaming from the server
SEO/crawler impactFast initial HTML; possible INP/CLS cost during hydrationFast initial HTML with minimal main-thread blocking

Where the SEO benefit actually comes from

Code used only to generate static UI — markdown parsing, date formatting, syntax highlighting — runs on the server and stays there under RSC. A smaller client bundle directly helps Interaction to Next Paint by keeping the main thread clearer while the page loads, for both real users and Googlebot's rendering pass.

RSC also streams rather than blocks: the page shell, head elements, and critical content can reach the crawler before slower data calls resolve, instead of waiting for every fetch to complete before sending a single byte.

The mistakes that undo the benefit

Two patterns quietly cancel out RSC's advantage. Putting `'use client'` at the top of a shared layout file forces every component it imports to become a client component too, defeating the bundle-size reduction the whole approach is meant to deliver. And splitting metadata generation into client-side hooks instead of keeping it in server components means titles, canonicals, and Open Graph tags no longer arrive in the first HTML chunk — which is the entire point of doing this in the first place.

Paul Lovell

Written by

Paul Lovell

International SEO Consultant & Founder of Always Evolving SEO. 15+ years running technical audits, log-file analysis, and root-cause fixes for multimillion-dollar businesses — speaker at SMX London, Search & Content Summit, and SEMrush events.