Quick Answer: The top reasons a Next.js website fails Core Web Vitals are usually poor image optimization, unoptimized JavaScript delivery, and server-side rendering that still ships too much client-side work. In practice, the biggest offenders are slow Largest Contentful Paint (LCP), high Interaction to Next Paint (INP) from heavy hydration, and layout shifts caused by unstable media, fonts, or dynamic components.
Next.js can deliver excellent Core Web Vitals, but failures typically come from implementation decisions rather than the framework itself. The most common root causes are oversized or incorrectly served images, excessive JavaScript bundles that delay hydration and interaction, and unstable page layouts that create cumulative layout shift (CLS) through late-loading fonts, ads, embeds, or unreserved media space. Sites also miss targets when server-rendered pages still depend on client-side data fetching, when third-party scripts block the main thread, or when caching and CDN strategy are not aligned with page rendering patterns. In short, Core Web Vitals failures in Next.js usually reflect poor performance architecture across rendering, asset delivery, and third-party dependency control.