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. In Next.js, this occurs for pages generated
at build time or on-demand through getStaticPaths with
fallback: true. Pages using fallback: "blocking" do
not 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, observed in practice though not part of
Vercel's documented value set, means caching was skipped
entirely for the request. This happens when the origin
response includes Cache-Control directives like no-cache,
private, or no-store, or when the request does not meet
Vercel's cacheable response criteria.
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.