article

The Real Reason Your Largest Contentful Paint Won’t Drop Below 2.5s

May 11, 2026

You’ve compressed images, added caching, and minified everything — but LCP is stuck at 3 seconds. LCP measures when the largest visible element (usually the hero image or headline) finishes rendering. When it won’t budge, the problem is rarely file size. It’s the order things load in.

Open the performance panel and find what the LCP element actually is. If it’s a hero image, the real question is: how long after the page starts does that image even begin downloading? Often the answer is “too late,” because the browser discovered it deep in the HTML, or it’s waiting behind render-blocking CSS and JavaScript.

Three fixes for an image LCP

Preload the LCP image so the browser fetches it immediately. Make sure it isn’t lazy-loaded — lazy loading the hero is a classic own-goal that delays the one image you need first. And clear the path: render-blocking scripts in the head push back the moment the browser can paint.

If the LCP element is text

The culprit is usually a web font. Text can’t render in its final form until the font loads, so a slow font request becomes a slow LCP. Preload the font and use font-display: swap.

LCP is a sequencing problem more than a weight problem. Get the largest element to start loading early and remove what blocks it, and 3 seconds becomes 1.5.