TapCub is live — analytics, insights and live chat, free on one platform
Glossary

What is Largest Contentful Paint (LCP)? Thresholds and how to fix it

Largest Contentful Paint is the time until the biggest image or text block in view has rendered. The thresholds, the four parts of LCP and which fix belongs to which part.

Chen Yu Reviewed by Lin Zhou Also called LCP Last updated Nov 4, 2026 Glossary

Quick answer

Largest Contentful Paint (LCP) is a Core Web Vital that measures the time from when a page starts loading until the largest image, video poster or text block in the viewport has rendered. Good is 2.5 seconds or less.

Formula: LCP = TTFB + resource load delay + resource load duration + element render delay

What is Largest Contentful Paint?

Largest Contentful Paint (LCP) is the moment the main content of a page appears: the time from the start of navigation until the largest image or text block visible in the viewport has rendered. It is one of the three Core Web Vitals.

RatingLCP
Good2.5 s or less
Needs improvement2.5–4 s
Poorover 4 s

Judge it at the 75th percentile of real visits, so three out of four loads must be good.

The four parts of LCP

Every LCP time splits into four parts, and each has its own fixes:

PartWhat it coversTypical fix
Time to first byteServer responseCaching, a CDN, faster back end
Resource load delayTime before the browser even starts fetching the LCP imagePut the image in the HTML, preload it, fetchpriority="high", do not lazy-load it
Resource load durationDownloading the imageSmaller files, modern formats (AVIF, WebP), right-sized srcset
Element render delayTime from downloaded to paintedLess render-blocking CSS and JavaScript

A sample product page

Sample data: product pages on mobile have a P75 LCP of 3.4 s (needs improvement). Broken down: 0.9 s first byte, 1.1 s load delay, 0.9 s download and 0.5 s render delay. The hero image is set by JavaScript after the page script runs, and it is lazy-loaded.

Moving the image into the HTML, removing loading="lazy" and adding fetchpriority="high" cuts the load delay to 0.2 s: 0.9 + 0.2 + 0.9 + 0.5 = 2.5 s, on the good line. Start with the largest part; compressing the image further would have saved far less.

Common mistakes

  • Optimising the wrong element. Check which element is the LCP on mobile; it is often a headline or a different image than on desktop.
  • Reading one lab run. Field P75 by page type is what counts.
  • Sliders and carousels that load the first slide with JavaScript.

LCP in TapCub

TapCub collects Web Vitals from real visits with the site script (sent once, when the first page is hidden; turn off with data-vitals="false"). In Web analytics › Monitoring › Performance, cards switch between P75, median, P95 and average, the breakdown splits by page, device, browser, country and operating system, and Slowest pages is sorted by P75 largest contentful paint. Details are in the performance docs.

Related: what is a good page load time, CLS and INP.

See also

Was this explanation clear?

We use your answers to fix and expand this page.

Chen Yu

Technical Engineer

Focuses on tracking code, SDKs, and API integrations, with practical guidance on implementation checks and troubleshooting.

FAQ

Questions people ask

Short answers to the follow-up questions that come up most.

Still have a question?

Chat with the team behind TapCub — we usually reply within a few hours on business days.

What is a good LCP?

2.5 seconds or less is good, over 4 seconds is poor, and anything in between needs improvement. Judge it at the 75th percentile of real visits, per page type and device.

What counts as the LCP element?

The largest image, image inside an SVG, video poster image, CSS background image loaded with url(), or block of text visible in the viewport.

Should I lazy-load the LCP image?

No. Lazy-loading delays the very image LCP is waiting for. Load it eagerly and give it fetchpriority="high".

Why is my lab LCP fast but field LCP slow?

A lab test uses one device and network, often with a warm cache. Real visitors include slow phones and connections; field P75 reflects them.

See this number on your own site

Add one script tag for web and apps, and the first reports fill in within minutes.

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics