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:
- Run a scan
- Click "Set as baseline"
- Carry out the optimisation
- Start a new scan
- 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:
- Measure — synthetically and with real user data
- Set priorities — which signal is worst?
- Optimise deliberately — one change at a time
- Set a baseline — document progress
- Monitor continuously — catch regressions immediately