Back to Blog
Core Web Vitals4 min readApril 15, 2026

LCP: What It Means and How to Improve It

LCP is the time until your biggest hero element appears. It's the most important Core Web Vital — and usually the easiest to fix.

Brown paper revealing message 'Do what makes you happy.'
Photo by Said on Pexels
Table of contents

Largest Contentful Paint (LCP) is one of Google's three Core Web Vitals and worth 25% of your PageSpeed performance score. It's also the single metric users notice most: it's how long until the page feels loaded.

Here's exactly what LCP measures, why it's usually slow, and the fixes that actually work.

What LCP measures

LCP records the render time of the largest visible element in the viewport. That's almost always:

  • A hero image
  • A large headline (H1)
  • A video poster image
  • A big text block

Smaller elements like the navigation, logos, and footer don't count. Off-screen elements don't count. LCP is about: what's the biggest thing the user sees, and how long until they see it?

The thresholds

LCPRating
≤ 2.5s✅ Good
2.5–4.0s⚠️ Needs improvement
> 4.0s❌ Poor

These thresholds are for 75th percentile of real users — meaning if 75% of your visitors have LCP under 2.5s, you pass.

Why your LCP is slow (5 common causes)

1. The LCP image is huge

A 2MB hero image takes seconds to download on mobile. Compress it, convert to WebP, and resize it to the exact dimensions it displays at.

2. The image is discovered too late

The browser doesn't know your hero image exists until it parses the HTML, sees a <img> tag, and starts downloading. If you're loading the image from a CSS background or via JavaScript, discovery is even later.

3. The server is slow

LCP includes Time to First Byte (TTFB). If your server takes 1.5 seconds to respond, your LCP can't be under 2.5s no matter what else you do.

4. Render-blocking CSS

If your stylesheet is huge or slow to load, the browser waits before showing anything — including your hero image.

5. Lazy-loaded LCP image

Adding loading="lazy" to your hero image will absolutely destroy your LCP. Lazy loading is for below-the-fold images only.

How to fix LCP (in order of impact)

Fix 1: Preload the LCP image

The single biggest win. Add this to your <head>:

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

This tells the browser to start fetching the image before it finishes parsing the HTML. On mobile this can shave 500–1500ms off LCP.

Fix 2: Use modern image formats

WebP is roughly 30% smaller than JPEG at the same quality. AVIF is another 20% smaller than WebP. Use them:

<picture>
  <source srcset="/hero.avif" type="image/avif">
  <source srcset="/hero.webp" type="image/webp">
  <img src="/hero.jpg" alt="..." width="1200" height="600">
</picture>

Fix 3: Size images correctly

A 4000px-wide image displayed at 800px wastes 80% of the bytes. Use srcset so mobile devices download mobile-sized versions:

<img
  src="/hero-800.webp"
  srcset="/hero-800.webp 800w, /hero-1200.webp 1200w, /hero-2000.webp 2000w"
  sizes="(max-width: 768px) 100vw, 800px"
  width="800"
  height="400"
  alt="..."
>

For more on image optimization, see how images affect website speed.

Fix 4: Add fetchpriority="high"

Even without preloading, this attribute on your LCP image hints to the browser that this resource is more important than the others:

<img src="/hero.webp" fetchpriority="high" ...>

Fix 5: Inline critical CSS

If your stylesheet is render-blocking, the browser shows nothing until it loads. Inline the styles needed for above-the-fold rendering directly in <style> tags in the <head>.

Fix 6: Improve your TTFB

If your server response is over 600ms, your LCP starts in a hole. Options:

  • Add a CDN (Cloudflare's free plan helps immediately).
  • Cache database queries.
  • Move static assets to edge storage.

See how hosting affects website performance.

Fix 7: Don't use background images for LCP

If your hero is a CSS background-image, browsers can't preload it the same way. Either use a real <img> tag or preload the URL manually.

How to find your LCP element

In Chrome DevTools:

  1. Open DevTools → Performance tab.
  2. Hit reload (with throttling on if you want a realistic test).
  3. Find the "Largest Contentful Paint" marker in the timeline.
  4. Click it — DevTools highlights the exact element on the page.

You can also check the PageSpeed Insights report or run a free audit on RateMySite — both show the LCP element.

Verify your fix

After every change, re-run a Lighthouse audit. Look for:

  • LCP under 2.5s
  • "Preload Largest Contentful Paint image" opportunity gone
  • "Properly size images" opportunity gone

If your LCP image is fully optimized and your TTFB is good, you'll easily pass.

The bottom line

LCP is the most important Core Web Vital and the easiest to improve. Preload your hero image, modernize the format, size it correctly, and your LCP will almost always drop into the green.

After that, work on reducing JavaScript for INP and setting explicit dimensions for CLS — the other two Core Web Vitals.

Frequently Asked Questions

What's a good LCP score?+

2.5 seconds or less is considered good. Between 2.5 and 4 seconds needs improvement. Over 4 seconds is poor and likely hurting both your SEO and conversions.

What element counts as the LCP element?+

Usually the largest image or text block visible in the initial viewport. On most marketing sites it's a hero image. On article pages it's often the headline or hero image. Chrome DevTools shows you exactly which element on your page.

Does preloading the LCP image always help?+

On most sites, yes. Preloading tells the browser to fetch the image with high priority before parsing the HTML. The exception is if your image is already discovered very early — measure both ways.

Rate your website for free

See how your site really performs

Run a full website health check on mobile and desktop in 30 seconds — no signup needed.

Continue reading