October 22, 2025·3 min read

Core Web Vitals in 2025: What Actually Affects Rankings

Page speed has been a ranking factor for years, but Core Web Vitals changed what 'fast' actually means to Google. Here's what the three metrics measure and how to improve them.

Core Web Vitals are a set of three metrics Google uses to measure real-world user experience: how quickly content loads, how quickly a page responds to input, and how much the layout shifts while loading. They're part of Google's page experience signals, and while content relevance still dominates ranking, a page with a poor user experience can underperform a similar page that loads cleanly.

The three metrics

Largest Contentful Paint (LCP)

LCP measures how long it takes for the largest visible element — usually a hero image or heading — to render. Google's threshold for "good" is under 2.5 seconds. The most common cause of slow LCP is unoptimized images and render-blocking JavaScript or CSS loaded before the main content.

Interaction to Next Paint (INP)

INP replaced First Input Delay (FID) as the responsiveness metric in 2024. It measures the latency of all user interactions throughout a page's lifecycle, not just the first one. A good INP score is under 200 milliseconds. Heavy JavaScript execution on the main thread — large bundles, unoptimized event handlers, third-party scripts — is the usual culprit.

Cumulative Layout Shift (CLS)

CLS measures unexpected layout movement — text jumping down because an ad loaded above it, or a button shifting because a font swapped in late. A good CLS score is under 0.1. This is fixed by reserving space for images and ads with explicit width/height or aspect-ratio CSS before they load, and by avoiding inserting new content above existing content after the initial render.

Why this matters for ad-supported sites specifically

Sites that run display ads have a structural tension here: ads are exactly the kind of late-loading, layout-shifting element that hurts CLS, and ad scripts are exactly the kind of third-party JavaScript that hurts INP. The fix isn't to remove ads — it's to load them deliberately: reserve a fixed-height container for every ad slot before the ad script populates it, lazy-load ads below the fold instead of all at once, and avoid stacking multiple ad networks' scripts on a single page.

How to check your scores

Google Search Console's Core Web Vitals report shows field data — real user measurements — aggregated over 28 days, grouped by URL pattern. PageSpeed Insights and Lighthouse give you lab data for a single page load, useful for debugging a specific issue before it shows up in the aggregated field report weeks later.

Practical fixes that move the needle most

  • Serve images in modern formats (WebP/AVIF) and at the actual display size, not full resolution scaled down by CSS.
  • Defer or lazy-load anything below the fold — including ad slots and embedded widgets.
  • Self-host or preconnect to critical third-party origins to cut DNS/TLS handshake time.
  • Reserve explicit space for every dynamically inserted element, ads included, so nothing shifts the page after load.

None of this replaces good content, structured data, or clear answer-first copy. But on a page that's otherwise well optimized, Core Web Vitals are often the difference between a page that ranks and one that ranks just slightly below a faster competitor covering the same topic.