Blog
Long-form engineering notes on Next.js. No listicles.
Canonicals and Sitemaps That Cannot Drift
Your sitemap lists routes your router no longer serves, and your canonical tags disagree with both. The fix is structural — derive all three from one source.
September 4, 2026 · 4 min read
Correct hreflang in Next.js, Generated Not Maintained
Most multilingual Next.js sites ship a broken hreflang cluster. The failure is always the same — the tags are written by hand. Here is how to generate them from the content that actually exists.
August 21, 2026 · 4 min read
Core Web Vitals in Next.js: What Actually Moves the Numbers
LCP, INP and CLS have specific causes in a Next.js application. This is the ordered list we work through on performance engagements, with the changes that pay and the ones that do not.
July 8, 2026 · 4 min read
Where `use client` Actually Costs You
The client boundary is not a performance setting, it is a bundle boundary. Here is how to find where yours has drifted upward, and what moving it back down is worth.
June 19, 2026 · 4 min read
The Next.js App Router Rendering Model, Explained Properly
Static, dynamic, streamed and revalidated rendering are not four settings — they are one model with a few switches. Understanding which switch you flipped is most of Next.js performance work.
May 14, 2026 · 4 min read
