A fast site isn't a nice-to-have — it's a conversion lever. Every 100ms of added load time measurably reduces conversion rate. Here's the checklist we run on every Next.js project before launch.
1. Image optimization
Use next/image everywhere, serve modern formats (AVIF/WebP), and set explicit width/height to avoid layout shift. For hero images, use priority loading; for everything below the fold, let lazy-loading do its job.
2. Rendering strategy
Default to static generation wherever content doesn't change per-request. Use ISR for content that updates periodically, and reserve server rendering for genuinely dynamic, personalized pages. Client-side data fetching should be the exception, not the default.
3. JavaScript budget
Audit your bundle with next build and treat third-party scripts as a cost you have to justify. Defer anything non-critical (chat widgets, analytics) with next/script strategy="lazyOnload".
4. Fonts and CLS
Self-host fonts with next/font to eliminate render-blocking font requests and layout shift from font-swap. Reserve space for dynamic content (ads, embeds) so nothing jumps after load.
Measuring what matters
Lighthouse is a good proxy, but Core Web Vitals from real users (via analytics) is the ground truth. Optimize for the metrics your actual visitors experience, not just a clean lab score.