SSR — Server-Side Rendering
HTML rendered on the server per request
The server generates HTML on every request. Great for dynamic data that must be fresh at request time (e.g. dashboards, personalized pages).
- Pros: Fresh data, good SEO by default, predictable TTFB.
- Cons: Higher server cost, slower under load if not optimized.
- Use when: Data changes per request or per-user and must be current.
SSG — Static Site Generation
HTML generated at build time
Pages are pre-rendered during the build and served as static assets. Ideal for content that changes infrequently (docs, marketing pages, blogs).
- Pros: Fast delivery via CDN, low runtime cost, excellent performance.
- Cons: Content may become stale; rebuilds required for updates.
- Use when: Content can be cached and updated on a schedule or via rebuilds.
CSR — Client-Side Rendering
HTML shell with data fetched in the browser
The server sends a minimal HTML shell; JavaScript hydrates and fetches data in the client. Suitable for highly interactive apps where SEO is not critical for the initial view.
- Pros: Great interactivity, fewer server constraints, flexible UX flows.
- Cons: Weaker initial SEO and slower first render if not optimized.
- Use when: Auth-gated apps, dashboards, or internal tools where crawlability is secondary.