Why Static Export Beats SSR for a Personal Blog
Every Next.js tutorial reaches for server-side rendering by default. For a blog that is almost always the wrong call.
What SSR actually buys you
SSR earns its cost when the page differs per request — a logged-in dashboard, a search result, a price that moves. A blog post is the same bytes for everyone. Rendering it on demand means paying for compute to produce an identical answer over and over.
The static export path
// next.config.js module.exports = { output: 'export', images: { unoptimized: true }, }
That single flag turns next build into a folder of HTML. No Node process in production, no cold starts, no server bill. A CDN serves it from an edge node near the reader.
The trade you are making
Content changes require a rebuild. That is a real constraint, not a footnote:
- Publishing is a deploy, not a database write.
- Anything genuinely dynamic needs a client-side fallback.
- Build time grows with page count.
For a site that publishes weekly, a two-minute rebuild is nothing. For a news desk shipping every four minutes, it is fatal. Know which one you are.
The escape hatch
Keep a client-rendered preview route so freshly published content is reachable before the next build lands. Readers coming from a share link get the post immediately; the prerendered version replaces it on the following deploy.