Is Vercel Burning Your Budget?
How to Actually Reduce Costs in React & Next.js — Without Falling Into Optimization Fanaticism
Vercel is one of the best platforms for deploying React and Next.js applications.
Fast deployments, great developer experience, edge infrastructure — it's easy to see why so many teams choose it.
But sooner or later, many teams hit the same moment:
the bill starts growing faster than the business.
Let's be clear upfront:
In most cases, the problem is not Vercel.
The problem is architectural decisions that felt reasonable early on — and became expensive at scale.
In this article, we'll cover:
- why Vercel costs often spike unexpectedly
- what actually affects billing (and what doesn't)
- how to reduce Next.js costs without breaking your architecture
- where optimization turns into unhealthy fanaticism
How Vercel Charges You (Simplified)
The main cost drivers are:
- Serverless / Edge function executions
- SSR and ISR rendering
- Middleware invocations
- Build executions
- Bandwidth (especially images)
- Analytics and logging
The most common mistake is focusing on traffic volume, while ignoring rendering strategy.
The #1 Cost Killer: Unnecessary SSR
A very common setup
- Next.js App Router
- In the root layout.tsx, you use:
headers()
cookies()
auth()
draftMode()
Result:
- the entire route tree becomes dynamic
- every request triggers a server execution
- bots and crawlers cost money too
Even for simple marketing pages.
The fix
Strictly separate concerns:
- Marketing & public pages → static or ISR
- App / dashboard → SSR
- Admin / CMS preview → SSR + draftMode
Example:
export const dynamic = 'force-static'
or
export const revalidate = 3600
This single change often cuts costs dramatically.
Middleware: Small Code, Big Bills
Middleware runs on every matched request — including:
- bots
- previews
- static pages
- health checks
Common misuse
Using middleware for:
- redirects
- i18n
- analytics
- A/B testing
- marketing logic
Better approach
- No middleware on public routes
- Redirects via vercel.json
- Locale via routing
- Auth only inside the app
"matcher": ["/app/:path*"]
ISR Can Work Against You
ISR is powerful, but dangerous when misconfigured.
Typical problems:
- very short revalidate times
- many pages
- frequent invalidation
Red flags
revalidate: 60 on SEO pages
- cron jobs triggering revalidation
- CMS saving causes rebuild storms
Recommendations
- SEO pages:
revalidate: 3600–86400
- Blog / cases: ISR + on-demand revalidation
- Rarely changing pages: full static
Image Optimization: Useful, But Not Free
Next/Image is great — but:
- every unique size = a new transformation
- mobile + desktop + retina multiplies usage
Common mistakes
- too many responsive sizes
- dynamic image dimensions
- CMS without constraints
Best practices
- fixed size sets
- aggressive CDN caching
- pre-optimized WebP / AVIF for hero images
Builds: The Quiet Cost Center
Every build costs money.
Typical causes
- preview deployments on every commit
- bots triggering deploys
- CMS hooks rebuilding the site
Basic hygiene
- limit preview deployments
- avoid rebuilds on content drafts
- audit deploy hooks
Analytics and Overengineering
Analytics is rarely the main issue — but:
- server-side tracking
- verbose logs
- debug modes
can quietly inflate bills.
Rule of thumb
- client-side analytics for marketing
- server-side only when justified
- minimal logs in production
When Optimization Becomes Fanaticism
This is critical.
❌ Bad optimization:
- rewriting architecture to save €20/month
- hurting developer experience
- adding complexity without business value
- treating SSR as the enemy
✅ Healthy optimization:
- remove SSR from public pages
- limit middleware
- configure caching properly
- understand what you're paying for
If the product makes money, infrastructure should support growth, not just minimize costs.
Cost Reduction Checklist
- Dynamic APIs in public layouts?
- Middleware on
/?
- SSR where static would work?
- Revalidation frequency
- Build count
- Image optimization usage
- Preview deployments
- CMS draft modes
- Server-side analytics
- Bot traffic
Final Thoughts
Vercel doesn't "burn money".
It charges transparently for architectural choices.
In most cases, you don't need:
- migration
- self-hosting
- Kubernetes
You need:
- clearer rendering boundaries
- less middleware
- smarter caching
Optimization is a tool.
Fanaticism is when it starts hurting the product.