Core Web Vitals in 2026: A Practical Guide for Next.js Sites
Understand LCP, INP, and CLS, measure them with real-user data, and fix the Next.js patterns that most often hurt performance.
Performance is easy to measure and hard to improve if you do not know which metric you are optimizing.
A site can load quickly in a lab and still feel slow to a real user on a mid-range phone. That is why Google's Core Web Vitals are based on field data, not a single test run.
This guide explains the three metrics, how to measure them, and the Next.js patterns that most often cause problems.

The three metrics
Largest Contentful Paint (LCP)
LCP measures how long it takes for the largest visible content element to render. That is usually a hero image, a heading, or a video poster.
Good: 2.5 seconds or less at the 75th percentile.
LCP is about perceived loading speed. If the main content appears late, the page feels slow even if the rest is interactive.
Interaction to Next Paint (INP)
INP measures responsiveness: the delay between a user interaction and the next visual update.
Good: 200 milliseconds or less at the 75th percentile.
INP replaced First Input Delay because it captures the whole interaction, not just the first one. A page can load fast and still feel sluggish if the main thread is busy.
Cumulative Layout Shift (CLS)
CLS measures unexpected movement of visible content.
Good: 0.1 or less at the 75th percentile.
A button that jumps as an ad loads, a font that swaps and reflows the page, or an image without dimensions all contribute.
Field data versus lab data
Lab tools such as Lighthouse give you a controlled measurement. They are useful for debugging and for catching regressions before deploy.
Field data comes from real users. It is what search engines and visitors actually experience.
Use both:
- Lab data to test a change quickly.
- Field data to decide whether the change mattered.
In production, the Chrome User Experience Report and a real-user monitoring tool are the sources to trust. A single fast laptop is not a representative sample.
Measure before you optimize
A practical workflow:
- Pick your three most important pages: home, a product or service page, and an article.
- Record field data for each metric.
- Run Lighthouse on a throttled connection.
- Identify the largest element for LCP and the busiest interaction for INP.
- Fix one cause.
- Re-measure after enough traffic to be meaningful.
Do not optimize the score. Optimize the experience, then confirm the score moved.
LCP in Next.js
Use next/image correctly
The Image component can resize, lazy-load, and serve modern formats. The most common mistake is marking every image as a priority.
Only the hero image should have priority. Everything below the fold should lazy-load.
<Image
src="/images/hero.webp"
alt="Product dashboard"
width={1200}
height={630}
priority
sizes="(max-width: 768px) 100vw, 1200px"
/>
Serve the right size
A 2,000-pixel image displayed at 600 pixels wastes bandwidth and delays LCP.
Set sizes so the browser chooses an appropriate source. For responsive images, test the actual rendered width at mobile and desktop breakpoints.
Avoid a client-side hero
If the largest element only appears after a client component fetches data, LCP waits for JavaScript, the request, and the render.
Render the hero on the server. Use streaming for the parts that genuinely need to wait.
Preload the critical asset
For a hero image or font that is essential above the fold, a preload can start the request earlier. Use it sparingly. Preloading everything delays everything else.
Check the font strategy
A custom font can block text rendering. Use next/font to self-host, subset, and control display behavior.
A font swap that changes the width of the headline can also hurt CLS. Choose a fallback with similar metrics.
INP in Next.js
INP is usually a JavaScript problem.
Reduce client components
In the App Router, everything is a Server Component by default. Keep it that way. Add "use client" only to the interactive leaf, not to the whole page.
A page that ships an entire component tree to the browser pays for code it never needs.
Split heavy work
Long tasks block the main thread. Break large computations into smaller chunks, move them to a Web Worker, or do them on the server.
Defer third-party scripts
Analytics, chat widgets, and marketing tags compete with interactions. Load them with next/script and the appropriate strategy.
<Script src="https://example.com/widget.js" strategy="lazyOnload" />
Do not load a chat widget before the user can click the main button.
Audit event handlers
A click handler that updates a large list, recalculates a chart, or triggers a synchronous layout can produce a visible delay.
Measure the interaction. Optimize the specific handler. Do not guess.
CLS in Next.js
Always set image dimensions
An image without width and height reserves no space. When it loads, the content moves.
next/image requires dimensions or fill with a positioned parent. Use them.
Reserve space for dynamic content
Ads, embeds, banners, and cookie notices should have a fixed or minimum height. If the content is unknown, use a placeholder with the expected size.
Be careful with fonts
A fallback font with different metrics causes reflow. next/font helps by generating a size-adjusted fallback.
Avoid inserting content above existing content
A notification bar that pushes the page down after load is a layout shift. Reserve the space or overlay it.
A Next.js performance checklist
- Hero image uses
priority; everything else lazy-loads. - Images have width, height, and a sensible
sizesvalue. - Fonts are self-hosted and subset with
next/font. - Client components are small and intentional.
- Third-party scripts use
next/scriptwith a deferred strategy. - Dynamic sections have reserved space.
- The page works without JavaScript for critical content.
- Lighthouse runs on a throttled mobile profile, not desktop.
- Field data is checked after deploy, not only before.
What not to do
- Chase a perfect Lighthouse score. A 100 in a lab does not guarantee a good field result.
- Lazy-load the hero. It delays the largest paint.
- Preload everything. It competes with the assets that matter.
- Add a heavy animation library for a fade. CSS can usually do it.
- Optimize pages nobody visits. Start with the pages that drive traffic and revenue.
Performance is a product decision
The fastest site is not always the one with the fewest features. It is the one where the important content appears quickly and the interface responds when someone uses it.
That requires trade-offs. A video background may be worth the cost on a brand page. It is rarely worth it on a product page where the buy button matters.
Decide what the page is for, then remove what competes with that purpose.
Final thoughts
Core Web Vitals are not a mysterious ranking factor. They are a summary of how the page feels: does the main content appear, does it respond, and does it stay still?
Measure with field data. Fix the largest cause first. Re-measure.
If you are still deciding on an architecture, the App Router versus Pages Router guide covers the trade-offs. If you want a performance-friendly starting point, the website templates in the store are built with these defaults in mind.
Keep reading
- Next.js App Router vs Pages Router in 2026
- Why every developer must learn debugging
- How to automate GitHub workflows with n8n
Follow The Medamine for more insights on web development, AI, productivity, and digital business.
MY RECOMMENDATION
Templates & Web Kits
Ready-to-use website templates and kits to ship your next project faster.
Browse the StoreFREE DOWNLOAD
Developer Toolkit — 20 Essential Tools
Enter your email and I'll send you this free resource — plus weekly notes on building a digital business.
Related articles

Web Development
n8n vs Zapier in 2026: Which Automation Tool Should You Learn First?
A practical comparison of n8n and Zapier in 2026: pricing models, hosting, learning curve, integrations, and which tool fits your workflow.

Web Development
AI Coding Agents Are Changing Software Development — Here’s What Developers Need to Learn
AI coding agents are moving beyond autocomplete. Learn how developers can use agents to research codebases, implement features, run tests, review changes, and ship software without losing engineering judgment.
