X-Vercel-Cache
Every response from Vercel's edge network includes the X-Vercel-Cache unofficial response header, reporting the cache status of the resource at the CDN layer.
Note
The "X-" naming convention for HTTP headers, "X" referring to "experimental", has been deprecated and needs to be transitioned to the formal naming convention for HTTP headers.
Usage
Vercel adds the X-Vercel-Cache header to every response
served through its edge network. The value describes
whether the response came from cache, from the origin, or
from static storage. The header applies to static assets
and responses where a Cache-Control
header enables CDN caching through directives like
s-maxage.
For dynamic routes using Vercel's Runtime Cache, the header
often shows MISS even when data is served from the
runtime layer. Server-side logging or custom response
headers provide more accurate signals for runtime cache
behavior.
Values
HIT
The HIT value means the response was found in Vercel's
edge cache and served directly without contacting the
origin server.
MISS
The MISS value means the response was not found in
Vercel's edge cache. The request was forwarded to the
origin server, and the response is now eligible for caching
on future requests.
STALE
The STALE value means the cached response was no longer
fresh, but Vercel served the stale copy to the client
while fetching an updated version from the origin in the
background. This occurs when a stale-while-revalidate
directive is present in the Cache-Control header, or when
Incremental Static Regeneration (ISR) triggers a
background revalidation.
PRERENDER
The PRERENDER value means the response was served from
static storage, such as a page prerendered at build time.
In Next.js, statically generated pages return PRERENDER.
REVALIDATED
The REVALIDATED value means the cached entry was
explicitly invalidated (via revalidatePath(),
revalidateTag(), or a dashboard purge) and the
response was fetched fresh from the origin in the
foreground before being served to the client.
BYPASS
The BYPASS value means Vercel skipped the cache on
purpose for the request and served fresh content
without consulting the cache at all. Three conditions
trigger it: a Draft Mode request carrying the
__prerender_bypass cookie, a request
matching an experimentalBypassFor Prerender Bypass
rule, or a request from a known crawler. Responses
that fail Vercel's cacheability criteria surface as
MISS instead.
Example
A HIT means Vercel already had a cached copy of the
resource at the edge. The response was served directly
without reaching the origin, resulting in faster delivery.
X-Vercel-Cache: HIT
A MISS means the resource was not in the edge cache.
This is common on the first request to a resource after
deployment, after a cache purge, or when a resource has
never been requested through a given edge region.
X-Vercel-Cache: MISS
A PRERENDER means the page was pre-generated and served
from static storage. This appears on statically generated
pages in Next.js frameworks using ISR or static generation
with dynamic paths.
X-Vercel-Cache: PRERENDER
A STALE means a cached copy existed but was expired. The
stale version was served immediately while Vercel fetched a
fresh copy from the origin in the background, keeping
response times fast for the current visitor.
X-Vercel-Cache: STALE
Note
Vercel preview deployments and outdated production
deployments also receive an
X-Robots-Tag noindex response, which
keeps non-canonical builds out of search results.
See also
- Vercel: Response headers
- Vercel: Cache status
- X-Vercel-Id
- X-Nextjs-Cache
- Caching
- Cache-Control
- HTTP headers