info

Affiliate Disclosure: This article contains benchmarked tools that may compensate us. We only recommend hardware and software tested in our lab environments for maximum LCP and INP efficiency.

How to Fix LCP Under 2.5s: A Developer’s Complete Guide

A step-by-step engineering guide to achieving sub-2.5s Largest Contentful Paint on WordPress. Covers fetchpriority hints, render-blocking elimination, WebP conversion, and TTFB optimization.

calendar_today folder

What Is LCP and Why 2.5s Is the Threshold

Largest Contentful Paint (LCP) measures when the largest visible element — almost always a hero image or above-the-fold heading — finishes rendering in the viewport. Google classifies LCP under 2.5s as “Good,” 2.5–4.0s as “Needs Improvement,” and above 4.0s as “Poor.” A 1-second LCP delay reduces conversions by 8–12% across e-commerce and publishing verticals.

Step 1: Identify Your LCP Element

Open Chrome DevTools → Performance tab → record a page load → find the LCP marker in the Timings row. DevTools highlights the LCP element in the DOM. Alternatively use WebPageTest which annotates the filmstrip and names the element in the Web Vitals section. Never optimize without knowing what your LCP element actually is.

Step 2: Eliminate Resource Discovery Delay

The browser cannot download your LCP image until it discovers the URL. If the URL is in CSS or JavaScript, discovery is delayed by hundreds of milliseconds. Fix: put LCP images in HTML with a visible src attribute, and add fetchpriority=”high”.

<img src="hero.webp" fetchpriority="high" loading="eager" width="1200" height="630" alt="Hero" />

For CSS background images, add a preload link in the head: <link rel="preload" as="image" href="hero.webp" fetchpriority="high" />

Step 3: Fix Time to First Byte

LCP cannot complete until the HTML arrives. Target TTFB under 600ms. Every millisecond of TTFB directly consumes your LCP budget. The fastest fix: enable full-page caching. Cached WordPress pages serve in under 50ms. Uncached pages can take 300ms–2s depending on hosting and plugin load.

TTFBLCP Budget RemainingAction
Under 200ms2.3s remainingExcellent — focus on resource loading
200–600ms1.9–2.3s remainingGood — standard caching applies
600ms–1s1.5–1.9s remainingRequires hosting upgrade or full-page cache
Over 1sUnder 1.5s remainingCritical — fix hosting before anything else

Step 4: Optimize the LCP Image

If your LCP element is an image — true for roughly 70% of pages — format and size matter enormously. Switch JPEG hero images to AVIF (62% smaller) or WebP (38% smaller). On Slow 4G, an AVIF hero image can reduce LCP by 50% compared to JPEG. Always implement responsive srcset so mobile visitors receive appropriately sized images.

<picture>
  <source srcset="hero.avif" type="image/avif" />
  <source srcset="hero.webp" type="image/webp" />
  <img src="hero.jpg" fetchpriority="high" loading="eager" width="1200" height="630" alt="Hero" />
</picture>

Step 5: Remove Render-Blocking Resources

Defer all non-critical JavaScript. Inline critical CSS for above-the-fold rendering. Eliminate or defer Google Fonts. Every render-blocking resource in the head delays your LCP by its full download and parse time. Use Chrome DevTools Coverage panel to identify unused CSS and JS that can be deferred or eliminated.

LCP Optimization Checklist

  • LCP element identified with DevTools or WebPageTest
  • LCP image in HTML with fetchpriority=”high” and loading=”eager”
  • Image served in AVIF or WebP format with JPEG fallback
  • Responsive srcset implemented for mobile
  • TTFB under 600ms verified with WebPageTest
  • No render-blocking CSS or JS on critical path
  • Full-page cache enabled (WP Rocket, LiteSpeed Cache, or Nginx FastCGI)
  • CDN configured with edge caching

FAQ

What is a good LCP score?

Google classifies LCP under 2.5s as “Good.” Target sub-2.5s across all device and connection profiles for a passing Core Web Vitals assessment in Google Search Console.

Why is my LCP good in Lighthouse but bad in Search Console?

Lighthouse runs a simulated lab test. Search Console shows real user data across all devices and connections — including slow mobile. Always verify with CrUX field data, not just Lighthouse lab scores.