WordPress Core Web Vitals: how to pass LCP, INP and CLS

Three Core Web Vitals gauges, LCP, INP and CLS, all rated good on mobile, beside the title WordPress Core Web Vitals

By the numbers

2.5 s
or less is a good Largest Contentful Paint
web.dev, Web Vitals ↗
200 ms
or less is a good Interaction to Next Paint
web.dev, Web Vitals ↗
40%
of WordPress sites passed Core Web Vitals on mobile in 2024
HTTP Archive Web Almanac 2024 ↗

PageSpeed Insights is showing red, and you want to know what to fix on your site. WordPress Core Web Vitals are three measurements Google uses to judge how a page feels to real visitors. On WordPress sites they mostly come down to images, scripts and layout. Here’s what each one measures, the target to aim for, and the WordPress fixes that actually move it.

What are the three Core Web Vitals, in plain words?

  • LCP, Largest Contentful Paint: how long the main content takes to appear. Good is 2.5 seconds or less.
  • INP, Interaction to Next Paint: how quickly the page responds when someone taps or clicks. Good is 200 milliseconds or less.
  • CLS, Cumulative Layout Shift: how much the page jumps around while it loads. Good is 0.1 or less.

A page passes when at least 75% of real visits meet all three.

Which numbers should I read for my site?

Google PageSpeed Insights shows two sets of numbers. The top box is real visitor data from Chrome users over the previous 28 days (Google explains the difference), and this is what Google uses. The lab score below it is a simulated test on a slow phone. A site can have a poor lab score and still pass on real visitors, and the other way round. Fix what the real data says first.

New or small sites may have no real visitor data yet. Then the lab test is your best guide.

How do I fix LCP on my WordPress site?

The largest element is usually the hero image or the main heading.

  • Serve the hero image at the size it’s shown, in WebP or AVIF
  • Don’t lazy-load the hero image. It should load first
  • Use one properly configured caching layer, not two
  • Cut render-blocking CSS and JavaScript from plugins that aren’t needed on that page
  • Self-host your web fonts and preload the main one

How do I fix INP on my WordPress site?

INP suffers when too much JavaScript runs on the page.

  • Remove plugins that add scripts to every page but are only used on one
  • Delay third-party scripts (chat, analytics, ad pixels) until after the page has loaded
  • Rebuild very heavy page-builder layouts, which ship large scripts

How do I fix CLS on my WordPress site?

CLS is usually the easiest of the three.

  • Give every image and video a width and height
  • Reserve space for ads, embeds and cookie banners before they load
  • Load fonts so the text doesn’t change size noticeably after the page appears

Do Core Web Vitals affect my rankings?

Yes, but as one signal among many. Google uses page experience, including Core Web Vitals, when it ranks pages, but relevant, helpful content still matters more. Where Core Web Vitals help most is between pages of similar quality: if your page and a competitor’s answer the same question equally well, the faster, steadier page has the edge.

The bigger effect is on visitors. A page that loads slowly or jumps around while loading loses people before they read a word, and that affects enquiries and sales whether or not rankings move.

Why does my score change every time I test?

The lab score in PageSpeed Insights is a single simulated run, so it moves by a few points between tests because of network timing, server load and third-party scripts. Don’t chase small changes. Run the test three times and look at the middle result, or better, watch the real visitor data, which is averaged over 28 days and changes slowly.

If the real visitor box says “not enough data”, your site doesn’t have enough Chrome visitors for Google to report on. Google then judges the page mostly on other signals, and the lab test is your best guide.

Which plugins are probably hurting my Core Web Vitals?

Not every plugin is a problem, but some types are frequent offenders:

  • Sliders and carousels at the top of the page. They delay the main image (LCP) and often shift the layout (CLS).
  • Page builders with heavy add-on packs. Many load their scripts and styles on every page, used or not, which hurts LCP and INP.
  • Chat widgets, pop-ups and cookie banners. Large scripts from other servers that compete with your content and can block taps (INP).
  • Social feeds and embedded videos. Each embed loads code from another site. Load them only when the visitor scrolls to them, or show a static preview image.
  • Multiple optimisation plugins. Two plugins rewriting the same CSS and JavaScript can break layouts and undo each other. Keep one.

How do I test in a way I can repeat?

Use the same routine every time, so you can compare results fairly:

  1. Pick the pages that matter: the home page, your top landing pages and, for stores, a product page and the checkout.
  2. Record mobile results for each before changing anything.
  3. Make one change at a time and test again on the same pages.
  4. After deploying, check the real visitor data in Search Console’s Core Web Vitals report over the next four weeks.

Search Console groups pages with similar problems, so one fix to a shared template often fixes hundreds of URLs at once.

What about my WooCommerce store?

Stores have a harder time with Core Web Vitals because their most important pages can’t be fully cached: the cart and checkout change for every visitor. Product pages carry large galleries, and many stores run several marketing scripts. Focus on the product and category templates first, since those get most of your search traffic: size gallery images properly, load reviews and related products after the main content, and remove scripts that only some pages need. Then measure the cart and checkout separately. Those pages are about INP: the time between a tap on “Add to cart” or “Place order” and a visible response.

What does passing look like on a real site?

Tabby launched with Core Web Vitals above 90, and TubeOnAI’s load time went from 5 seconds to 1.5 once I removed its caching conflict. The fixes weren’t exotic: the right image sizes, one caching layer and lighter templates. The TubeOnAI case study walks through it.

If you want the work done with before and after numbers on Google’s own tool, see WordPress speed optimization.

Common questions

What are good Core Web Vitals scores?

Google's thresholds for good are a Largest Contentful Paint of 2.5 seconds or less, an Interaction to Next Paint of 200 milliseconds or less, and a Cumulative Layout Shift of 0.1 or less, measured at the 75th percentile of real visits.

Do Core Web Vitals affect SEO?

They are part of Google's page experience signals, so they can affect rankings, mostly between pages of similar relevance and quality. They have a bigger effect on how many visitors stay long enough to read and act.

Why does my PageSpeed score keep changing?

The lab score is one simulated run, so network timing and third-party scripts move it by a few points each test. Run it several times, or rely on the real visitor data averaged over 28 days.

Which WordPress plugin fixes Core Web Vitals?

No single plugin fixes them. A caching plugin helps server speed, and an image plugin helps LCP, but heavy themes, page builders and third-party scripts need to be fixed at the source. Stacking optimisation plugins often makes things worse.

How long until Core Web Vitals improve in Search Console?

The real visitor data covers the previous 28 days, so improvements show gradually over about four weeks after a fix is deployed. You can then use Search Console's Validate Fix button to confirm.

Summarize with

Share

Sakib Islam, WordPress developer

Written by Sakib Islam, a WordPress developer who builds and looks after sites for businesses and agencies. About my work

Get a free quote

Reply within 24 hours · Hours overlap US, UK and Australia