Hello. Our web app is built on Next.js 16.1 using the latest features (PPR, Server Actions, Cache Components, React Compiler, and others).
Development is going quite well—there are no real difficulties. I try to write clean code without outdated practices and I often cross-check the documentation.
We don’t use Vercel; we self-host our site in a Docker container. And we keep running into a problem I didn’t even know existed—cache mixing. Several times a week we roll out site updates, and after them, users who have visited the site before start getting client-side exceptions when navigating through the site via Link components. Updated pages may show old versions, and a full page refresh is required to fix it. Sometimes the updated HTML is rendered but the new styles aren’t applied.
We aren’t doing any weird header manipulations. We also set a random build id in next.config.ts and a constant server actions encryption key. We also don’t use caching on the edge (Cloudflare in our case)—just the default headers that Next.js generates.
What am I missing? Weeks go by and the problem keeps bothering us, primarily affecting existing users. In incognito mode there are no issues.