Vercel Edge Network Explained: How Vercel's CDN Works

The Vercel CDN puts edge points of presence (PoPs) in front of 20 compute regions, as listed in Vercel documentation in 2025. The PoPs terminate TLS and route traffic. The regions hold cached responses, Incremental Static Regeneration (ISR) pages and functions. Static assets stay cached until the next deployment, ISR pages are served from cache and regenerated in the background, and dynamic server-side rendered (SSR) responses are not cached unless they carry an s-maxage directive.

Bandwidth above the plan allowance is billed per GB, starting near $0.15 per GB on Vercel's 2025 list prices, and that line is where most surprise invoices originate. This guide covers the request path, the dated region list, cache behavior per rendering mode, edge versus Node.js functions, bandwidth math at 20 TB and 100 TB, a failure-mode table, and a decision matrix for when a second CDN belongs beside Vercel.

How the Vercel CDN routes a request

Vercel's documentation now files what used to be called the Edge Network under the CDN name. The machinery is unchanged: anycast addressing pulls each client to a nearby PoP, and the PoP terminates TLS. The request then crosses Vercel's private backbone to the nearest compute region, where routing middleware runs, the cache is checked and, on a miss, a function or static storage answers.

That makes three practical tiers: PoP, regional cache, and origin (function or build output). Regional caching absorbs most misses. Vercel also collapses concurrent requests for the same uncached ISR path within a region, so a cold page does not fan out into dozens of identical function invocations.

You can read the path on any response. The x-vercel-id header lists the PoP region code first and, for function-served responses, the region that executed the function. When you see a code like fra1 followed by iad1, a request entered in Frankfurt and was computed in Washington, D.C.

Vercel Edge Network regions (from Vercel docs, 2025)

AreaRegion codes and cities
North Americaiad1 Washington, D.C. (default function region); cle1 Cleveland; sfo1 San Francisco; pdx1 Portland; yul1 Montreal
Europedub1 Dublin; lhr1 London; cdg1 Paris; fra1 Frankfurt; arn1 Stockholm
Asia-Pacificbom1 Mumbai; sin1 Singapore; hkg1 Hong Kong; hnd1 Tokyo; kix1 Osaka; icn1 Seoul; syd1 Sydney
South America, Africa, Middle Eastgru1 São Paulo; cpt1 Cape Town; dxb1 Dubai

Functions run in iad1 unless you pin them elsewhere, so a European database paired with default settings adds a transatlantic round trip to every uncached SSR request.

Vercel adds regions over time, so confirm the current list in its documentation before pinning anything.

Vercel CDN caching for static, ISR and SSR pages

Vercel CDN caching depends on the rendering mode. Build output is cached automatically and scoped to the deployment. ISR pages are cached and refreshed by time or on demand. SSR and API responses are cached only when the response explicitly allows it through Cache-Control, CDN-Cache-Control or Vercel-CDN-Cache-Control. The last of these applies to Vercel's cache alone and is stripped before the browser sees it.

Static assets

Hashed JavaScript, CSS and font files carry immutable caching and survive indefinitely within a deployment. Plain HTML from the build output is cached at the edge as well. A new deployment gets a fresh cache namespace, so every deploy starts cold for HTML, and that matters once you ship many times a day.

ISR and on-demand revalidation

Time-based ISR serves the cached page and regenerates an expired copy in the background, so the first visitor after expiry gets STALE and the next one gets the new page. On-demand revalidation through revalidatePath or revalidateTag purges by path or tag. It suits CMS webhooks and database triggers.

Vercel describes global purge completion in well under a second. Treat that as a vendor claim and measure it. Distant regions under load can lag, so applications that need read-after-write consistency should not rely on the cache for that guarantee.

The pattern that holds up uses a long revalidate interval, 3600 seconds or more, as a safety ceiling, with tags driving freshness. Short intervals generate function invocations and origin transfer you pay for, and they race with event-driven purges.

SSR and API responses

Dynamic routes return private, no-store caching by default and show MISS on every request. To cache them, send a directive such as public, s-maxage=60, stale-while-revalidate=300. Use that only where brief staleness is acceptable and the response does not vary per user.

Watch the cache key. Each distinct query string is a separate entry, so tracking parameters fragment the cache. Strip analytics parameters and cookies before they reach cacheable routes.

Vercel Edge middleware and functions vs serverless functions

Routing middleware runs before the cache lookup, so its latency lands on every matched request, including cache hits. Limit it to edge-local work: geo-routing, header rewrites and deterministic cookie checks. Move authentication lookups and feature-flag fetches into cached functions. Use a matcher that excludes static paths. In Next.js 16 the middleware file was renamed proxy, and the behavior is the same.

Vercel edge runtime vs Node.js functions: which to use?

DimensionEdge runtimeNode.js runtime (Fluid compute)
Execution modelV8 isolates, Web APIs, partial Node API supportFull Node.js, concurrent requests per instance
Code size (2025 docs)1 to 4 MB compressed, by planMuch larger bundles allowed
DurationFirst byte within 25 s, streaming up to 300 sUp to 300 s on Hobby, 800 s on Pro (2025)
Best fitRewrites, redirects, lightweight personalizationDatabase access, SDKs, anything near your data

Vercel's own guidance since 2025 favors the Node.js runtime for most functions, because running next to your database beats running next to the user when every request makes a data call.

Vercel bandwidth pricing: a worked cost model

On Vercel's 2025 list prices, the Pro plan includes 1 TB of Fast Data Transfer. Beyond that, the price starts near $0.15 per GB in the cheapest regions and is higher in regions such as São Paulo or Mumbai. Edge requests above the included quota cost about $2 per million, and Fast Origin Transfer adds a smaller per-GB charge on cache misses. All of these are approximate, so check the current price page.

Here is the arithmetic for a site whose weight is mostly images, video or downloads, at the lowest regional rate, on transfer alone (our estimate, list prices):

  • 20 TB a month: 19,000 GB billable at $0.15 is about $2,850.
  • 100 TB a month: 99,000 GB billable at $0.15 is about $14,850, roughly $150 per TB.

Request fees barely move this number: 100 TB of 5 MB objects is 20 million requests, about $20 above the quota. Enterprise contracts negotiate transfer, so the gap narrows there. The structure stays the same, though: framework-aware hosting priced per GB, applied to bulk bytes.

Failure modes: what breaks on the Vercel edge and how to confirm it

What breaksHow it shows upHow to confirm
Cold cache after deployFunction invocations and p95 latency spike for minutes after each releasex-vercel-cache shows MISS or PRERENDER on hot routes right after a deploy
Cache-key fragmentationHit ratio stalls below target despite long TTLsSame path logs many MISSes with differing query strings or cookies
Silent revalidation failureEditors publish, users keep seeing old contentSTALE persists past the interval; webhook route logs show errors or tag mismatches
Middleware on the hot pathTime to first byte (TTFB) on cache hits well above the static baselineCompare TTFB for an asset inside and outside the matcher
Function far from dataSSR p95 high in one geography onlyx-vercel-id pairs a nearby PoP with a distant function region
Bandwidth runawayInvoice jumps with no traffic-pattern change in HTMLUsage dashboard shows transfer dominated by media or download paths

Most of these failures are visible in two response headers, x-vercel-cache and x-vercel-id, before any paid observability tooling is involved.

For cold-start stampedes after deploys, enable skew protection, roll out gradually and pre-warm critical routes. Keep a time-based ISR fallback so a broken webhook degrades to minutes of staleness instead of days.

When to add another CDN beside Vercel

Workload on VercelRecommendation
HTML, ISR, APIs, under about 1 TB a monthStay on Vercel only; the included allowance covers it
Framework pages plus heavy imagesUse Vercel Image Optimization with AVIF first, then offload originals if transfer still dominates
Video, installers, game builds, archives at 10 TB or moreServe them from a volume-priced CDN on a media subdomain; keep HTML on Vercel
Need for WAF, bot management, WebSocketsKeep Vercel's firewall or a security vendor in front; a delivery-only CDN does not replace it

The split that pays off is by byte type: framework-aware responses stay on Vercel, and bulk static files move to a subdomain priced per TB.

As of October 2026, BlazingCDN prices delivery from $5 per TB down to $2.50 per TB at volume on progressive tiers, with one rate for US, Europe and Asia and no request fees. The 100 TB month from the model above costs $415 on BlazingCDN, against the roughly $14,850 list estimate on Vercel transfer. Current rates are on the BlazingCDN CDN pricing page.

The honest limits: BlazingCDN does not support HTTP/3 or WebSockets, runs no edge functions, and sells no WAF. It belongs beside Vercel for media and downloads, not in place of it.

Verify this on your own stack, and what to check first

  • Request a hot ISR page twice and read x-vercel-cache: anything other than HIT on the second request means a fragmented key or a missing directive.
  • Track hit ratio by route. This blog's threshold is 85% or higher for static and ISR routes.
  • Compare revalidation invocations with actual CMS or database triggers. A large surplus points to an interval that is too short.
  • Split Fast Data Transfer by path prefix to see what share is media.

FAQ: Vercel CDN and edge network

Does the Vercel CDN cache server-side rendered pages?

Not by default. Dynamic SSR responses on the Vercel CDN return private, no-store caching and show MISS on every request. To cache them, send s-maxage through Cache-Control, CDN-Cache-Control or Vercel-CDN-Cache-Control, optionally with stale-while-revalidate. Do this only for responses that do not vary per user, because cookies and query strings change what is safe to share.

Is the Vercel Edge Network the same thing as the Vercel CDN?

Yes. Vercel's documentation now files the former Edge Network under the CDN name, and the infrastructure is the same: PoPs that terminate TLS, a private backbone, and compute regions holding cache and functions. Older posts saying Edge Network describe this system. Check the x-vercel-id header to see which PoP and region served a given request.

Should I use Vercel Edge Functions or Node.js functions?

Use Node.js functions for most work and reserve the Vercel edge runtime for lightweight routing. Since 2025, Vercel's guidance favors Node.js with Fluid compute, because functions that query a database run faster in the database's region than at a PoP near the user. Edge runtime keeps strict code-size limits and partial Node API support.

How fast does Vercel CDN cache invalidation propagate?

Vercel describes on-demand purges through revalidatePath and revalidateTag as completing globally in well under a second. Treat that figure as a vendor claim. Distant regions under heavy load can lag, so measure it from several locations. Applications needing strict read-after-write consistency should bypass the cache for that data instead of relying on purge timing.

How much does Vercel CDN bandwidth cost at 10 TB a month?

Roughly $1,350 in transfer on 2025 list prices, using the cheapest regional rate. The Pro plan includes 1 TB, and the remaining 9,000 GB at about $0.15 per GB produces that figure. Regions such as São Paulo or Mumbai cost more per GB, request fees add a little, and Enterprise contracts negotiate transfer separately.

Price your Vercel media traffic before the next invoice

This week, export one month of Vercel usage and split Fast Data Transfer by path prefix: HTML and API routes on one side, images, video and downloads on the other. Multiply the media share by your actual regional per-GB rate and compare it with a per-TB alternative. Then check x-vercel-cache hit ratios on your top 20 routes. That one export tells you whether your problem is cache configuration or byte economics, and the fix differs for each.

If the media share dominates, the BlazingCDN cost calculator for offloaded media traffic prices the same volume on progressive tiers from $5 per TB, with no request fees.

Heavy traffic.
Light bill.

The CDN for video and large traffic