What Is LCP? The One Metric That Decides Your Website Fast or Frustrating
Largest Contentful Paint (LCP) is a Core Web Vitals metric that measures how long it takes for the biggest visible piece of content on your page to show up on screen. That could be a hero image, section, a large heading, or a featured video. And if that content takes too long to load, visitors behavior go to leave the page.
Google has been using LCP as a ranking factor since 2021, and it directly affects how users perceive your website’s speed. You might have the most helpful content on the internet, but if your page takes five seconds to display its main content, people assume it’s broken. They hit the back button. As a result your bounce rate increases.
I observe the site owners spend months perfecting their content while completely ignoring the loading experience.
What Does LCP Actually Measure?
LCP tracks the render time of the largest content piece visible in your browser window (what developers call the viewport) from the moment a visitor starts loading your page. Notice I said largest content and not entire page. That distinction matters.
The browser isn’t timing your full page load. It’s pinpointing one specific thing: the biggest above the fold content block. For most websites, that’s one of these:
LCP doesn’t care about your sidebar, your footer, or anything a visitor has to scroll down to see. It only looks at what’s immediately visible. And if you resize an image using HTML or CSS, Google checks both the intrinsic size and the visible size, then reports whichever is smaller.
One thing that trips people up is that LCP is a “moving target” during loading. The browser might first identify your logo as the largest element. Then your headline loads and becomes the new candidate. Then your hero image finishes loading and takes over as the final LCP measurement. The browser keeps updating until the visitor interacts with the page by scrolling, tapping, or pressing a key.
Why LCP Matters in Core Web Vitals
Look, there are dozens of performance metrics out there. So why should you care about this one specifically?
Because LCP measures perceived load speed. Not technical load speed. It captures the exact moment your visitor thinks okay, the page is ready.
From an SEO angle, LCP is one of three Core Web Vitals that feed into Google’s page experience signal. The other two are Cumulative Layout Shift (CLS), which measures visual stability, and Interaction to Next Paint (INP), which measures responsiveness. Google replaced First Input Delay (FID) with INP in March 2024, so if you see articles still referencing FID as a current metric, that content is outdated.
And here’s where it gets real. LCP accounts for roughly 25% of your Lighthouse Performance Score. That’s the single heaviest weighted metric in the bunch. Walmart shaved one second off their LCP and saw a 2% conversion boost. Pinterest reduced load times and sign ups jumped 15%. Vodafone improved their LCP by 31% and got a measurable lift in sales.
What Is a Good LCP Score?
Google breaks LCP performance into three buckets, and the scoring is pretty straightforward:
| Good: 2.5 seconds or less | Needs Improvement: 2.5s to 4s | Poor: Over 4 seconds |
Your goal? Get 75% of your page loads into that green zone. Not 100%, because Google knows that some visitors are on terrible connections or ancient phones. The 75th percentile threshold accounts for that variation while still making sure most people have a good experience. FHSEOHub achieved the 100 score in Page speed test with our technical SEO strategies.
Now here’s something most articles won’t tell you. The 2.5 second bar was set back in 2020. Some performance experts argue it’s too lenient by today’s standards. If you really want a competitive edge, shoot for under 1.8 seconds on desktop and under 2.5 on mobile. Pages ranking in Google’s top 10 results average an LCP around 1.8 seconds.
LCP vs FCP vs INP: What Is the Difference?
People confuse these all the time. Let me break it down without the jargon.
First Contentful Paint (FCP) records when anything first appears on screen. Could be a tiny icon. Could be your navigation bar. Could be a loading spinner.
Largest Contentful Paint (LCP) records when the main content becomes visible. Visitor feel everything ok or not in first 2 seconds during the page load timings.
Interaction to Next Paint (INP) records how fast the page responds after someone clicks or taps. It’s the visitor feeling “This site reacts to my input.”
Here’s a quick comparison:
| LCP | FCP | INP | |
| What it measures | Main content visible | First pixel painted | Input responsiveness |
| Good score | Under 2.5s | Under 1.8s | Under 200ms |
| Core Web Vital? | Yes | No (diagnostic) | Yes (replaced FID) |
| User perception | “Page looks loaded” | “Something started” | “It responds to me” |
| Lighthouse weight | 25% | 10% | N/A (field only) |
Each metric captures a different phase of the user’s experience. FCP is the appetizer. LCP is the main course. INP is the service quality.
Which Page Elements Does LCP Actually Look At?
Not everything on your page counts toward Largest Contentful Paint. The browser follows a specific set of rules from the Largest Contentful Paint API specification. Only these qualify:
And the browser is smart about filtering out non content. If an image has zero opacity, covers the entire viewport like a background overlay, or is a low quality placeholder, it gets excluded from LCP calculations. The goal is to measure what users actually consider meaningful content.
Something worth knowing: about 80% of LCP measurements on the web are triggered by images. On mobile, text blocks take over more because smaller screens make images relatively smaller. So if your LCP is slow, the culprit is almost always a heavy image sitting above the fold.
The 4 Phases of LCP
Here is the thing most guides skip. LCP isn’t one big number you can fix with a single tweak. It’s actually made up of four sequential phases, and knowing which phase is your bottleneck changes your entire optimization approach.
Phase 1: Time to First Byte (TTFB)
This is how long the server takes to respond after a visitor requests your page. Slow TTFB usually means your hosting is underpowered, your database queries are dragging, or you’re missing server side caching. If TTFB alone eats up 2 seconds, hitting a 2.5 second LCP is mathematically impossible.
Phase 2: Resource Load Delay
After the browser gets your HTML, how long does it take to even discover the LCP resource? If your hero image is buried inside a JavaScript bundle that has to download and execute before the image tag appears in the DOM, you’ve got a serious resource load delay problem. Sites built with React, Angular, or Vue are notorious for this.
Phase 3: Resource Load Duration
This is pure download time. How many milliseconds does it take to pull down the actual image or video file? A 2MB uncompressed JPEG on a slow 4G connection can take over a second just to download. Image compression, modern formats like WebP and AVIF, and responsive images using the srcset attribute all attack this phase.
Phase 4: Element Render Delay
The file has downloaded. But can the browser actually paint it on screen? If render blocking CSS or JavaScript is still processing, the image just sits there waiting. Third party scripts, bloated stylesheets, and long main thread tasks are the usual suspects here.
When you check your LCP in PageSpeed Insights or Chrome DevTools, look at the percentage breakdown across these four phases. That tells you exactly where to focus your effort instead of guessing.
What are Main Causes of a Poor LCP Score?
I’ve audited a lot of websites, and the same problems show up over and over:
| Slow server response times. | Cheap shared hosting, unoptimized databases, and missing CDN coverage. Your content can’t load fast if the server takes forever to respond. |
| Render blocking resources. | Giant CSS files and JavaScript bundles that the browser has to fully download and process before painting anything. Every kilobyte of render blocking JavaScript and CSS delays your LCP. |
| Oversized images. | This is the number one offender. An uncompressed 3000px wide hero image when the visitor’s screen is only 400px wide. That’s wasted data and wasted time. |
| Client side rendering. | If your page depends on JavaScript to build the HTML and insert content, the browser has to download the framework, parse it, execute it, and then figure out what to render. Server side rendering (SSR) or static generation avoids this bottleneck entirely. |
| Lazy loading your LCP image. | Big mistake. Lazy loading tells the browser to deprioritize an image until the user scrolls near it. If your LCP candidate has loading=”lazy” on it, you’re actively sabotaging your own score. |
And one that almost nobody talks about: cookie consent banners. Some consent popups inject a massive text block late in the loading process, and that text block becomes the LCP element. Your actual content loaded fine, but the cookie banner hijacked the measurement.
How to Measure LCP
You need both lab data and field data to get the full picture. Lab data gives you reproducible tests in a controlled environment. Field data shows what real visitors experience on real devices and real connections.
For lab testing
Open Google PageSpeed Insights, paste your URL, and hit Analyze. Scroll to Diagnostics and click “Largest Contentful Paint element” to see exactly which piece of content triggered your LCP. You can also use Google Lighthouse inside Chrome DevTools by opening the Performance tab and recording a page load.
For field data
Check the Core Web Vitals report in Google Search Console. That shows you how your real visitors experience your pages across mobile and desktop. The data comes from the Chrome User Experience Report (CrUX), which is a 28 day rolling average from Chrome users who opted in to sharing performance data.
WebPageTest
it is another solid option. It lets you test from different geographic locations and connection speeds, and gives you detailed waterfall charts showing exactly what loaded when.
If you want programmatic measurement, the web vitals JavaScript library from Google lets you capture LCP in your own analytics. Or you can use the native PerformanceObserver API to log LCP candidates directly in the browser console.
Pro tip: Always check both mobile and desktop results. Your LCP element can be completely different on each device type. A giant hero image on desktop might be hidden on mobile, making a text heading the LCP instead. Mobile first indexing means your mobile LCP score carries more weight for rankings.
How to Fix and Improve Your LCP Score
Alright, here’s the practical part. I’m going to list the fixes roughly in order of impact.
1. Figure out Your LCP Element First
Don’t start optimizing blindly. Open PageSpeed Insights and identify the exact element causing your LCP. Is it an image? A heading? A video thumbnail? Each answer leads to a different fix.
2. Fix Your Images
If your LCP is an image, start here. Compress it using tools like Squoosh or TinyPNG. Convert to WebP or AVIF format for 25 to 50% smaller file sizes. Use the srcset attribute so mobile devices download a smaller version. And add width and height attributes to prevent layout shifts.
3. Preload Your LCP Resource
Add a preload tag in your document head so the browser starts downloading your LCP image immediately: <link rel=”preload” as=”image” href=”hero.webp” fetchpriority=”high”>
The fetchpriority=”high” attribute tells the browser this resource is top priority. These two lines alone can cut your LCP by several hundred milliseconds.
4. Never Lazy Load Your LCP Image
Remove loading=”lazy” from any image that appears above the fold. Reserve lazy loading for images further down the page that visitors won’t see immediately.
5. Kill Render Blocking Resources
Inline your critical CSS directly into the HTML. Defer non essential JavaScript using the defer or async attribute on your script tags. Remove unused CSS with tools like PurgeCSS. Every blocking resource you eliminate lets your LCP paint faster.
6. Speed up Your Server
Aim for a TTFB under 200 milliseconds. Use a Content Delivery Network (CDN) like Cloudflare or Fastly. Enable Brotli or Gzip compression. Implement proper browser caching with long cache headers for static assets. If you’re on WordPress, install a caching plugin like WP Rocket.
7. Preconnect to Third Party Origins
If your fonts or images come from external servers, add preconnect or dns prefetch hints so the browser starts the connection earlier: <link rel=”preconnect” href=”https://fonts.googleapis.com”>
8. Consider Server Side Rendering
Running a JavaScript heavy app with React, Vue, or Angular? Server side rendering (SSR) sends fully built HTML to the browser instead of making it construct the page from scratch. Frameworks like Next.js, Nuxt, and SvelteKit make this straightforward. The impact on LCP can be dramatic.
Quick Fix for WordPress Users
Since a huge chunk of the web runs on WordPress, this deserves its own callout. Plugins like WP Rocket, Perfmatters, and EWWW Image Optimizer can handle most LCP fixes without touching code. WP Rocket alone enables page caching, CSS and JS minification, and automatic identification of your LCP image for preloading. If you pair that with a CDN like Cloudflare APO, you’re covering 90% of the optimization work in about 15 minutes.
LCP Traps That Quietly Wreck Your Score
A few things nobody warns you about:
- Cookie consent banners can accidentally become your LCP element if they inject a large text block late in the loading process. Test your site with and without the banner active.
- Third party scripts from ad networks, analytics tools, and chat widgets often block the main thread. Load them asynchronously or defer them after your above the fold content has rendered.
- Background images used for decoration can overtake your real content as the LCP measurement. If a massive decorative image loads late and happens to be the biggest element, your LCP score tanks even though the actual user experience was fine.
So What Now?
LCP is one of those metrics where small improvements create outsized results. Shaving 500 milliseconds off your Largest Contentful Paint can visibly move your rankings and measurably improve your conversion rate. And the fixes are usually not that complicated once you know where the bottleneck sits.
FAQs
What is a bad LCP score?
Anything over 4 seconds is considered poor by Google. Scores between 2.5 and 4 seconds need improvement. You should aim for 2.5 seconds or less to pass Core Web Vitals assessment.
Does LCP directly affect Google rankings?
Yes. LCP is one of three Core Web Vitals metrics that factor into Google’s page experience ranking signal. While content relevance is still king, LCP can be the tiebreaker between two similar pages competing for the same keyword.
Can LCP be different on mobile and desktop?
Absolutely. The LCP element mostly changes between devices. A large hero image on desktop might be hidden or resized on mobile, making a text block the LCP element instead. Always test both views.
Does lazy loading hurt LCP?
Only if you lazy load the LCP element itself. You should never apply loading=”lazy” to images above the fold. Use it exclusively for content further down the page that visitors need to scroll to reach.
How should I check my LCP?
Monitor it continuously through Google Search Console’s Core Web Vitals report. Run lab tests in PageSpeed Insights after every deployment that changes above the fold content, images, or loading behavior.
Why is my LCP worse on mobile than desktop?
Mobile devices have slower processors and typically run on weaker network connections. Combine that with smaller caches and you get noticeably longer load times. Mobile optimization should always be your first priority because Google uses mobile first indexing.
Can I improve LCP without being a developer?
If you’re on WordPress, yes. Caching plugins like WP Rocket handle most of the heavy lifting. For image optimization, EWWW or ShortPixel compress and convert images automatically. You don’t need to write a single line of code.
What replaced FID in Core Web Vitals?
Google replaced First Input Delay (FID) with Interaction to Next Paint (INP) in March 2024. INP is a more complete measure of responsiveness because it considers all interactions throughout the page visit, not just the first one.