Problem: CMS returned the full content tree (navigation, related articles, global callouts) for every page in a single 12 MB response, fetched at request time. TTFB alone exceeded 4 seconds on standard connections.
Solution: ISR with revalidate:300 moved the CMS fetch to the background. Payload split: global content fetched at build time into the layout; per-page content fetched per route (180–400 KB). RSC rendered MDX server-side with zero client JS for content. Webhook at /api/revalidate called revalidatePath on publish for sub-10-second author-to-live latency.
Technology: Next.js 15 · React Server Components · ISR · Vercel Edge · MDX
Optimisation pattern: request-time-cms-fetch-to-isr-with-payload-splitting-and-webhook-revalidation
Outcomes:
LCP: 6.8 s → 1.1 s. INP: 480 ms → 68 ms. CLS: 0.31 → 0.02. Vercel bandwidth cost reduced 89% (edge cache hit rate 97.4%). Author publish-to-live latency: under 8 seconds.