Open a web page and it appears almost instantly. It feels like one simple thing happened — but behind that single moment, your browser received an HTML document that somebody, or something, had to produce first. The interesting question is not just where that page lives, but when it was actually made. Was it built ahead of time and waiting on a shelf, or assembled the moment you asked for it?
That timing — when the page is made — is the heart of this whole topic. It shapes how fast a site feels, how well search engines understand it, how much it costs to run, and how complicated it is to build. In this article we’ll walk through the three main ways a page reaches you: pre-rendered static files, server rendering per request, and client-side rendering. No prior experience needed — we’ll define each idea the moment it shows up.
If you’ve read our piece on Static vs Dynamic Websites, this is the natural next layer: that article asked whether a site’s content changes; this one asks when and where the HTML is assembled to deliver that content.
First, what does “rendering” even mean?
In web terms, rendering is the act of turning your data and templates into the final HTML that a browser can display. Think of HTML as the finished printed page, and rendering as the printing process that produces it.
The data might be a blog post in a database, a product price, or a user’s name. The template is the layout — where the title goes, where the paragraphs sit, where the buttons live. Rendering merges the two: it pours the data into the template and out comes a complete page.
The only real question that separates our three approaches is timing: when does that pour happen?
- Before anyone visits, once, during a build step. (Static)
- The moment a visitor requests the page, on the server. (Server-rendered)
- After the page loads, inside the visitor’s own browser. (Client-rendered)
Let’s take them one at a time.
Static delivery: built once, served forever
With static rendering (often called a static site or pre-rendering), every page is generated ahead of time — during a step called the build. The build runs on a developer’s machine or a deployment service, turns all the templates and data into plain HTML files, and saves those files. From that point on, the server’s only job is to hand out files that already exist.
A good mental picture is a bakery that bakes all its bread in the morning. When you walk in, the loaf is already on the shelf — you just grab it and go. Nobody bakes anything while you wait.
BUILD TIME (once): REQUEST TIME (every visit):
data + template visitor --> server hands over
| a ready-made .html file
v |
build step v
| browser displays it
v (no work to do)
index.html (saved)
Because the file is already finished, the server does almost no work per visit. That makes static pages extremely fast and cheap, and easy to copy onto a CDN — a Content Delivery Network, which is a fleet of servers spread around the world that keep copies of your files close to your visitors. A reader in Jakarta and a reader in London each get served from a nearby machine, so the page arrives quickly for both.
This blog is static
The article you’re reading right now is statically rendered. It was turned into an HTML file at build time, which is part of why it loads quickly and is friendly to search engines.
The catch: static pages are the same for everyone until the next build. If a price changes or you publish a new post, you generally rebuild and redeploy to reflect it. That’s perfectly fine for content that doesn’t change every second — blogs, documentation, marketing pages, portfolios. It’s a poor fit for anything that must be personalized or live-updated per visitor.
Server-rendered delivery: built fresh on every request
Server-side rendering (SSR) flips the timing. Instead of baking pages in advance, the server builds the HTML at the moment of the request — every single time someone visits. The visitor asks for a page, the server fetches the latest data, renders it into HTML right then, and sends back the finished result.
Back to the bakery analogy: this is a made-to-order kitchen. You order a sandwich, and they assemble it fresh for you. It takes a little longer than grabbing a pre-baked loaf, but you get exactly what you asked for, made with whatever ingredients are in stock right now.
REQUEST TIME (every visit):
visitor asks for page
|
v
server fetches latest data + renders HTML
|
v
browser displays the fresh page
This is the right tool when content is personalized or constantly changing: a dashboard showing your account balance, a social feed, search results, a shopping cart, a page that must reflect a price that updated five seconds ago. The HTML arrives complete and up-to-date, which search engines and slower devices appreciate, because the meaningful content is right there in the response.
The trade-offs are real, though. The server does genuine work on every request, so it needs more computing power and costs more to run at scale. Each page is also a little slower to produce than simply handing over a finished file, and if the server is busy or far away, visitors feel it. Caching can soften these costs, but the baseline is still “do work per visit.”
Client-rendered delivery: the browser builds the page
The third approach moves the work into the visitor’s browser. With client-side rendering (CSR), the server first sends a nearly empty HTML shell plus a bundle of JavaScript. The browser then runs that JavaScript, fetches the data it needs, and assembles the visible page itself — after the initial load. Sites built this way are often called SPAs, or Single-Page Applications, because the browser swaps content in and out without fully reloading the page as you click around.
Imagine receiving a flat-pack furniture kit instead of an assembled chair. The box (the shell and the JavaScript) arrives quickly, but you — the browser — still have to put it together before you can sit down.
REQUEST TIME: AFTER LOAD (in the browser):
server sends empty shell JS runs --> fetches data
+ JavaScript bundle --> builds the page
| --> page becomes visible
v
browser receives it
(still blank for a moment)
CSR shines for highly interactive apps — think an online editor, a drawing tool, a chat interface — where, once loaded, navigating feels instant and app-like because the browser handles changes without round-trips to the server.
But there are well-known downsides. Until the JavaScript downloads and runs, the user may see a blank screen or a spinner, which hurts the perceived speed on slow connections or older phones. And because the meaningful HTML isn’t present in that first response, search engines historically had a harder time reading the content — a real SEO concern. Modern tooling addresses this by combining CSR with server or static rendering (rendering the first view as real HTML, then “hydrating” it with JavaScript so it becomes interactive). In other words, these approaches aren’t strict rivals; mature sites mix them.
Putting the three side by side
Here’s the same idea, summarized by when the HTML is produced and what that costs you:
| Aspect | Static (pre-rendered) | Server-rendered (SSR) | Client-rendered (CSR / SPA) |
|---|---|---|---|
| When HTML is made | Once, at build time | Per request, on the server | After load, in the browser |
| First-load speed | Fastest | Fast, but server does work | Slower (wait for JS) |
| Freshness / personalization | Same until next build | Always fresh, per visitor | Fresh, fetched after load |
| SEO out of the box | Excellent | Excellent | Needs extra care |
| Server cost & complexity | Lowest | Higher (work per request) | Low server, heavier browser |
| Best for | Blogs, docs, marketing | Dashboards, feeds, carts | Editors, chat, rich apps |
It's a spectrum, not three boxes
Real projects rarely pick just one. A single site might serve its blog statically, render the logged-in dashboard on the server, and run a rich settings panel as a client-side app. The skill is matching each page to the approach that fits that page’s needs.
How do you choose?
You don’t need to memorize rules. Ask a few plain questions about the page in front of you:
Does this page look the same for everyone? If yes, lean static. A marketing homepage or a documentation article doesn’t need to be rebuilt for each visitor, so build it once and serve it from a CDN.
Does it change constantly or depend on who is viewing? That points to server rendering. An order history, a personalized feed, or a live price needs the latest data assembled at request time.
Is it a heavily interactive tool where, after loading, the user stays and clicks around a lot? Client rendering earns its keep there — the up-front cost pays off in snappy in-app navigation.
And remember the most common real-world answer: mix them. Serve fast static pages where you can, render dynamic pages on the server where you must, and reach for client-side interactivity only where the experience genuinely calls for it.
Don't default to the heaviest option
It’s tempting to reach for a full client-side app for everything because it feels modern. But every kilobyte of JavaScript is work the visitor’s device has to do. For content that’s mostly read — like an article — static delivery is usually faster, cheaper, and kinder to your readers. Match the tool to the job.
Recap
Every web page reaches you as HTML, and the big question is when that HTML gets produced:
- Static pages are made once at build time and served as ready files — fastest, cheapest, CDN-friendly, great for SEO, but the same for everyone until you rebuild.
- Server-rendered pages are assembled fresh on every request — perfect for personalized or fast-changing content, at the cost of more server work.
- Client-rendered pages are built in the browser after an initial download — wonderful for rich, interactive apps, but slower to first appear and trickier for SEO unless paired with server or static rendering.
There’s no single winner. The best sites pick the right timing for each page, and often blend all three. If you found this useful, the companion article on Static vs Dynamic Websites approaches the same world from the angle of what changes rather than when it’s built — together they give you a solid feel for how the modern web is delivered.