Skip to main content

Core Web Vitals for WordPress: A Practical Fix Guide (2025)

Google’s Core Web Vitals have been a confirmed ranking signal since 2021. In 2024, Interaction to Next Paint (INP) replaced First Input Delay (FID) as the interactivity metric. Yet the majority of WordPress sites — including many that have had ‘SEO work’ done — still fail at least one threshold. This guide explains what each metric means in practice, why WordPress sites tend to struggle with them, and what you can actually do to fix them.

What Are Core Web Vitals?

Core Web Vitals are three field metrics — real-world measurements from actual Chrome users — that Google uses as part of its page experience signal. They measure:

  • Largest Contentful Paint (LCP): How quickly the largest visible element loads. Target: under 2.5 seconds.
  • Interaction to Next Paint (INP): How responsive the page feels to user input. Target: under 200 milliseconds.
  • Cumulative Layout Shift (CLS): How much the page layout shifts unexpectedly during load. Target: under 0.1.

Field data comes from the Chrome User Experience Report (CrUX) and reflects real conditions on real devices — including slow mobile connections and older hardware. Lab scores from tools like PageSpeed Insights may look better than your field data. If they’re diverging, trust the field data.

Core Web Vitals Metrics

Why WordPress Sites Tend to Fail

WordPress doesn’t come with bad performance baked in — but the ecosystem around it tends to accumulate problems over time. The most common culprits are:

  • Page builders (Elementor, Divi, WPBakery) that load large JavaScript bundles on every page, regardless of whether those features are used.
  • Unoptimised hero images: full-resolution JPEGs or PNGs served at 2,500 pixels wide to a mobile device.
  • Google Fonts loaded via an external request, blocking render.
  • Too many third-party scripts (chat widgets, analytics, ad pixels) loaded synchronously in the document head.
  • No server-side caching: every page request generating a fresh PHP and database query.

Fixing LCP (Largest Contentful Paint)

LCP is almost always caused by one of three things: a slow server, a large unoptimised image, or render-blocking resources. Here’s how to address each:

  1. Server response time (TTFB): If your server takes more than 600ms to respond, your LCP will likely fail regardless of what else you do. Switch to a server-side caching plugin (LiteSpeed Cache, WP Rocket, or W3 Total Cache with an object cache) and consider upgrading to a managed WordPress host if you’re on shared hosting.
  2. Hero image optimisation: Serve your LCP image in WebP or AVIF format. Set explicit width and height attributes. Add fetchpriority="high" to the LCP image element and preload it in the document head so the browser discovers it early.
  3. Remove render-blocking resources: Move non-critical CSS to load asynchronously. Defer or async-load JavaScript that isn’t needed for the initial render.

Fixing INP (Interaction to Next Paint)

INP replaced FID in March 2024. Unlike FID, which only measured the delay before the browser started processing an interaction, INP measures the full duration from input to next paint. This makes it stricter and more reflective of real user frustration.

The main causes of high INP on WordPress sites are heavy JavaScript execution during user interactions and long tasks on the main thread. Common fixes:

  • Audit third-party scripts. A single heavyweight chat widget or analytics library can push INP over the threshold. Use Chrome DevTools’ Performance panel to identify long tasks.
  • Defer non-critical JavaScript. GTM and analytics scripts don’t need to run before the user can interact with the page.
  • Use code-splitting for page builder shortcodes. If your theme’s builder loads all its JavaScript globally, consider switching to a block-based theme with granular asset loading.

Fixing CLS (Cumulative Layout Shift)

CLS is the most consistently fixable of the three metrics. The most common causes:

  • Images and embeds without explicit dimensions: the browser doesn’t know the space to reserve, so content shifts when the asset loads. Always set width and height attributes.
  • Late-loading ads, cookie banners, or sticky notifications that push content down after load.
  • Web fonts loading after the page text, causing a font swap that shifts text position. Use font-display: optional or swap, and preload critical font files.

Measuring Your Progress

Don’t rely only on lab tests. Check your CrUX field data monthly:

  • Google Search Console → Core Web Vitals report: shows your real-world pass/fail rates by URL group.
  • PageSpeed Insights (Field Data section): shows 28-day field data for any URL with sufficient traffic.
  • CrUX Dashboard in Looker Studio: tracks trends over time at domain level.

A good technical SEO engagement will baseline your Core Web Vitals before any changes, implement fixes in order of impact, and track improvement using field data — not just lab scores. If your agency reports only on lab scores, ask for the field data.

If you want a Core Web Vitals audit for your WordPress site, get in touch.
I’ll review your CrUX field data, identify the primary causes of any failures, and give you a clear, prioritised fix list with realistic effort estimates.

Back to all posts