logo
banner
Photo by Nat on Unsplash

CSR vs SSR vs SSG — The Frontend Rendering Smackdown

Ah, rendering strategies. The "You vs the guy she told you not to worry about" of web development. You open the docs and suddenly feel like you've time-traveled to a battle royale between acronyms. CSR, SSR, SSG—what are they? Why do they sound like underground hacker groups? And most importantly, which one should you use?

Let’s clear the fog. Whether you're building your 100th app or just trying to figure out why your React app shows a blank screen for 3 seconds, this one's for you.


Rendering is the process of converting your app's logic (JavaScript, components, data) into plain old HTML that browsers can display.

Different rendering strategies answer this: when and where does this rendering happen?

Let's break it down with our three main contenders.


AKA: “I’ll do it myself.” — Your browser

What it is:

CSR is when your JavaScript app is served to the browser with a nearly empty HTML shell (<div id="root"></div> vibes), and then React/Vue/etc. takes over and renders everything on the client.

How it works:

Pros:

Cons:

Use it when:


AKA: “Let me do that for you.” — Your server

What it is:

SSR means the server renders your page into HTML on every request, then sends that HTML to the browser. JavaScript kicks in afterward for interactivity.

How it works:

Pros:

Cons:

Use it when:


AKA: “I made this for you earlier.” — Your build step

What it is:

SSG pre-renders HTML at build time—not on request. You ship already-cooked HTML to the browser. It’s like meal-prepping for your website.

How it works:

Pros:

Cons:

Use it when:


AKA: “Best of both worlds?”

ISR is like SSG with superpowers. You can statically generate pages at build time and revalidate/update them on the fly using background regeneration.

Perfect if you want that SSG speed with dynamic content updates, without rebuilding the whole site. Next.js nailed this one.


FeatureCSRSSRSSG
Where Rendered?BrowserServer (on request)Build time (static HTML)
Initial Load SpeedSlowMediumFast
SEO Friendly?😢
Real-time Data❌ (unless with ISR)
Hosting CostLowMedium to HighVery Low
Dev ComplexityLowMediumLow

If your app is like a fast food order:

Use CSR for dashboards, authenticated apps, anything behind a login. Use SSR when you need SEO + fresh data (e.g., e-commerce, blog home pages). Use SSG for blogs, portfolios, documentation—basically, content that doesn’t change every hour.

And if you’re using Next.js, sprinkle in ISR like hot sauce.


Choosing the right rendering strategy is all about trade-offs. Don’t blindly follow trends—evaluate based on your content, audience, and performance goals.

And remember: A fast app with no SEO is a ghost town. An SEO-optimized app with slow load times is a bounce party. A perfectly balanced app? That’s web dev nirvana.