Hi, I’m seeing a reproducible issue with on-demand revalidation of a Next.js sitemap metadata route on a Vercel Preview deployment.
Environment
-
Next.js 16.2.2
-
Node.js 24
-
Vercel Preview deployment
-
Sitemap route:
src/app/sitemap.ts -
export const revalidate = 3600 -
Revalidation endpoint calls:
revalidatePath('/sitemap.xml')
The issue has been reproduced on a fixed immutable Preview deployment, so branch alias switching has been ruled out.
Deployment
Immutable deployment:
fit-mate-1k8tptfg8-koki-chijis-projects.vercel.app
Commit:
6d7f6a284f213557458f35838b32a2d1ff3b4abc
Branch:
fix/sitemap-revalidation-v2
Environment:
Preview
Reproduction
Before revalidation:
-
GET /sitemap.xml -
200 -
X-Vercel-Cache: HIT -
Age: 14786
Second baseline GET:
-
X-Vercel-Cache: HIT -
Age: 14788
Then I sent an authenticated request to:
POST /api/revalidate-sitemap
The endpoint returned:
202{"accepted":true,"path":"/sitemap.xml"}
The route handler calls revalidatePath('/sitemap.xml') before returning 202.
After the POST, repeated GETs to the exact same immutable deployment returned:
Immediate: HIT / Age 14801+2s: HIT / Age 14804+5s: HIT / Age 14808+15s: HIT / Age 14819+30s: HIT / Age 14834
There was no:
-
MISS -
STALE -
REVALIDATED -
Age reset
-
sitemap route regeneration visible from the client
The observable cache Age continued monotonically across the revalidation POST.
Vercel Runtime Logs
I also reproduced the issue while Runtime Logs were still available.
For:
POST /api/revalidate-sitemap
Vercel Runtime Logs showed:
-
Function Invocation for
/api/revalidate-sitemap -
HTTP 202
-
Execution duration around 569 ms
-
External API call:
POST Invalidate Runtime Cache
The target shown by the Vercel UI was:
iad1.suspense-cache.vercel-infra.com/v1/suspense-cache/invalidate
About 12 seconds later, Runtime Logs for:
GET /sitemap.xml
showed:
-
Cache:
HIT -
Cache Key:
/sitemap.xml -
no sitemap Function Invocation
So the sequence appears to be:
revalidatePath('/sitemap.xml')→ internal runtime cache invalidation request is initiated→ /sitemap.xml is still served as Cache HIT→ cache Age continues increasing→ sitemap route is not regenerated
Additional checks already completed
I also verified that:
-
the revalidation route is actually invoked
-
authentication succeeds
-
the correct immutable deployment is used for every request
-
the current Preview
REVALIDATE_SECRETis present on this deployment -
branch alias switching is not involved
-
query parameters / cache-busting are not involved
-
browser caching is not involved
-
revalidatePath('/sitemap.xml')matches the generated sitemap route -
src/app/sitemap.tsis the route producing/sitemap.xml -
the sitemap and revalidation implementation are byte-identical to an earlier branch where Preview testing previously produced:
HIT→ POST 202→ MISS / Age 0→ HIT
Questions
Could someone from Vercel help clarify:
-
Is
revalidatePath('/sitemap.xml')expected to invalidate a cached sitemap metadata route on Preview deployments? -
Does the
POST Invalidate Runtime Cacheevent shown in Runtime Logs mean that the internal invalidation request was successfully accepted, or only that it was initiated? -
Is there a way to confirm whether
/sitemap.xmlwas included in the resolved invalidation target? -
Why would
/sitemap.xmlstill return:
Cache: HITKey: /sitemap.xml
with continuously increasing Age after the invalidation request?
-
Is there any known behavior or limitation involving:
-
Next.js sitemap metadata routes
-
revalidatePath -
Preview deployments
-
Deployment Protection / Protection Bypass
-
ISR / CDN invalidation
-
I have intentionally not deployed this change to Production while investigating.
I can provide screenshots of the Runtime Logs showing both the POST Invalidate Runtime Cache event and the later /sitemap.xml Cache HIT if useful.

POST: 2026-08-25 19:08:11.54 GMT+8

first post-POST GET: 2026-08-25 19:08:23.42 GMT+8
The first screenshot shows the revalidation function invoking Vercel's internal cache invalidation call. The second screenshot shows that about 12 seconds later, /sitemap.xml was still served as Cache HIT with cache key /sitemap.xml.