Rendering fresh HTML on the server, for every single request.
Server-Side Rendering builds a page's HTML on the server at request time, rather than in advance. It's necessary whenever a page genuinely depends on something only known at the moment of the request — the logged-in user, request cookies, live data that can't be pre-computed — and in the App Router, this happens automatically the moment a component reads any of that request-specific data.
The real cost of SSR is that every request triggers a fresh render, meaning there's no pre-built HTML to serve instantly the way SSG has — time-to-first-byte is inherently slower, and server load scales with traffic in a way static pages don't. Streaming, via Suspense boundaries, is how Next.js softens this: instead of waiting for the entire page to finish rendering before sending anything, it sends the parts that are ready first and streams the rest in as they finish.
What you'll walk away knowing