←back to Blog

WordPress LCP optimization guide showing how to fix a slow Largest Contentful Paint score

WordPress LCP Optimization: How to Fix a Slow Largest Contentful Paint Score

Your homepage passes every speed test you can think of, except the one Google actually uses to rank you. That’s usually a Largest Contentful Paint problem, and WordPress LCP optimization is where most sites lose their Core Web Vitals score even after “fixing” everything else. LCP measures how long it takes the biggest visible element on a page, usually a hero image or heading, to fully render. Get that wrong and the rest of your speed work barely moves the needle.

What Is LCP and Why Does It Matter for WordPress?

Largest Contentful Paint (LCP) is a Core Web Vital that measures how long it takes the largest visible element on a page to finish rendering in the viewport. It’s one of the three metrics Google uses to score page experience, alongside Interaction to Next Paint (INP) and Cumulative Layout Shift (CLS), and it’s the one most WordPress sites fail first.

LCP matters because it’s a direct proxy for how fast a page feels to a real visitor. A slow LCP means someone lands on the page and stares at a blank space, or a half-loaded layout, before the content they came for actually shows up. Google factors Core Web Vitals into search ranking, and a bad LCP score can hold a page back even when every other technical SEO box is checked.

What Counts as a Good LCP Score?

A good LCP score is 2.5 seconds or faster. Between 2.5 and 4 seconds is rated “needs improvement,” and anything past 4 seconds is rated “poor” by Google’s own thresholds. LCP is also the hardest of the three Core Web Vitals to pass: according to the 2025 Web Almanac, only around 62% of mobile pages achieve a good LCP score, compared to 77% for INP and 81% for CLS.

That gap is worth paying attention to. It means LCP is usually the single metric holding a WordPress site back from an overall “good” Core Web Vitals assessment, even when INP and CLS are already fine.

How Do You Test LCP on a WordPress Site?

The most reliable way to test LCP is Google PageSpeed Insights, which reports both lab data (a simulated test) and field data (real visitor performance pulled from the Chrome User Experience Report). Enter the URL, and the Diagnostics section will name the exact element triggering LCP on that page, usually a hero image, a background image set in CSS, or a large heading.

Field data and lab data can disagree, and that’s normal. A page can score well in a one-off Lighthouse test and still show a poor LCP in the field if real visitors are on slower connections or older phones. Always trust field data over lab data when they conflict, since field data reflects what actual users experience, not a single simulated run in a data center.

Chrome DevTools’ Lighthouse panel and WebPageTest are useful follow-ups once PageSpeed Insights has identified the LCP element. They go deeper into what’s blocking that specific element from rendering sooner, which matters once the fixes below stop being enough on their own.

What Usually Causes a Bad LCP Score on WordPress?

A bad WordPress LCP score almost always comes down to one of four things: slow server response time, an oversized or late-loading hero image, render-blocking CSS or JavaScript, or web fonts that delay text rendering. Most WordPress sites have at least two of these stacked on top of each other, which is why LCP fixes tend to require more than one change.

  • Slow Time to First Byte (TTFB): if the server takes too long to respond, nothing on the page can start rendering, no matter how optimized the front end is.
  • Unoptimized hero images: a 3MB PNG banner straight off a phone camera is one of the most common LCP killers on WordPress sites.
  • Render-blocking CSS and JavaScript: page builder plugins and heavy themes often load stylesheets and scripts that the browser has to process before it can paint anything.
  • Web fonts loading late: if custom fonts aren’t preloaded, the browser can delay text rendering until the font file arrives, an effect sometimes called flash of invisible text.

How to Fix Largest Contentful Paint on WordPress

Fixing LCP on WordPress means working through server response time, image weight, render-blocking assets, and font loading in that order, since server speed is the ceiling everything else has to work under. Each fix below targets one of the causes listed above.

1. Fix Time to First Byte First

No front-end optimization can fix a slow server. A well-configured host should deliver a cached page in under 200ms and a dynamic, uncached WordPress page in under 400-600ms. If TTFB is regularly above 600ms, that’s a hosting problem, not a plugin problem, and it’s worth checking whether the account is on oversold shared hosting before spending time on anything else on this list.

2. Compress and Resize the LCP Image

The single biggest LCP win on most WordPress sites is shrinking the image PageSpeed Insights flags as the LCP element. Converting hero images to WebP or AVIF typically cuts file size by 30-50% with no visible quality loss, and resizing the image to the actual pixel dimensions it displays at (not the 4000px original from a camera or stock library) removes wasted bytes the browser never needed to download in the first place.

A more detailed walkthrough of formats, compression settings, and resizing is covered in this WordPress image optimization guide, which is worth a full read since image weight affects more than just LCP.

3. Preload the LCP Image, Don’t Lazy-Load It

Lazy loading the hero image is a common mistake that directly hurts LCP. Lazy loading tells the browser to wait until an element is about to enter the viewport before fetching it, which is exactly wrong for the LCP element, since it’s visible immediately on page load. The LCP image should be preloaded instead, using a preload hint in the document head so the browser starts fetching it as early as possible.

<link rel="preload" as="image" href="/wp-content/uploads/hero-image.webp" fetchpriority="high">

Most modern caching and image plugins can add this automatically once the LCP image is marked as a priority image in their settings, which is usually simpler than editing theme templates directly.

4. Eliminate Render-Blocking CSS and JavaScript

Render-blocking resources delay LCP because the browser has to download and process them before it can paint anything on screen. A good caching plugin can generate critical CSS (the small subset of styles needed for the visible part of the page) and defer everything else, and can load non-essential JavaScript with the defer attribute so it doesn’t block the initial paint. A side-by-side breakdown of two popular options for handling this on WordPress is covered in this WP Rocket vs W3 Total Cache comparison.

5. Preload Custom Fonts

If the LCP element includes text set in a custom font, that font file needs to load fast. Preloading the specific font file used for above-the-fold text prevents the browser from delaying text rendering while it waits for the font to arrive. Self-hosting fonts instead of loading them from a third-party server also removes an extra DNS lookup and connection, which shaves real time off font delivery.

LCP vs INP: Why WordPress Sites Need to Fix Both

LCP and INP measure two different things and fixing one doesn’t fix the other. LCP measures how fast content appears on the page; INP measures how fast the page responds once a visitor actually interacts with it, like clicking a button or opening a menu. A WordPress site can have excellent LCP and still fail INP if heavy JavaScript locks up the main thread after the page has already loaded.

Since both are required for a passing Core Web Vitals assessment, it’s worth treating them as a pair rather than fixing one and assuming the other is fine. A full breakdown of diagnosing and fixing a slow INP score is covered in this WordPress INP optimization guide.

Getting LCP Under 2.5 Seconds

WordPress LCP optimization isn’t one setting to flip, it’s a short list of fixes that compound: a fast server, a compressed and preloaded hero image, no render-blocking assets in the way, and fonts that load early. Work through them in that order, retest with PageSpeed Insights after each change, and check field data before declaring the problem solved. Most WordPress sites that fail LCP are only one or two of these fixes away from a passing score.

Frequently Asked Questions

A good LCP score is 2.5 seconds or less. Scores between 2.5 and 4 seconds are rated “needs improvement,” and anything above 4 seconds is rated “poor” under Google’s Core Web Vitals thresholds.

A caching plugin alone doesn’t fix LCP if the hero image is still oversized, lazy-loaded instead of preloaded, or the server’s Time to First Byte is slow. Caching helps repeat visits and reduces server load, but the LCP element itself still needs to be compressed, correctly sized, and preloaded.

No, the hero image or LCP element should never be lazy-loaded. Lazy loading delays the fetch until the element nears the viewport, which is the opposite of what LCP needs since that image is visible the moment the page loads. It should be preloaded instead.

Page load time measures when every resource on a page has finished loading, while LCP measures only when the largest visible element has rendered. A page can have a fast LCP but a slow total load time if content below the fold or non-visible scripts are still loading in the background.

Yes, LCP is one of the three Core Web Vitals Google uses as part of its page experience ranking signals. A poor LCP score can hold a page back in search results even when its content and other SEO factors are strong.

Leave a Reply

Your email address will not be published. Required fields are marked *