Introduction
This is the third metric in my Vercel dashboard deep-dive series. We've covered Fast Origin Transfer (internal CDN-to-compute bandwidth) and Fast Data Transfer (CDN-to-user bandwidth). Now it's time for Edge Requests — the raw count of every request that hits your Vercel deployment.
My dashboard showed 54,946 requests out of a 1,000,000 monthly limit. Let me break down exactly what that means and what's generating all those requests.
What are Edge Requests?
An Edge Request is counted every time Vercel's CDN receives an HTTP request for any resource on your deployment. This includes:
- Page loads (HTML documents)
- JavaScript bundle files (
_next/static/chunks/*.js) - CSS files
- Images served through your deployment
- Font files
- API route calls (
/api/*) - Favicon and manifest requests
Crucially, both cached and uncached requests are counted. A request served instantly from the CDN edge cache still adds 1 to your Edge Request count. The metric is about volume of traffic, not compute usage.
Why is my request count so much higher than my page views?
This is the first thing that surprises most developers. A single user visiting a single page can trigger 20–50+ Edge Requests in one go. Here's a typical breakdown for one Next.js page load:
- 1 request — the HTML page itself
- 3–8 requests — JavaScript chunks (framework, page, shared bundles)
- 1–2 requests — CSS files
- 2–4 requests — font files (woff2 for each weight)
- 1 request — favicon.ico
- 1–3 requests — images on the page
- 1–5 requests — API calls the page makes on load
So if my 54,946 Edge Requests came from roughly 20 requests per visit, that implies around 2,700 actual page visits in the two-week period — which lines up exactly with the traffic patterns I can see in the chart.
Reading the chart
The chart runs from mid-April to May 14, all bars are blue (Total — no cache/uncache breakdown in this view), and the pattern is telling:
- Zero requests before May 2 — the site was deployed but receiving no meaningful traffic. No visitors = no requests.
- First spike on May 2 — about 500 requests. Someone found the site, likely shared a link.
- 3,000–4,000 requests/day from May 3–5 — consistent early traffic. Roughly 150–200 visitors per day at ~20 requests each.
- Dip on May 6 — down to about 2,000 requests. Weekend effect — my audience is likely developers who browse less on weekends.
- Peak on May 9 at ~9,000 requests — the highest day in the chart. A big traffic event — probably a blog post shared on social media, a Reddit post, or a newsletter mention. This single day generated more requests than the first five days combined.
- Strong May 10 at ~6,500 requests — the spike continued into the next day as the content kept circulating.
- Settling to 3,000–4,500/day from May 11–14 — the viral bump faded but left a higher baseline. This is organic growth — the site's regular audience is larger now than it was before the spike.
The growth story this chart tells is genuinely exciting: from zero to a consistent 150–200 daily visitors in two weeks, with a notable traffic event on May 9.
Cached vs uncached — why it matters for performance
While the dashboard shows total Edge Requests, Vercel internally tracks whether each request was served from cache or required hitting your compute. You can see the cache breakdown in Observability → Edge Network.
A high cache hit rate means:
- Faster responses for users (served from the nearest edge node)
- Lower Fast Origin Transfer usage (fewer compute round-trips)
- Lower serverless function invocations
Next.js static assets (_next/static/*) always have a 100% cache hit rate — they're content-hashed and cached forever. Your HTML pages and API routes depend on how you've configured caching.
What generates the most Edge Requests?
1. Static assets loaded on every page
Every page visit loads your JS bundles, CSS, and fonts. Even if these are cached in the browser after the first visit, new visitors always fetch them fresh. With Next.js, the _next/static assets are cached at the CDN indefinitely, but they still count as Edge Requests.
2. Client-side API calls
If your pages make API calls after load — for user data, dynamic content, search — each one is an Edge Request. A dashboard page that calls 5 different API endpoints on mount generates 5 extra requests per visitor.
3. Bot traffic
Search engine crawlers (Googlebot, Bingbot), social media preview scrapers (Twitter, Slack), and monitoring tools all generate Edge Requests. On a public site, bots can account for 20–40% of total request volume.
4. Next.js image optimisation requests
Every unique combination of image URL + size + format generates a separate Edge Request to the /_next/image endpoint. If you have the same image at 5 different sizes, that's 5 different requests.
How to reduce Edge Request count
1. Consolidate client-side API calls
Instead of 5 separate API calls on page load, combine them into one:
// Bad — 4 separate Edge Requests
const [user, posts, projects, messages] = await Promise.all([
fetch("/api/user"),
fetch("/api/posts"),
fetch("/api/projects"),
fetch("/api/messages"),
]);
// Better — 1 Edge Request, server combines the data
const dashboard = await fetch("/api/dashboard");
// /api/dashboard returns { user, posts, projects, messages }
2. Move data fetching to Server Components
Server Components fetch data on the server during render — no client-side API calls, no extra Edge Requests:
// Server Component — no client API calls needed
export default async function Dashboard() {
// This runs on the server — not an Edge Request from the client
const [user, posts] = await Promise.all([
getUser(),
getPosts(),
]);
return ;
}
3. Reduce JavaScript chunks
Fewer JS files = fewer requests per page load. Use dynamic imports to split code and only load what's needed:
import dynamic from "next/dynamic";
// Only loads when the component actually renders
const AdminPanel = dynamic(() => import("@/components/AdminPanel"));
4. Use browser caching for repeat visitors
Next.js already sets long-lived cache headers on hashed static assets. Make sure you're not disabling this. A returning visitor with cached JS/CSS/fonts generates 1 Edge Request (the HTML) instead of 15+.
How close am I to the limit?
At 54,946 requests in roughly the first half of May, I'm on track for around 110,000 requests/month — which is 11% of the 1,000,000 Hobby limit. Plenty of room.
Even if my traffic doubled every month for three months, I'd still be under the limit. The 1 million request free tier is genuinely generous for personal projects and early-stage products.
On the Pro plan, the limit goes to 10 million requests/month with overages at $2 per additional 1 million. Even a high-traffic site with 500,000 monthly visitors would likely stay under 10 million requests.
Wrapping up the Vercel metrics series
Now you understand all three core Vercel usage metrics and how they relate:
- Edge Requests — how many times your deployment was hit (cached or not). Reflects raw traffic volume.
- Fast Data Transfer — how many bytes your users downloaded. Reflects page weight and traffic volume.
- Fast Origin Transfer — how many bytes moved between CDN and your server. Reflects how often your compute runs.
Monitor all three together and you get a complete picture of your site's health and growth.
Conclusion
54,946 Edge Requests sounds like a lot until you realise it represents roughly 2,700 page visits — a modest but growing audience for a two-week-old project. The chart shows real momentum: zero traffic in April, a viral spike on May 9, and a new higher baseline heading into May 14.
Understanding your Edge Request count isn't just about staying under limits — it's about reading the story of your site's growth, one request at a time.
