r/nextjs•
shubhradev

4 Next.js 16 gotchas that cost me real debugging time (not the obvious ones)

Discussion

Not the obvious stuff. The things that cost me actual time.

revalidateTag now requires a second argument. revalidateTag('products') is a TypeScript error in 16. It compiles in loose setups and silently falls back to legacy behaviour. You won't notice until pages stop updating after mutations.

updateTag only works in Server Actions. Calling it in a Route Handler throws at runtime. Compiles fine. Deploys fine. Breaks on the first real webhook.

cacheLife('seconds') removes your component from the PPR static shell entirely. Nothing in the terminal tells you. Your page quietly becomes fully dynamic at request time.

middleware.ts is now proxy.ts. The codemod handles the rename but if you have custom header logic and headers stop applying after the upgrade, this is why.

What did I miss? Drop yours below.

Posted May 12, 2026, 8:21 AM UTC

156
Loading comments…