You’ve just run a performance test, and there it is: a bright red score. You’re staring at your report asking, “why is my lcp so high?” In my experience, Largest Contentful Paint (LCP) is the most frustrating Core Web Vital because it’s rarely caused by one single ‘bug.’ Instead, it’s usually a combination of server latency, bloated assets, and render-blocking code.

LCP measures the time it takes for the largest visible element—usually a hero image or a heading—to become visible in the viewport. If this takes longer than 2.5 seconds, Google flags it. In this guide, I’ll walk you through how to diagnose your specific bottleneck and the exact implementation steps to fix it.

The Fundamentals: What Actually Drives LCP?

To understand why your LCP is high, you have to stop looking at it as one number and start looking at it as a timeline. LCP is the sum of four distinct phases:

When I debug a site, I first determine which of these four is the primary culprit. If your TTFB is 1.2s, no amount of image optimization will get you to a ‘Good’ score.

Deep Dive 1: Server Response & TTFB

If you’re wondering why is my LCP so high and your server is slow, you’re fighting a losing battle. High TTFB is often caused by slow database queries, unoptimized backend code, or a lack of effective caching.

I’ve found that implementing a Global CDN (like Cloudflare or Vercel Edge) is the fastest way to slash this. By caching your HTML at the edge, you move the content closer to the user, reducing the round-trip time significantly.

Deep Dive 2: Resource Load Delay (The ‘Hidden’ LCP)

This is the most common silent killer. The browser cannot start downloading your hero image until it has parsed the HTML and found the <img> tag. If that image is hidden inside a CSS file or loaded via JavaScript, you’ve created a massive delay.

The Fix: Preloading. Tell the browser to prioritize the LCP element immediately. Add this to your <head>:

<link rel="preload" as="image" href="/images/hero-banner.webp">

Additionally, ensure you aren’t lazy-loading your LCP image. I see this mistake constantly: developers apply loading="lazy" to every image on the page. Never lazy-load the LCP element. In fact, use fetchpriority="high" to give it an extra boost.

Chrome DevTools Network waterfall showing the difference between a lazy-loaded and a preloaded LCP image
Chrome DevTools Network waterfall showing the difference between a lazy-loaded and a preloaded LCP image

Deep Dive 3: Resource Load Duration

Once the browser knows about the image, it has to download it. If you’re serving a 2MB PNG, your LCP will remain high regardless of your server speed.

I always recommend these three steps for asset optimization:

  1. Modern Formats: Convert everything to WebP or AVIF. The file size difference compared to JPEG is staggering.
  2. Responsive Images: Use srcset to serve smaller images to mobile users.
  3. Compression: Use tools like Squoosh or automated CI/CD pipelines to strip unnecessary metadata.

Don’t forget about typography. If your LCP element is a large block of text, the browser might wait for a custom web font to load before rendering. I highly recommend optimizing font loading for LCP by using font-display: swap to ensure text is visible immediately.

Deep Dive 4: Element Render Delay

The resource is downloaded, but the user still can’t see it. This usually happens because of Render-Blocking Resources. JavaScript and CSS in the <head> stop the browser from painting the page.

To fix this, audit your CSS. If you have a massive 200KB CSS file, the browser won’t render a single pixel until that file is parsed. I’ve had great success with “Critical CSS”—extracting only the styles needed for the above-the-fold content and inlining them directly in the HTML.

Implementation: The LCP Optimization Checklist

Here is the workflow I use when auditing a new project. Follow these in order:

Priority Action Expected Impact
Critical Remove loading="lazy" from LCP element High
Critical Add fetchpriority="high" to LCP image Medium-High
High Convert hero image to AVIF/WebP High
High Implement Edge Caching (CDN) Medium-High
Medium Inline Critical CSS Medium

If you are unsure which tool to use for measuring these changes, you might be wondering about Google PageSpeed Insights vs Lighthouse. While both are great, remember that PSI provides “field data” (real users), which is what Google actually uses for your SEO ranking.

Principles of Sustainable Performance

Optimization isn’t a one-time event; it’s a habit. To keep your LCP low, I follow these three principles:

Recommended Tools for LCP Diagnosis

Ready to dive deeper into performance? Start by auditing your assets and removing those lazy-load tags from your hero sections today!