
Static vs Dynamic Rendering: When SSG Wins
Static rendering isn't outdated—it's often the better choice. This article breaks down when SSG wins on performance, SEO, cost, and reliability.
Modern web development has turned rendering into a battleground.
On one side, we have dynamic rendering: servers assembling pages on demand, frameworks hydrating aggressively, APIs firing on every request. On the other, static site generation (SSG): build once, deploy everywhere, serve files like it’s 2005—but smarter.
The industry narrative often frames this as an outdated vs modern debate. That framing is wrong.
This article isn’t about ideology. It’s about trade-offs, constraints, and knowing when static generation is objectively the better architectural choice.
Spoiler: it’s more often than people like to admit.
What We Actually Mean by “Static” and “Dynamic”
Before arguing, we need to be precise.
Static Rendering (SSG)
Static rendering means:
- Pages are rendered at build time
- Output is plain HTML (plus CSS/JS assets)
- Requests are served directly from disk or CDN
- No server-side logic runs per request
This includes:
- Traditional SSG (Eleventy, Hugo, Jekyll)
- Hybrid builds with incremental regeneration
- Content-driven sites with precomputed data
Static does not mean:
- No JavaScript
- No interactivity
- No personalization (within limits)
It means the HTML is already done when the request arrives.
Dynamic Rendering (SSR / Runtime Rendering)
Dynamic rendering means:
- Pages are rendered at request time
- A server (or serverless function) executes code
- HTML is assembled per request
- Often coupled with hydration on the client
This includes:
- SSR frameworks
- Edge rendering
- API-driven runtime composition
Dynamic does not automatically mean “bad.”
But it always means more moving parts.
The Core Question Is Not “Which Is Better”
The real question is:
Do you need runtime rendering for this page?
If the honest answer is “no,” dynamic rendering becomes a liability.
Let’s break down why.
Performance: Static Is the Baseline, Not the Optimization
Time to First Byte (TTFB)
Static files served from a CDN routinely achieve:
- Sub-50ms TTFB globally
- No cold starts
- No server queues
- No runtime variance
Dynamic rendering adds:
- Server execution time
- Network hops to APIs
- Cache invalidation complexity
- Cold starts (especially on serverless)
You can optimize dynamic systems heavily and still lose to:
“Read file, send file.”
Physics wins.
Consistency Beats Peak Performance
Dynamic setups are often benchmarked under ideal conditions:
- Warm cache
- No traffic spikes
- Happy paths
Static sites are boring in the best way:
- Same response every time
- Same latency profile
- Same output
No variance is a feature.
Caching: Static Is Cache by Definition
Dynamic systems rely on caching as a compensatory mechanism.
Static systems start cached.
With SSG:
- HTML is immutable
- Assets are fingerprinted
- CDN caching is trivial
- Invalidation is explicit and controlled
With dynamic rendering:
- You must decide what to cache
- You must decide where to cache
- You must decide when to invalidate
- You must debug cache inconsistencies
Caching is one of the hardest problems in computer science.
Static rendering opts out of the problem entirely.
SEO: Predictability Beats Cleverness
Search engines do not reward complexity.
They reward:
- Fast responses
- Complete HTML
- Deterministic structure
- Stable URLs
Static HTML provides:
- Fully rendered content without JS execution
- Reliable metadata
- No hydration race conditions
- No crawler-specific logic
Dynamic rendering can be SEO-safe—but only if done perfectly.
Static rendering is SEO-safe by default.
Reliability: Fewer Failure Modes Win in Production
Every runtime dependency is a potential outage:
- Server down
- Function timeout
- API failure
- Auth misconfiguration
- Rate limits
A static site has exactly one hard dependency:
“Can the file be served?”
This is why static sites degrade gracefully.
Even partial failures are survivable.
Dynamic systems tend to fail catastrophically.
Cost: Static Is Cheaper in All the Boring Ways
Static sites:
- Scale horizontally by default
- Cost almost nothing per request
- Have predictable hosting bills
- Don’t surprise you at scale
Dynamic systems:
- Scale with traffic
- Accumulate hidden costs
- Require monitoring
- Require ops time
If your site does not fundamentally require runtime rendering, you are paying for complexity you don’t need.
Security: Static Reduces the Attack Surface
Static HTML:
- No runtime execution
- No database access
- No auth surface
- No server logic to exploit
Dynamic rendering:
- Increases exposure
- Requires patching
- Requires secrets
- Requires vigilance
Security through simplicity is underrated—and effective.
When SSG Clearly Wins
Static generation is the superior choice when:
1. Content Changes Less Frequently Than It’s Read
Blogs, documentation, marketing sites, product pages, knowledge bases.
If content is read thousands of times and edited once:
- Build-time rendering is the correct architecture.
2. The Page Is Identical for Most Users
If 95% of users see the same HTML:
- Rendering it 95% of the time is wasteful.
Personalization can often be layered client-side without re-rendering the entire document.
3. SEO and Social Sharing Matter
Static HTML guarantees:
- Correct Open Graph images
- Stable metadata
- No runtime surprises
This matters more than most performance micro-optimizations.
4. You Care About Long-Term Maintainability
Static sites:
- Age well
- Survive framework churn
- Are portable across hosts
- Are easy to reason about years later
Dynamic systems tend to rot faster.
The Myth of “Static Can’t Do X”
Most objections to SSG fall apart under scrutiny.
“Static Can’t Be Interactive”
False.
Interactivity is a client-side concern.
Static HTML plus JS handles:
- Forms
- Search
- Filters
- Client-side state
- Progressive enhancement
Rendering HTML at build time does not limit UI behavior.
“Static Can’t Be Personalized”
Mostly false.
You can:
- Personalize after render
- Use edge logic selectively
- Use cookies + JS
- Use islands or partial hydration
Full server rendering is rarely required for personalization.
“Static Doesn’t Scale for Big Sites”
False.
Some of the largest sites on the web serve prebuilt HTML.
The constraint is build strategy—not scale.
Incremental builds, partial regeneration, and content partitioning solve this.
Hybrid Is Fine—But Static Should Be the Default
This is the part most people miss.
You don’t have to choose only static or only dynamic.
But the default should be static, with dynamic rendering introduced deliberately and locally.
Use runtime rendering when:
- Data is user-specific and sensitive
- Content must be real-time
- The page truly cannot be precomputed
Everything else?
Build it once.
Why Quesby Starts Static (On Purpose)
Quesby is opinionated here.
It assumes:
- Static-first architecture
- Build-time SEO correctness
- Deterministic output
- Minimal runtime complexity
Not because dynamic rendering is bad, but because static solves more problems than it creates.
If you need dynamic behavior, you can add it.
If you start dynamic, removing complexity is much harder.
Static Isn’t Old. It’s Honest
Static rendering doesn’t pretend to be everything.
It does one thing extremely well:
Serve content fast, reliably, and predictably.
In an ecosystem obsessed with abstraction and reinvention, static generation is a reminder that simplicity scales.
Not every project needs a spaceship.
Sometimes, a well-built road is faster—and gets you there every time.
If you’re building content-driven sites and care about performance, SEO, and longevity, starting static isn’t a compromise. It’s a strategic advantage.