WordPress

Passing Core Web Vitals: A Step-by-Step Guide for WordPress

6 Apr 2026 · 10 min read


Passing Core Web Vitals is the goal — but the path there is unclear for many WordPress site owners. This guide shows a systematic approach: from measurement through analysis to concrete implementation.

What does "passing Core Web Vitals" actually mean?

Google scores three signals:

  • LCP under 2,500 ms (p75 of your visitors)
  • CLS under 0.1 (p75 of your visitors)
  • INP under 200 ms (p75 of your visitors)

All three have to be in the green range at the same time. Google doesn't use lab values for this but real user data from the Chrome UX Report — measured at the 75th percentile.

Step 1: Measure the current state

Before you optimise: measure. Without a baseline you don't know what actually improved.

Synthetic measurement: turbometrics or PageSpeed Insights — both show LCP, CLS and TBT (as an INP proxy) from a lab browser.

Real user data: PageSpeed Insights shows CrUX data if enough traffic is available. With turbometrics live data you see p75 values from your own visitors — even with less traffic than CrUX requires.

Important: measure both desktop and mobile. Mobile values are almost always worse, and Google primarily scores the mobile experience.

Step 2: Identify the biggest problem

Which of the three signals is furthest from the target? Start there.

Improving LCP

LCP is usually the biggest problem on WordPress. The most important levers:

Quick wins:

  • Convert the hero image to WebP
  • Set fetchpriority="high" on the LCP element
  • Add <link rel="preload"> for the LCP image in the <head>
  • Enable a caching plugin (WP Rocket, LiteSpeed Cache)

Medium term:

  • Upgrade hosting if TTFB is over 800 ms
  • Put Cloudflare in front as a CDN
  • Deactivate unnecessary JavaScript plugins

More details: Improve WordPress LCP

Improving CLS

CLS measures how much elements jump around while loading. Common causes on WordPress:

Images without dimensions:

<!-- Wrong: -->
<img src="image.jpg" alt="...">

<!-- Correct: -->
<img src="image.jpg" alt="..." width="800" height="450">

Ads and embeds without reserved space: Always set min-height for ad slots and iframes before the content loads.

Web fonts with FOUT:

@font-face {
  font-display: swap; /* or optional */
}

WordPress-specific:

  • Gutenberg blocks sometimes have missing dimensions — check the theme
  • Slider and carousel plugins often cause CLS problems

Improving INP

INP measures how quickly your page responds to clicks. On WordPress this is usually caused by:

Too much JavaScript:

  • Deactivate unnecessary plugins with heavy JS
  • Load scripts with defer
  • Check the Tag Manager container for the scripts it contains

Long tasks on the main thread: Chrome DevTools → Performance tab → identify and eliminate long tasks.

WordPress admin bar: The admin bar loads extra JavaScript. When logged in as an admin, measure INP values in a logged-out browser instead.

Step 3: Set a baseline and track changes

Before every round of optimisation: set a baseline scan. That way you see exactly which change had which effect.

With turbometrics:

  1. Run a scan
  2. Click "Set as baseline"
  3. Carry out the optimisation
  4. Start a new scan
  5. Show the comparison against the baseline

Step 4: Monitor after deployment

Core Web Vitals can get worse through plugin updates, new images or theme changes — often unnoticed.

Set up automatic monitoring:

  • Scheduled scans daily or every 6 hours
  • Alert when LCP rises above 2,500 ms
  • Alert when CLS rises above 0.1
  • A weekly report to summarise

With turbometrics alerts you're notified immediately when a value tips over — by email or webhook.

Common mistakes when optimising

Only measuring desktop: Google primarily scores mobile. Desktop values are almost always better.

Only using Lighthouse: Lighthouse is a lab tool. CrUX and RUM show what Google actually sees. More on this: Measuring Core Web Vitals: Synthetic vs. Real User Data.

Changing too much at once: Always change one thing at a time — otherwise you won't know what actually helped.

Misconfiguring the caching plugin: Incorrectly configured caching can cause CLS (for example through delayed CSS loading).

Realistic expectations

Passing Core Web Vitals is achievable on WordPress — but not always easy. Typical timeline:

  • Improving LCP: 1-3 days (mostly image optimisation + caching)
  • Fixing CLS: 2-5 days (root-cause analysis + theme adjustments)
  • Optimising INP: 1-4 weeks (JS audit + refactoring)

After that: 4-12 weeks until Google picks up the new CrUX data and adjusts the ranking.

Checklist: passing Core Web Vitals

Here are the most important measures as a checklist:

LCP (under 2,500 ms):

  • Hero image optimised (WebP, correct size)?
  • LCP image with preload and fetchpriority?
  • Server-side caching active?
  • TTFB under 800 ms?
  • Render-blocking scripts removed or deferred?

CLS (under 0.1):

  • All images with width/height attributes?
  • Ad slots reserved with a fixed height?
  • Fonts loaded with font-display: swap?
  • No slider/carousel without reserved space?

INP (under 200 ms):

  • Unnecessary JS plugins deactivated?
  • All scripts loaded with defer?
  • No long tasks over 50 ms on the main thread?
  • Tag Manager cleaned up?

Conclusion

Passing Core Web Vitals is a systematic process:

  1. Measure — synthetically and with real user data
  2. Set priorities — which signal is worst?
  3. Optimise deliberately — one change at a time
  4. Set a baseline — document progress
  5. Monitor continuously — catch regressions immediately

Start for free now — analyse your Core Web Vitals

Try turbometrics for free

Scans, monitoring and live data — start for free, no subscription needed.

Get started for free