Why App Router still surprises teams
Shipping a marketing site or SaaS dashboard on the App Router is straightforward until caching, streaming, and client boundaries collide. Most of the bugs we see are not framework bugs — they are missing contracts between server components, client islands, and the CDN.
Before a launch we run a short checklist: generateMetadata on every route, a single canonical per locale, no Date.now() in SSR markup, and a documented revalidate strategy for every fetch.
What we actually test
- Hydration: no locale-sensitive dates or extension-mutated inputs without suppressHydrationWarning.
- SEO: hreflang, JSON-LD, and sitemap coverage for every indexable URL.
- Perf: LCP image, font-display swap, and no layout shift from late header height.
Takeaway
Treat the App Router like a production runtime, not a file convention. The teams that document cache tags and metadata once ship faster every quarter after that.
