Vercel built its reputation on Next.js apps, so some content-site authors assume it is overkill for a blog. It is not. A static Astro or Next.js content site deploys to Vercel in minutes and gets preview deploys, image optimization, and analytics with no extra wiring. The only question that actually matters is bandwidth cost at your traffic level, and that is just arithmetic. This guide gives you the June 2026 numbers and the math to run it yourself.
TL;DR
- For a commercial content site you need Vercel Pro at $20/seat/month (the free Hobby plan bans commercial use, including ads and affiliate links).
- Pro includes 1 TB of Fast Data Transfer and 10M edge requests per month, plus a $20 usage credit. Beyond 1 TB, bandwidth is $0.15/GB.
- A typical indie blog at 100k monthly page views serves roughly 5-30 GB — nowhere near the cap.
- Reconsider Vercel only if you reliably push multi-TB monthly bandwidth, where Cloudflare Pages (unlimited bandwidth, commercial use allowed on free) is materially cheaper.
- All figures verified as of June 2026 against Vercel’s pricing docs.
When Vercel is the right call
Pick Vercel for a content site if most of these are true:
- You build with Astro, Next.js, or another framework Vercel supports first-class.
- Your monthly bandwidth sits comfortably inside 1 TB (true for the overwhelming majority of indie sites).
- You want per-branch preview deploys, built-in image optimization, and one dashboard for deploys plus analytics.
- You value zero-config Git deploys over hand-tuning a CDN.
Skip Vercel — or at least price out Firebase or another host — if you reliably serve multiple terabytes a month, or your team is already standardized on a different platform.
Hobby vs Pro: the numbers that decide it
The single biggest gotcha is that Vercel Hobby is non-commercial only. Vercel’s fair use guidelines define commercial use as any deployment that exists for someone’s financial gain — which covers display ads, affiliate links, and client work. If your content site earns money, Hobby is off the table and you owe Pro.
Here are the limits that matter for a static content site, as of June 2026:
| Resource | Hobby (free, non-commercial) | Pro ($20/seat/mo) |
|---|---|---|
| Fast Data Transfer included | 100 GB/mo | 1 TB/mo |
| Bandwidth overage | not billed (optimization pauses) | $0.15/GB |
| Edge requests included | 1M/mo | 10M/mo |
| Image transformations | 5K/mo | included via $20 credit, then $0.05-$0.08 per 1K |
| Image cache reads / writes | 300K / 100K per mo | metered after credit |
| Usage credit | none | $20/mo |
| Commercial use | not allowed | allowed |
When Hobby exceeds its image-transformation limit, new images return an HTTP 402 and fall back to alt text, while already-cached images keep serving. On Pro, that usage is metered against your $20 credit first. The hard image limits apply on both tiers: a transformed image caps at 10 MB and source images at 8192 px per side.
Bandwidth math: will you ever pay overage?
Estimate before you worry. Pull the real transfer weight of a representative page, then multiply:
# Compressed weight of one cached article page (HTML only)
curl -sLI --compressed https://yourdomain.com/articles/some-slug/ \
| grep -i content-length
# Total built output, for a rough average page weight
du -sh dist/
The formula:
GB/month ≈ (avg page weight in KB × monthly page views) / 1024 / 1024
Run the realistic scenarios:
| Monthly page views | Avg page ~120 KB | Verdict |
|---|---|---|
| 100k | ~12 GB | Deep inside Hobby’s 100 GB, trivial on Pro |
| 1M | ~115 GB | Comfortably inside Pro’s 1 TB |
| 5M | ~570 GB | Still under 1 TB if images stay lean |
| 10M | ~1.1 TB | ~$15/mo overage on Pro; price Cloudflare here |
Image-heavy pages move the number fast. A 120 KB text page is realistic for a well-built Astro article; add three unoptimized hero photos and you can 5x it. The image pipeline below is what keeps you under the cap.
Setup: deploy a static content site
1. Bootstrap the project
Astro is the better default for content-first sites; choose Next.js if you need to embed a real React app.
npm create astro@latest mysite -- --template blog
cd mysite
npm install @astrojs/sitemap @astrojs/vercel
2. Add a minimal vercel.json
This controls caching, redirects, and clean URLs explicitly so you are not relying on defaults:
{
"cleanUrls": true,
"trailingSlash": true,
"redirects": [
{ "source": "/blog/(.*)", "destination": "/articles/$1", "permanent": true }
],
"headers": [
{
"source": "/_astro/(.*)",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
]
},
{
"source": "/(.*)\\.html",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=300, s-maxage=3600" }
]
}
]
}
The immutable header on hashed /_astro/ assets is what keeps repeat visits off your bandwidth meter entirely.
3. Set the canonical site in astro.config.mjs
import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';
import vercel from '@astrojs/vercel/static';
export default defineConfig({
site: 'https://yourdomain.com',
trailingSlash: 'always',
build: { format: 'directory' },
output: 'static',
adapter: vercel(),
integrations: [sitemap()],
});
4. Connect the repo and deploy
npm install -g vercel
vercel link
vercel --prod
# Production: https://yourdomain.vercel.app
Then in the dashboard: Project → Domains → Add yourdomain.com, and follow the DNS records Vercel shows you (it generates the exact CNAME and A values for your project — do not hard-code an IP from a blog post, since Vercel rotates those).
5. Enable analytics
Turn on Speed Insights and Web Analytics in the dashboard, then add the snippets to your root layout:
---
import SpeedInsights from '@vercel/speed-insights/astro';
import Analytics from '@vercel/analytics/astro';
---
<SpeedInsights />
<Analytics />
Web Analytics is privacy-friendly and cookieless, which keeps you clear of consent-banner friction on a content site.
6. Wire up image optimization
---
import { Image } from 'astro:assets';
import hero from '../assets/hero.jpg';
---
<Image src={hero} alt="hero" widths={[400, 800, 1200]} formats={['avif', 'webp']} />
Vercel serves AVIF/WebP variants from the edge and caches them. Each unique transformation counts against your 5K Hobby allowance or your Pro credit, so define a small fixed set of widths rather than letting every layout request a bespoke size.
7. Verify the canonical domain is clean
Submit the production domain to Search Console, then confirm no *.vercel.app URL leaked into canonicals or the sitemap:
grep -ROIE 'rel="canonical"|og:url' dist | grep -v yourdomain.com | head
# any output = a leak to fix
Launch checklist
vercel.jsonsetsimmutablecaching on/_astro/, plus redirects and clean URLs.astro.config.mjshassite,trailingSlash, and the Vercel static adapter.- Speed Insights and Web Analytics snippets live in the root layout.
- Image pipeline emits AVIF/WebP from a small, fixed set of widths.
- Search Console is verified on the production domain with zero
*.vercel.appleaks.
Common pitfalls
- Running a money-making site on Hobby. Ads and affiliate links count as commercial use; you need Pro.
- Shipping unoptimized images, then being surprised when bandwidth jumps 5x.
- Using Next.js SSR for content that could be static — you pay for compute you do not need.
- Leaving
*.vercel.appin canonical tags or the sitemap, which splits indexing signals. - Treating preview URLs as production. They are noindex by default but leak easily through shared docs; use password protection (Pro) for client review.
- Mismatched
cleanUrls. IfcleanUrls: trueis set but the framework outputsabout/index.html, you get ambiguous 301s. Match the setting to your framework’s file naming.
FAQ
Does a static Astro site need ISR on Vercel? No. A fully static Astro build is served straight from the CDN. ISR (Incremental Static Regeneration) only matters when a page needs fresh data computed at request time, which a content article rarely does.
Does hosting on Vercel hurt SEO versus a “real” host? No. Vercel’s CDN is fast, Core Web Vitals on a static site are typically excellent, and Google does not rank by which CDN serves the bytes. What matters is your canonical domain, page speed, and content.
When does Vercel get expensive for content? When you reliably exceed Pro’s 1 TB/month and the $0.15/GB overage starts compounding. At roughly 10M+ page views with heavy images you should price out Cloudflare Pages, which offers unlimited bandwidth and allows commercial use on its free tier.
Is Vercel’s CDN faster than Cloudflare’s? Comparable for most visitors. Cloudflare has more edge locations (330+ vs Vercel’s 100+), but for a static page that difference is rarely perceptible. The real Vercel differentiator is platform features — preview deploys and image optimization — not raw edge speed.
Can I use preview deploys for client review? Yes. Every branch and commit gets a unique preview URL. For paid client work, enable password protection (a Pro feature) so the drafts stay private and out of the index.
Related
- What is Vercel
- Deploying an Astro site on Vercel
- Firebase vs Vercel
- Vercel Hobby vs Pro: when to upgrade
- Vercel build failed causes
- Vercel Monorepo Content Site Deploy: Turbo + Multiple Apps
- Vercel Edge Functions for Content Sites: When They Help
Tags: #Indie dev #Vercel #Hosting #SEO #Comparison