Page Router revalidation not working across all regions

We’re experiencing an issue with res.revalidate() in our Next.js Page Router app where revalidation isn’t propagating to all CDN regions. When we deploy changes and revalidate pages, the cache clears in some regions but not others, causing users in different locations to see stale content - sometimes over an hour old. This means users are seeing different versions of our site depending on their location.

We first noticed this on December 18th and it’s still ongoing.

Current behavior:

  • Revalidation clears cache successfully in some regions

  • Other regions continue serving stale cached content

  • Users in different geographic locations see inconsistent content

  • Only way to fix is to redeploy production

Expected behavior:

  • When res.revalidate() is called, cache should clear across all CDN edge locations

  • All users globally should see the updated content after revalidation

Reproduce:

  1. Deploy changes to Page Router site

  2. Trigger res.revalidate() on specific pages

  3. Verify some regions receive updated content

  4. Check same pages from other regions - content remains stale

Project information:

  • Framework: Next.js 14.2.35

  • Router: Page Router

  • Environment: Production

There are a few layers that could be responsible here

  • skew protection between deploys
  • public browser caching
  • slow revalidation propagation

I will check to see if there’s any active issues with the cache clearing

Do you have any trusted users in the affected regions who can share screenshots of their network tab for requests that show stale data? Mostly it’s the response headers that are relevant so we can compare cache settings and the request ID

1 Like

This is a response header from a user in an affected region showing stale data.

HTTP/2 200 
date: Mon, 22 Dec 2025 11:16:45 GMT
content-type: text/html; charset=utf-8
access-control-allow-origin: *
age: 1186
cache-control: public, max-age=0, must-revalidate
content-disposition: inline
server: cloudflare
strict-transport-security: max-age=63072000
vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch
vary: accept-encoding
x-matched-path: /
x-vercel-cache: HIT
x-vercel-id: arn1::q6r5q-1766402205468-eeb7b1846d8a
cf-cache-status: DYNAMIC
content-encoding: br
cf-ray: 9b1f35781e073232-WAW
alt-svc: h3=":443"; ma=86400
X-Firefox-Spdy: h2

Here is an example from a non affected area:

HTTP/3 200 
date: Mon, 22 Dec 2025 11:18:14 GMT
content-type: text/html; charset=utf-8
age: 960
cache-control: public, max-age=0, must-revalidate
priority: u=0,i
server: cloudflare
strict-transport-security: max-age=63072000
x-matched-path: /
x-powered-by: Next.js
x-vercel-cache: HIT
x-vercel-id: dub1::dub1::rzxn5-1766402294031-5dfcddcf0d8c
cf-cache-status: DYNAMIC
vary: accept-encoding
content-encoding: br
cf-ray: 9b1f37a19f885cc7-KEF
alt-svc: h3=":443"; ma=86400
server-timing: cfExtPri

and I’m seeing similar results on both our custom domain and the vercel deployment specific URL

also we don’t have Skew Protection enabled

Thanks for the extra info, the team has pushed a fix and revalidations should be working properly as of about 30 minutes ago, can you confirm if you’re still having issues?

1 Like

Seems like the issue is resolved, thank you for the quick response.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.