Ryu Hi Trylotsy, I’d separate this into a few different “old version” cases, because they have different causes. First, ask one affected user to open DevTools → Network and hard reload, then check the main document request for / or the affected route: Status: Cache-Control: x-vercel-cache: x-vercel-id: If the HTML document itself is old, I’d check for something in front of Vercel, like Cloudflare, a corporate proxy, browser cache, or a service worker/PWA. A service worker is a common cause when only some users keep seeing an older frontend after a successful deployment. If the HTML is new but the
Trylotsy Thanks for the response. The challenge is that this is affecting a consumer-facing application with a large mobile user base, so it isn't practical to walk individual users through DevTools checks, cache clearing, service worker inspection, or other device-specific troubleshooting steps. What we're seeing is inconsistent behavior across devices: Some users see the latest version on desktop but not mobile. Some see the latest version on mobile but not desktop. Some see the latest version on both. Some continue to see the old version on both. Because the issue appears random across users and dev
Ryu Hi Trylotsy, I don’t think there is a single Vercel-side purge that guarantees every already-open browser/device moves to the newest frontend bundle. For a normal Next.js deployment, the production alias should point at one deployment, and /_next/static/... assets are content-hashed, so old JS chunks usually only continue loading if old HTML or a client-side cache is still serving the old app shell. For the “random across users/devices” pattern, I’d focus on these deployment-level checks: Check whether you have a service worker/PWA layer, such as next-pwa, Workbox, a custom sw.js, or a previou
Swarnava Sengupta With 106M ISR writes vs 30M ISR reads, your write-to-read ratio is unusually high (about 3.5:1). This typically indicates one or more of these issues: Very short revalidation intervals – If your revalidate value is too low (e.g., 10-30 seconds), pages regenerate frequently even if content hasn't changed Excessive on-demand revalidation calls – If your backend triggers revalidatePath() or revalidateTag() too aggressively on every content update Bot/crawler traffic triggering regenerations – Bots hitting many unique URLs can cause cache misses that trigger new page generations Large number of un
Akash Electron thank you @swarnava
Pauline P. Narvas Spot on! Your assumption is exactly right. :D Since that Hero component with revalidate is shared across your generateStaticParams pages, each one of those 1,350+ pages effectively "inherits" its own ISR schedule. This means that after the 1-week window, a visit to any page will kick off a background regeneration. If your traffic hits all those pages, you're looking at a huge spike in serverless executions which is definitely why you're seeing those limits pop up! A couple ways we can optimize this: Fetch client-side: This is the most straightforward path. If you move the GitHub stars fetch to
Juan D. Martinez I was thinking of going client side or creating a dedicated landing page for this hero section. I'm not a big fan of client fetching on stuff that doesn't change often, but haven't thought of that API apporach you mentioned, guess I'll try that one instead. I appreciate the help @pawlean 🙌🏻
Pauline P. Narvas No worries, Juan! 😃 Come back with updates - excited to hear how you get on 🙂