LCP Finder
LCP Element Detector · Phase Analyzer · Optimization Guide

Detect the Largest Contentful Paint element using the browser Performance API, analyze the four LCP phases, and get actionable optimization recommendations for each phase.

Live element detection Phase breakdown Fix recommendations Core Web Vitals

LCP Tools

Two tools: detect the LCP element on this page live using the Performance API, or analyze LCP phases from your known total LCP time.

Observing LCP element on this page...
The PerformanceObserver API watches for largest-contentful-paint events in real time. The result updates as the page loads. Scroll down to trigger lazy-loaded images, then click Capture Result to freeze the final LCP.

How Live LCP Detection Works

This tool uses the PerformanceObserver API with entry type largest-contentful-paint. Every time a new element becomes the largest visible element in the viewport, the browser reports it via this API. The final LCP is the last entry reported before user interaction or page load completes.

Note: LCP is only measured before the user first interacts with the page. After a click or keypress, no more LCP entries are reported — the last entry before interaction is the definitive LCP.

JavaScript snippet — detect LCP on any page
new PerformanceObserver(function(list) {
  list.getEntries().forEach(function(e) {
    console.log('LCP element:', e.element);
    console.log('LCP time:', e.startTime, 'ms');
    console.log('LCP size:', e.size, 'px²');
  });
}).observe({type: 'largest-contentful-paint', buffered: true});

Enter your LCP timing data to visualize the 4 phases and get phase-specific optimization recommendations. Get these values from Chrome DevTools → Performance → LCP details.

Target: <2500ms (Good), <4000ms (Needs Improvement)
Time to First Byte from Navigation start
Time between TTFB and LCP resource fetch start
Time to download the LCP image/resource
Time between download complete and first render (auto-calculated if 0)

LCP Phase Breakdown

LCP is the sum of four sequential phases. Optimizing the largest phase has the biggest impact on your total LCP score.

PhaseMeasured asGoodBudgetPrimary fix
TTFBresponseStart - requestStart (Navigation Timing)<800ms≤40% of LCPCDN, server caching, faster hosting
Load DelayLCP resource fetchStart - responseStart<200ms≤10% of LCPPreload LCP image, avoid lazy-loading LCP
Load DurationLCP resource responseEnd - fetchStart<500ms≤25% of LCPWebP/AVIF, compress, CDN, srcset
Render DelayLCP startTime - LCP resource responseEnd<200ms≤25% of LCPNo render-blocking JS, CSS, inline critical CSS
Total LCPSum of all 4 phases<2.5sTargetNeeds Improvement: 2.5s–4s

What Counts as an LCP Element?

The browser considers specific element types when determining the Largest Contentful Paint candidate.

Eligible LCP element types

Images: <img> elements (including those inside <picture>), CSS background images set via url(), poster images on <video> elements. The element must be visible — not hidden with opacity:0, display:none, or outside the viewport.

Text: Block-level text elements — <p>, headings (<h1><h6>), <div> containing text. The "size" of a text LCP candidate is the area of text visible in the viewport, not the full element height.

What does NOT count as LCP

<svg> elements, <canvas>, <video> (only the poster image counts), elements with opacity: 0, elements completely outside the viewport, and inline SVG images. LCP only measures content in the initial viewport (above the fold) — scrolling down does not retroactively change LCP.

The LCP candidate changes during page load — early in loading, a small image might be LCP, but as a larger hero image loads, the LCP element updates. The final LCP is what matters for the metric.

How to Optimize LCP

Optimization strategies for each LCP phase, ordered by impact.

Reduce TTFB

Use a CDN (Content Delivery Network) to serve HTML from edge nodes close to users. Enable server-side page caching (Redis, Varnish, or static HTML generation). Use HTTP/2 or HTTP/3. Enable Brotli or gzip compression on HTML. Optimize database queries. Consider edge-side rendering or static generation (SSG).

Eliminate Load Delay

Add <link rel="preload" as="image"> for the LCP image in the <head>. Never lazy-load the LCP image — remove loading="lazy" from it. For background images, use <link rel="preload"> since CSS background images are not discovered until CSS is parsed. Avoid server-side rendering delays that push image tags late in the HTML.

Reduce Load Duration

Convert hero images to WebP (30-35% smaller) or AVIF (50% smaller vs JPEG). Compress images aggressively — hero images rarely need to be over 100-150KB. Serve images from a CDN close to users. Use srcset and sizes to serve appropriately sized images per device. Consider image optimization services (Cloudinary, imgix, Cloudflare Images).

Eliminate Render Delay

Remove render-blocking JavaScript from the <head> — use defer or async. Inline critical CSS for above-the-fold content. Remove or defer large CSS files. Ensure the LCP image is not hidden by JavaScript that runs after load. Check that there's no opacity: 0 animation waiting on JS initialization. Use Chrome DevTools Performance tab to trace what runs before LCP renders.

Core Web Vitals Tools

LCP Finder – FAQ

What is Largest Contentful Paint (LCP)?+
Largest Contentful Paint (LCP) measures when the largest visible content element in the viewport finishes loading and rendering. It's one of Google's three Core Web Vitals metrics. Good LCP is under 2.5 seconds, needs improvement is 2.5-4 seconds, poor is above 4 seconds. LCP is typically a hero image, headline text, or large text block above the fold. Google uses LCP as a direct search ranking signal via the page experience algorithm.
What are the 4 phases of LCP?+
LCP = TTFB + Load Delay + Load Duration + Render Delay. TTFB: time waiting for the server to respond. Load Delay: time between TTFB and the browser discovering and starting to fetch the LCP resource. Load Duration: time to actually download the LCP image or resource. Render Delay: time between resource download complete and the element rendering on screen. Each phase can be optimized independently — use the Phase Analyzer tab above to identify which phase is your bottleneck.
How do I find my LCP element?+
Three methods: (1) This tool's Live Detector tab — observes LCP events via the Performance API and shows you the element directly. (2) Chrome DevTools → Performance tab → record a page load → look for the LCP badge in the timeline → click it to see the element highlighted in the DOM. (3) Chrome DevTools → Lighthouse tab → run an audit → the LCP element is highlighted in the screenshot. Once you know your LCP element, focus optimization efforts on loading it faster.
Why is my LCP a text element instead of an image?+
If your page's largest above-the-fold element is a heading or text block, text becomes the LCP. This is common on text-heavy pages, blogs, or pages where images load after text. Text-based LCP is often faster than image-based LCP since text renders as soon as the HTML and CSS load, without an additional image download. If you have a large heading as your LCP, focus on reducing TTFB and eliminating render-blocking resources rather than image optimization.
Does preloading images improve LCP?+
Yes — preloading the LCP image is one of the highest-impact optimizations available. Add <link rel="preload" as="image" href="/hero.webp"> in the <head> before any render-blocking resources. This tells the browser to fetch the LCP image at the highest priority immediately, before it discovers it in the HTML. Without preload, the browser only discovers the image after parsing HTML, which creates Load Delay. For background images in CSS, preloading is even more critical since they're not visible in the HTML at all.