Skip to content
Performance

Core Web Vitals on WordPress: what actually moves LCP

Most WordPress speed advice is a list of plugins. The score moves when you fix the largest element on the page, and almost everything else is noise.

Engineering·5 September 2026·8 min read

There is a genre of WordPress advice that lists twenty performance tips, every one of them technically true and most of them irrelevant to your site. Meanwhile the actual problem, on most sites we look at, is one image, one font and one third party script.

Core Web Vitals are three specific measurements. Understanding what each one is watching tells you exactly where to spend an afternoon.

LCP is one element, so find it before you optimise anything

Largest Contentful Paint measures when the biggest visible thing in the viewport finishes rendering. On most WordPress sites that is a hero image, a background image or a large heading.

You cannot fix LCP without knowing which element it is. Every browser devtools performance panel will tell you. Until you know, every change you make is a guess, and most guesses on WordPress sites are wrong.

  • If it is an image: serve it in a modern format, size it for the viewport, never lazy load it, and give it high fetch priority.
  • If it is text: the web font is usually the delay. Preload it, keep the fallback readable and stop the browser hiding text while it waits.
  • If it is a slider: consider whether a slider is worth the second it costs you. Usually the second slide has never been seen by anyone.

CLS is almost always missing dimensions

Cumulative Layout Shift measures how much the page moves while loading. On WordPress it comes from three places: images and iframes without width and height, ads or embeds injected after render, and fonts that swap at a different size to the fallback.

It is one of the cheapest wins available, because the fixes are mechanical rather than architectural. Reserve the space, and the shifting stops.

INP is a JavaScript problem, and WordPress has a lot of JavaScript

Interaction to Next Paint measures how quickly the page responds when someone taps. A site that renders fast and then freezes for half a second on the first tap fails here.

The usual culprits on WordPress are a stack of plugins each loading their own script on every page, a page builder shipping its full runtime, and chat or analytics widgets doing work on the main thread. The fix is subtraction: stop loading scripts on pages that do not use them.

The order that actually works

  • Measure field data, not just a lab score, and identify the LCP element.
  • Fix that element: format, dimensions, priority, no lazy loading.
  • Add page caching so the server responds quickly and consistently.
  • Reserve space for images, embeds and ads to kill layout shift.
  • Cut scripts that load where they are not needed, starting with the heaviest.
  • Clean the database if the site is old, because query time is server time.
  • Only then consider a CDN, which helps distance and static delivery but will not rescue a bad page.

Advice that mostly does nothing

Combining all CSS into one file made sense before HTTP/2 and is now often neutral or harmful. Aggressively deferring every script breaks themes and costs you INP. Chasing a perfect lab score on a desktop connection optimises for a visitor who does not exist.

None of it is malicious advice. It is old advice, repeated, and it survives because it is easy to write as a listicle.

Where a tool helps

The reason we built SmartSite Optimizer is that most site owners do not need a consultant, they need the safe fixes applied and a plain explanation of the one thing that is still costing them. It optimises images, minifies CSS and JavaScript, handles lazy loading and browser caching, cleans the database, and gives AI backed suggestions that name the specific asset or query holding the score back.

If your site is a store, the priorities shift slightly, and we covered that in why your WooCommerce store fails Core Web Vitals.

Performance work is unglamorous and finite. Find the biggest element, make it small and early, stop the page jumping, and remove the scripts nobody asked for. That is most of the score, and it is a day of work, not a rebuild.

Frequently asked questions

What is a good LCP for a WordPress site?

Under 2.5 seconds for at least three quarters of real visits, measured on mobile. The important word is real. A lab test on a fast laptop tells you almost nothing about a customer on a mid range Android phone on a mobile connection, which is who most Pakistani traffic actually is.

Do caching plugins fix Core Web Vitals?

They fix one part of it. Caching reduces server response time, which helps the start of the loading sequence, but if your largest element is a 900KB uncompressed hero image loaded lazily, caching will not save you. Cache first because it is easy, then go after the largest element, which is where the seconds are.

Why did my score drop after I installed an optimisation plugin?

Usually because it deferred or combined scripts your theme depends on, so the browser now waits on JavaScript before painting, or because lazy loading was applied to the hero image. The hero image must never be lazy loaded. It is the element being measured.

How often should Core Web Vitals be checked?

Look at field data monthly, and always after a theme update, a plugin addition or a redesign. Performance regressions almost never announce themselves; they arrive with a new slider, a chat widget or a font someone added for one heading.

Next step

Tell us what is slowing your business down

Send a short brief. Within four business hours you get either a straight answer, a rough number, or the two questions we need to give you one.

Replies under 4 business hoursNDA on requestYou own the code