SSR vs SSG vs SPA – Feature Comparison - paulip114/blog GitHub Wiki
Feature |
SPA (Single Page App) |
SSG (Static Site Generation) |
SSR (Server-Side Rendering) |
🧠 Rendered where |
In the browser (client-side) |
At build time |
On the server, per request |
🧱 Initial load HTML |
Empty shell → JS renders view |
Full HTML pre-rendered |
Full HTML rendered on request |
🚀 Performance |
Slow initial load |
Fast (served via CDN) |
Slower than SSG but faster than SPA |
🔍 SEO friendliness |
Poor (unless pre-rendered) |
Excellent |
Excellent |
🔄 Data freshness |
Dynamic (API fetch in browser) |
Stale unless rebuilt |
Always fresh (server-side fetch) |
🎯 Personalization |
After load (client logic) |
Difficult (needs JS) |
Easy (customize per request) |
🛠 Hosting |
Static (Netlify, Vercel) |
Static (Netlify, S3, etc.) |
Server or serverless (Node.js required) |
💰 Cost |
Cheapest |
Cheap |
Higher (requires server resources) |
🧪 Example |
Vue + Vite default |
Nuxt generate, vite-plugin-ssg |
Nuxt SSR mode |
📘 Summary
✅ Use SPA when:
- You don’t care about SEO (e.g., admin panels, internal tools)
- The app is fully dynamic and requires user auth for most pages
✅ Use SSG when:
- You have mostly static content (e.g., blogs, landing pages, docs)
- You want fast load times + great SEO, and don’t need real-time data
✅ Use SSR when:
- You need up-to-date, dynamic data on every request
- You want server-based personalization (e.g., based on auth/session)
- SEO is important and content changes often (e.g., e-commerce product pages)
🧪 Bonus: Hybrid Options
Many modern frameworks (Nuxt, Next) allow mixing strategies:
Page |
Strategy |
Homepage |
SSG |
Blog index |
SSG |
Blog detail |
SSG or SSR |
Dashboard |
SSR or SPA |
Auth/login |
SPA |