all posts
2026-06-14

Do Core Web Vitals actually move your ranking?

The honest answer is "yes — conditionally." Engineers tend to land on one of two wrong extremes: chasing a perfect Lighthouse score as if it were the ranking, or dismissing Core Web Vitals as marketing noise. Both miss how the signal actually works.


Core Web Vitals are one of the few ranking inputs that live entirely in your codebase. No backlinks, no editorial calendar — just render performance you control with a deploy. That makes them unusually attractive to engineers, and unusually easy to misjudge.

So let's be precise about what Google has actually said, what the signal does, and — the part nobody tells you — why a Core Web Vitals fix takes even longer to show up in your rankings than a normal content change.

The short answer: yes, but it's a conditional signal

Google's John Mueller put it about as plainly as Google ever does: page experience "is a ranking factor, and it's more than a tie-breaker, but it also doesn't replace relevance." In the same breath he added that "relevance is still by far much more important. So just because your website is faster with regards to Core Web Vitals than some competitors doesn't necessarily mean that you will jump to position number one."

Google's own documentation says the same thing from the other direction: it will "prioritize pages with the best information overall, even if some aspects of page experience are subpar," but "in cases where there are multiple pages that have similar content, page experience becomes much more important for visibility in Search."

That last sentence is the whole model. Core Web Vitals are a differentiator among comparable results, not a substitute for being a comparable result in the first place. If you're the most relevant answer by a mile, slow vitals won't bury you. If you're one of ten pages that all basically answer the query, vitals are exactly the kind of thing that decides who's on top.

The three metrics, in engineer terms

There are three, and they measure three different failure modes of a page load:

MetricWhat it measures"Good" threshold
LCP — Largest Contentful PaintHow long until the biggest above-the-fold element renders2.5s
INP — Interaction to Next PaintWorst-case responsiveness to user input across the visit200ms
CLS — Cumulative Layout ShiftHow much the layout jumps around as it loads0.1

One change worth flagging if your knowledge is a couple of years stale: INP replaced First Input Delay (FID) as a Core Web Vital in March 2024. INP is the stricter, more honest metric — FID only measured the delay before the first interaction was processed; INP looks at responsiveness across the whole session. For JavaScript-heavy single-page apps, this was the metric that suddenly got harder to pass, because it punishes long main-thread tasks that block interaction well after the initial load.

A page "passes" when the 75th percentile of real users hits the good threshold on all three.

The trap: only field data counts

Here is the single most common mistake engineers make with Core Web Vitals, and it's worth its own section.

The Lighthouse score in your DevTools is not what Google ranks on. Lighthouse and PageSpeed Insights' "lab" number are a simulated load on a synthetic device — useful for debugging, irrelevant to ranking. What feeds the search signal is field data: the Chrome User Experience Report (CrUX), aggregated from real Chrome users on real devices and networks, reported as a rolling 28-day 75th-percentile.

The practical consequences are sharp:

  • A green 100 in Lighthouse means nothing if your actual users — on mid-range Android phones, on flaky connections — are seeing a 4-second LCP.
  • You can't measure your way to confidence in a lab. You need real-user monitoring, or at minimum the CrUX data in Search Console's Core Web Vitals report.
  • The metric you're optimizing is a distribution, not a number. The 75th percentile means your slowest quarter of visits sets your fate. Optimizing the median while ignoring the long tail is wasted work.

If you take one thing from this post: stop screenshotting Lighthouse and start watching your p75 field data.

Why a vitals fix is slow to show up — even slower than a content change

We've written before about the lag between shipping a change and seeing a ranking move: Google has to re-crawl, re-index, and re-rank, and that's typically one to three weeks. Core Web Vitals stack an additional delay on top of that, and it catches teams out constantly.

Because the ranking signal is built from a 28-day rolling window of real-user data, the day you deploy a performance fix is the day the window starts refilling with better numbers. Your p75 doesn't flip the moment you merge — it drifts as old slow samples age out and new fast ones accumulate. Only once the field data crosses the threshold does the clock on crawl, index, and re-rank even begin.

deploy perf fix 28-day field-data window refills p75 drifts past threshold then: crawl → index → re-rank +1 to 3 weeks measurable ranking movement ~6–8 weeks total day 0 ~day 28 ~day 45+
A Core Web Vitals fix has to clear a rolling 28-day field-data window before the crawl-index-rerank clock even starts. Six to eight weeks from deploy to ranking movement is a reasonable expectation — not a sign the fix failed.

This is why "we made the site faster and nothing happened" is almost always a measurement error, not a strategy error. Teams check too early, see flat rankings, and write off the work — the same false-negative trap that makes good SEO get deprioritized. The fix landed; the window just hadn't turned over yet.

Where engineers actually get leverage

If you're going to spend a sprint on this, spend it where the odds say it'll matter:

  • LCP is usually the bottleneck. Across the web it's the hardest of the three to pass, and it's dominated by a short list of fixable causes: render-blocking resources, slow server response, unoptimized hero images, and lazy-loading the thing that shouldn't be lazy-loaded.
  • INP is the SPA tax. If you ship a heavy client-rendered app, your long main-thread tasks are the risk. Break up work, defer non-critical hydration, and stop shipping JavaScript the first interaction doesn't need.
  • CLS is usually cheap to fix. Reserve space for images, ads, and embeds; don't inject content above existing content. It's the one most teams can clear in an afternoon.

And don't optimize blind. A vitals change is a deploy like any other, and its real test is whether your rankings moved once the field data and the index caught up — not whether a synthetic score went green.


So: do Core Web Vitals move your ranking? Yes — as a real, confirmed signal that decides positions among pages that are otherwise close on relevance, measured on your slowest quarter of real users, over a rolling month. Treat it as the differentiator it is, measure it on field data, and give it six to eight weeks before you judge it.

That last part — connecting a specific deploy to the ranking move it eventually caused, across a lag this long — is exactly what Code Results is built to do: changepoint detection on your Search Console history, matched back to the pull request that actually moved the number.