Static vs Dynamic CMS in 2026: Which Rendering Model Fits Your Site?
The SSG-to-SSR spectrum and when each one wins
You're spec'ing out a new site. Marketing page, a docs section, a blog, maybe a search box and a comment thread. Then the fork in the road shows up: should the CMS build HTML once at deploy and hand it to a CDN, or should a server render each page fresh from a database on every request? Pick wrong and you either ship a blog that takes 40 minutes to rebuild, or a marketing page that can't survive a traffic spike without a bigger server bill.
This is the static vs dynamic CMS question, and in 2026 it's less about "which is better" and more about "which model fits this specific page." Here's how to decide.
TL;DR: which rendering model should you pick?
Static CMS (SSG) builds every page into flat HTML at deploy time, then serves it from a CDN. It's fast, cheap, and hard to knock over — but every content change needs a rebuild, and anything per-user (auth, live search, comments) has to be bolted on with client-side JavaScript or extra services.
Dynamic CMS renders each page from a database when the request arrives. Content is always fresh, personalization and search and comments are built in, but you carry a server, a database, and a caching layer to keep it fast under load.
The honest answer: most real sites are hybrid. Marketing pages and docs go static. Dashboards, search, and user accounts stay dynamic. And a growing pattern uses a dynamic CMS as a headless content backend that pushes to a static frontend on publish. UnfoldCMS sits in that middle: it's dynamic by default, but its REST API and webhooks let it feed a static build too. More on that below.
What actually counts as a static CMS?
A static CMS produces a full set of HTML files at build time. There's no server rendering logic at runtime — a visitor just downloads a pre-made file from the nearest CDN edge.
The build step runs a static site generator (SSG) — Astro, Next.js static export, Hugo, Eleventy — which reads your content (markdown files, or JSON pulled from an API), applies templates, and writes out .html for every page. Deploy those files to Netlify, Cloudflare Pages, or S3, and you're done. Nothing renders per request. If you want a deeper split on this, the headless CMS vs static site generator breakdown covers where the content lives versus where the HTML gets built.
The tradeoff shows up the moment content changes. Fix a typo, publish a post — you rebuild. On a 50-page site that's seconds. On a 20,000-page site that's a real wait, unless your SSG does incremental builds.
What makes a CMS dynamic instead?
A dynamic CMS keeps content in a database and renders the page when the request comes in. Nothing is pre-built. The server reads the DB, runs templates, returns HTML — every time.
That's how classic database-backed systems work: WordPress, Drupal, and Laravel-based CMSes like UnfoldCMS. The advantage is freshness and interactivity. A new post is live the instant you save it. Logged-in users see their own data. Search hits the database directly. Comments write straight back. No rebuild, no cache-bust dance. The flat-file CMS vs database CMS comparison digs into why a database backing store changes what the CMS can do at runtime.
The cost is that every request does work. You need a server that's always up, a database that scales with traffic, and usually a cache (Redis, full-page cache, a CDN in front) so you're not regenerating identical pages for anonymous visitors on every hit.
Isn't it just static OR dynamic? Where do SSR and ISR fit?
No — rendering is a spectrum, not two boxes. Modern frameworks give you at least four modes, and most sites mix them per route.
Here's the spectrum, from "built once" to "built every time":
- SSG (Static Site Generation) — HTML built at deploy, served from CDN. Fastest, cheapest, stalest between builds. Good for marketing, docs, blogs.
- ISR (Incremental Static Regeneration) — static pages that quietly rebuild in the background after a set interval or an on-demand trigger. You get CDN speed but content refreshes without a full redeploy. This is the sweet spot for large content sites.
- SSR (Server-Side Rendering) — HTML rendered on the server per request, like a classic dynamic CMS but often with a JS framework. Fresh every time, personalizable, but the server does work on each hit.
- CSR (Client-Side Rendering) — the server sends a near-empty shell and JavaScript builds the page in the browser. Good for app-like dashboards, bad for SEO on content pages.
ISR is the piece that blurred the old static/dynamic line. It lets a mostly-static site update specific pages fast, which is exactly what a headless CMS plus webhooks enables — the CMS fires a webhook on publish, and the frontend rebuilds just the changed pages.
Static vs dynamic: how do the tradeoffs compare?
Static wins on raw speed, cost, and resilience. Dynamic wins on freshness, interactivity, and anything user-specific. Neither is "better" — they optimize for different things. Here's the side-by-side.
| Factor | Static (SSG) | Dynamic (DB-rendered) |
|---|---|---|
| Page speed (TTFB) | Excellent — CDN edge, no server work | Good with caching, slower cold (DB + render per request) |
| Hosting cost | Very low — static files, often free tier | Higher — always-on server + DB + cache |
| Content freshness | Delayed — needs a rebuild (or ISR) | Instant — live on save |
| Scale under spikes | Trivial — CDN absorbs it | Needs cache tuning + can fall over |
| Search | Client-side or third-party (Algolia, Pagefind) | Native DB queries |
| Auth / personalization | Client-side only, extra services | Built in |
| Comments / forms | External service or serverless functions | Native |
| Security surface | Tiny — no runtime, no DB exposed | Larger — server, DB, admin all live |
| Build time at scale | Grows with page count (mitigated by ISR) | Constant — no build step |
| Ops complexity | Low runtime, build pipeline to maintain | Server + DB + cache to run and patch |
Read this as a per-page decision, not a whole-site one. Your /pricing page and your /app/dashboard don't need the same model.
When does static clearly win?
Static wins when content is mostly read-only, the same for every visitor, and doesn't change minute to minute. Marketing sites, documentation, blogs, changelogs, and landing pages are the classic fits — publish-then-serve, low interactivity, high traffic tolerance.
Pick static when:
- Pages look identical for all visitors (no per-user content on the page).
- Content updates are scheduled or occasional, not real-time.
- You care about sub-100ms loads and want to survive traffic spikes cheaply.
- Your security budget is thin — no runtime server means far less to attack.
- SEO matters and you want fully-rendered HTML in every response.
Docs are the poster child. They're read constantly, edited rarely, identical for everyone, and speed helps both users and search ranking. A headless CMS for a Jamstack frontend setup fits this exactly.
When does dynamic clearly win?
Dynamic wins the moment a page depends on who's looking or what just changed. Logged-in dashboards, account pages, live search, user-generated comments, e-commerce carts, anything with real-time data — these need server rendering from a live datastore.
Pick dynamic when:
- Pages differ per user (auth state, saved items, roles, personalization).
- Content changes constantly and a rebuild-per-change is impractical.
- You need native search across a large, frequently-updated dataset.
- Comments, forms, likes, or other writes happen right on the page.
- Non-technical editors publish often and expect changes live instantly, with no build pipeline to understand.
That last point matters more than devs admit. A marketing team that publishes ten times a day does not want to wait on a build queue, and they definitely don't want to learn what "trigger a rebuild" means. Dynamic just works for them.
Can you get both? The headless + webhooks hybrid
Yes — and it's the pattern most serious teams land on. Run a dynamic CMS as the content backend, expose the content over an API, and let a static frontend pull from it at build time. On publish, the CMS fires a webhook that triggers a rebuild of just the changed pages via ISR.
You get editor-friendly, database-backed authoring on the back end, and CDN-fast static delivery on the front end. The webhook is the glue: no polling, no manual redeploys, no stale pages sitting around. When an editor hits publish, the frontend hears about it in seconds and regenerates. The CMS webhooks that trigger frontend rebuilds piece walks through wiring that loop, and what a headless CMS is covers the decoupled model if it's new to you.
The catch: you're now running two systems and a build pipeline. For a small blog that's overkill — just go static or just go dynamic. The hybrid earns its complexity on large content sites where editors publish often and you need CDN performance.
How to decide: 5 steps
Work through these in order. The first "yes" that forces dynamic usually settles it.
- List your page types. Marketing, docs, blog, dashboard, account, search results — write them down separately. You're deciding per type, not per site.
- Flag anything per-user. Any page that changes based on login, role, or saved state → dynamic (or dynamic islands on a static page).
- Check update frequency. Content that changes many times a day, or needs to be live on save → dynamic, or headless + ISR. Rare/scheduled updates → static is fine.
- Weigh traffic vs budget. High-traffic, read-heavy, identical-for-all pages → static saves real money and survives spikes. Low traffic → dynamic's cost barely registers, keep it simple.
- Decide if hybrid is worth it. If you have both static-friendly and dynamic-required page types at scale, run a dynamic CMS headless and push to a static frontend with webhook-triggered rebuilds. Otherwise, pick the single model that covers most of your pages.
Where UnfoldCMS fits
UnfoldCMS is a dynamic, database-backed CMS — Laravel with MySQL or SQLite — that server-renders pages through Inertia and Blade. Out of the box it's the dynamic model: content lives in a database, editors publish and it's live instantly, and search, auth, and other runtime features work without a build step.
But it's not locked to that. UnfoldCMS also exposes a REST /api/v1/* JSON API and sends outgoing HMAC-signed webhooks. So you can run it headless: point an Astro or Next.js static export at the API as its content source, and subscribe a webhook to the publish event to trigger a rebuild of just the changed pages. That's the hybrid pattern — dynamic authoring, static delivery — using tools already in the box.
To be clear about what it is and isn't: UnfoldCMS is not a static site generator itself. It doesn't build your HTML — your SSG does that, pulling content over the API. What UnfoldCMS gives you is the content backend and the webhook signal that keeps a static frontend fresh. If you'd rather skip the extra build pipeline, run it dynamically and you get fast, cached, database-rendered pages with nothing else to wire up. See the features overview for the API and webhook details.
The point: you don't have to pick your architecture the day you pick your CMS. Start dynamic, go headless later if a static frontend earns its keep.
FAQ
Is a static CMS faster than a dynamic one? For raw page delivery, yes — static HTML from a CDN edge beats server rendering on time-to-first-byte, and it doesn't slow down under load. But a well-cached dynamic CMS with a CDN in front closes most of the gap for anonymous visitors. The real difference shows up on freshness and per-user pages, not just speed.
Can I switch from dynamic to static later? Often, yes — if your CMS exposes an API. You keep authoring in the dynamic CMS and add a static frontend that pulls content over that API. A dynamic CMS with a REST API and webhooks (like UnfoldCMS) is built to support that move without re-platforming your content.
Do I need a headless CMS to go static? Not strictly — file-based SSGs like Hugo read markdown from disk. But if non-technical editors publish content, a headless CMS gives them a real admin UI while the SSG stays static. That's the usual reason to add one.
What about SEO — static or dynamic? Both can rank. What matters is that search engines get fully-rendered HTML fast. Static ships that by default. Dynamic (SSR) ships it too, as long as you're server-rendering, not client-rendering. Pure client-side rendering (CSR) is the one that hurts SEO on content pages.
Is ISR the same as dynamic? No. ISR serves static, pre-built pages from a CDN but regenerates specific pages in the background on a schedule or on-demand trigger. It's static delivery with a freshness mechanism — closer to static than dynamic, but it removes static's biggest weakness.
Ready to pick a model?
If most of your pages are marketing, docs, or blog content that's the same for everyone, lean static. If you've got dashboards, search, auth, or comments, you need dynamic — or a hybrid where a dynamic backend feeds a static frontend. UnfoldCMS runs dynamic by default and goes headless when you want a static frontend, so you can start simple and grow into the hybrid without switching tools. Browse the features to see the API and webhook pieces that make the headless path work.
Sources: rendering-mode definitions and tradeoffs (SSG, SSR, ISR, CSR) reflect current framework documentation from Next.js and Astro, plus common production patterns for headless CMS + CDN delivery as of 2026. Performance and cost claims are directional guidance for architecture decisions, not benchmark figures — measure against your own traffic and content volume.
Free & Open Source
Own your CMS. No subscriptions.
Unfold CMS is free to download and self-host. Built on Laravel + React, full source code included.
Share this post: