Problem
I have a React (Create React App) application deployed on Vercel (Hobby plan) at goldenscope.app. After every new deployment, Windows clients (Chrome and Edge on Windows 11) continue to receive an old version of the app while Mac clients receive the correct updated version. This has persisted through multiple deployments and all standard cache-busting attempts.
Environment
- Framework: Create React App
- Plan: Hobby
- Custom domain:
goldenscope.app(registered via Cloudflare, DNS only — no proxy, grey cloud) - Vercel subdomain:
golden-scope.vercel.app - Both domains exhibit the same issue
Current Behavior
Mac clients receive a minified single-line index.html referencing the new bundle main.0175b3b6.js. Windows clients receive an unminified/formatted index.html referencing the old bundle main.795e84e1.js. Both responses return x-vercel-cache: HIT.
The difference in formatting (minified vs unminified) suggests Vercel’s edge network has two separate cache entries for index.html and is routing clients to different versions based on something in the request headers — possibly Accept-Encoding.
Verified via:
- DevTools Network tab → Response body on both machines
- Same IP address (
216.198.79.1) on both machines - Issue persists on both
goldenscope.appandgolden-scope.vercel.app - Issue affects both Chrome and Edge on Windows 11
What I’ve Tried
- Hard refresh (
Ctrl+Shift+R) - Full browser cache clear (All time, all data types)
- Incognito/private browsing window
- DNS flush (
ipconfig /flushdns) - Chrome
net-internalsDNS and socket pool flush vercel --prod --force(multiple times)- Empty Cache and Hard Reload via DevTools
vercel.jsonwithCache-Control: no-store,Surrogate-Control: no-store,Pragma: no-cache,Vary: ""on both/and/index.htmlroutes- Restarting Windows laptop
- Testing via phone hotspot (different network)
- Clicking Refresh on domain in Vercel Domains dashboard
Configuration (vercel.json)
{
"headers": [
{
"source": "/index.html",
"headers": [
{ "key": "Cache-Control", "value": "no-store, no-cache, must-revalidate, max-age=0" },
{ "key": "Surrogate-Control", "value": "no-store" },
{ "key": "Pragma", "value": "no-cache" },
{ "key": "Vary", "value": "" }
]
},
{
"source": "/",
"headers": [
{ "key": "Cache-Control", "value": "no-store, no-cache, must-revalidate, max-age=0" },
{ "key": "Surrogate-Control", "value": "no-store" },
{ "key": "Pragma", "value": "no-cache" },
{ "key": "Vary", "value": "" }
]
},
{
"source": "/static/(.*)",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
]
}
]
}
Key Observation
The old bundle main.795e84e1.js returns a 404 on Mac but loads successfully on Windows, confirming the Windows client is being served a completely different index.html that references a bundle from a previous deployment. The new bundle main.0175b3b6.js returns a 404 on Windows.
Response headers on Windows (x-vercel-cache: HIT, age: 2-27):
Cache-Control headers we set in vercel.json are visible in the response but the edge is still caching and serving stale content.
Any help from the community or Vercel engineers would be greatly appreciated. This has been a persistent issue across many deployments and is preventing Windows users from accessing the latest version of the application.