Opens in a new tab
CLIENT RESOURCES Website Support Billing

Ultimate Guide To Improving Largest Contentful Paint

Image 6b5f80d82c3c280a4bed469a20da857c
Written by: Upward
March 4, 2026

Largest Contentful Paint (LCP) measures how fast the largest visible content (like an image or text block) loads, signaling that a page is ready to use. Improving LCP boosts user experience and search rankings, as Google uses it as a ranking factor. A slow LCP can lead to higher bounce rates and lower conversions, especially on mobile, where performance tends to lag behind desktop.

Key Takeaways:

  • Good LCP: ≤ 2.5 seconds for 75% of visits (Google’s benchmark).
  • Common LCP Issues: Slow server response, large images, render-blocking CSS/JS, and inefficient resource loading.
  • Optimization Steps:
    • Reduce server response time (TTFB ≤ 800ms).
    • Preload critical resources (e.g., images, fonts).
    • Use modern image formats (WebP, AVIF) and compress assets.
    • Inline critical CSS and defer non-essential scripts.
    • Avoid lazy-loading above-the-fold content.
    • Use a CDN to deliver content faster.

Why It Matters:

  • 53% of mobile users leave if a site takes over 3 seconds to load.
  • A 1-second LCP delay can reduce conversions by 12%.
  • Sites meeting Core Web Vitals benchmarks see 70% lower bounce rates.

This guide outlines actionable steps to improve LCP, from server optimizations to image and CSS tweaks, ensuring faster, user-friendly pages.

What Affects LCP Performance

Common Elements That Affect LCP

Understanding what influences Largest Contentful Paint (LCP) performance starts with recognizing how browsers identify the LCP element. Typically, the browser scans the visible area (the viewport) for the largest element, which might include <img> tags, <image> tags in SVGs, <video> elements (either the poster image or first frame), background images defined in CSS using url(), or block-level text elements.

Each content type comes with its own challenges. For instance, text elements are quickly identified as part of the HTML document. However, their rendering may depend on loading web fonts or processing render-blocking CSS. On the other hand, images require separate network requests, which can introduce delays. Background images are particularly tricky because the browser must first download and parse the CSS file before it even knows the image exists. This extra step can significantly impact LCP times.

Take the Substack homepage as an example. In 2024, DebugBear found that a 1.95MB background image (a 4096×2377 JPG) caused an LCP delay. Since the image was referenced in a CSS file instead of an <img> tag, the browser had to process the CSS before discovering the image, creating a delay in the request chain. Ideally, on a well-optimized page, Resource Load Delay should contribute to less than 10% of the total LCP time. This highlights why efficient resource discovery is so important.

How Page Layout Affects LCP

The layout of a page can also play a major role in how quickly the browser identifies and renders the LCP element. For example, large DOM trees (with over 1,500–3,000 nodes) or client-side rendering can slow down how quickly main content appears. Single Page Applications (SPAs) are often affected by this because the browser has to download, parse, and execute JavaScript before rendering the primary content. This can result in a noticeable gap between First Contentful Paint (FCP) and LCP.

Consider the case of Atlas Marketing, which worked on a homepage featuring a massive 3,200×2,400 pixel PNG hero image weighing 8.2MB. This caused an LCP of 5.1 seconds. By resizing the image to 1920×1080 and converting it to a more efficient 180KB WebP file, they reduced the LCP to 1.8 seconds. As a result, the page’s search rankings improved from position 12 to 6 in just three weeks. Another example involved an e-commerce site displaying 80 products with a DOM size of 4,200 nodes. By implementing pagination and reducing the DOM to 1,400 nodes, rendering performance saw a noticeable boost. These examples underscore how layout decisions directly affect LCP performance.

Additionally, large stylesheets or synchronous scripts in the <head> section can delay the rendering of the LCP element. For instance, if a stylesheet loads after the LCP image, the browser waits until the CSS is processed before displaying the image. Techniques like inlining critical CSS or reducing HTML size can make a big difference – potentially cutting LCP times by over 25% compared to relying on large external code blocks.

How to fix Largest Contentful Paint (LCP) with Brian Jackson of Perfmatters

Perfmatters

How to Measure LCP

Getting an accurate read on your Largest Contentful Paint (LCP) is essential if you want to improve it. You can use both field data from CrUX (Chrome User Experience Report) and lab data from tools like Lighthouse to measure LCP effectively. This combination helps you understand how your site performs in real-world conditions as well as in controlled environments.

Measuring LCP with PageSpeed Insights

PageSpeed Insights

PageSpeed Insights (PSI) is one of the easiest tools for checking LCP because it combines field and lab data in one place. When you enter a URL, the "Discover what your real users are experiencing" section shows CrUX field data collected over the past 28 days. Meanwhile, the "Diagnose performance issues" section provides Lighthouse lab data. You can toggle between mobile and desktop views and choose between data for a specific URL or your entire site (origin-level data). If a page doesn’t have enough traffic for field data, PSI will automatically default to origin-level metrics for an approximate performance snapshot.

PSI also identifies the LCP element and breaks down its loading process into key components: Time to First Byte (TTFB), Resource Load Delay, Resource Load Duration, and Render Delay. For example, if you notice a high Resource Load Delay, it might mean the LCP element isn’t discoverable in the initial HTML. In such cases, adding a <link rel="preload"> tag could help. You can even use the "LCP" filter in the Lighthouse section to focus on opportunities and diagnostics specifically related to improving this metric. For more hands-on analysis, Chrome DevTools is another excellent option for monitoring LCP as your page loads.

Finding LCP Elements with Chrome DevTools

Chrome DevTools

Chrome DevTools offers a way to diagnose LCP in real time. Open the Performance panel, where the "Live metrics" screen provides an instant summary of LCP. Hovering over the LCP metric will highlight the corresponding element directly on your page. For a deeper dive, use the "Record and reload" function to capture the entire loading sequence. The resulting trace includes an "LCP" marker in the Timings track – clicking it will reveal detailed information about the LCP element.

The Insights sidebar in DevTools breaks down the LCP process, helping you pinpoint issues like request delays. Once you’ve identified the LCP element, you can match its URL in the Network track to see exactly when it started loading compared to other assets. To better simulate real-world conditions, adjust the Environment settings to throttle CPU and network speeds, mimicking 3G or 4G connections. This method allows you to capture multiple LCP entries as the browser updates the main element during the loading process.

Proven Methods to Improve LCP

LCP Optimization Framework: 4-Phase Performance Improvement Process

LCP Optimization Framework: 4-Phase Performance Improvement Process

Improving Largest Contentful Paint (LCP) requires addressing its key components: Time to First Byte (TTFB), Resource Load Delay, Resource Load Duration, and Element Render Delay. Each plays a role in achieving the goal of 2.5 seconds or less.

Reducing Server Response Time

Your server’s response time lays the groundwork for all performance metrics. A slow TTFB can derail your chance of hitting the LCP target. Ideally, TTFB should account for about 40% of the total LCP time on a well-optimized page. For WordPress sites, aim for 100–200ms locally and 200–500ms internationally. Google Lighthouse flags TTFB exceeding 600ms as problematic.

To improve TTFB, implement multi-level caching. Server-level page caching (or caching via plugins) stores entire HTML pages, while edge caching delivers content from locations closer to users. For example, Cloudflare‘s Automatic Platform Optimization (APO) caches whole WordPress pages globally for just $5/month, significantly cutting LCP times. Without edge caching, LCP times can be up to 140% slower. For database-heavy sites, tools like Redis or Memcached can reduce query times dramatically.

Upgrading your hosting plan can also make a difference. Moving from shared hosting to managed or dedicated hosting provides more CPU and memory resources, directly impacting LCP. If your site runs PHP, switching to PHP 8.3 can boost performance by about 10% compared to PHP 8.1. Additionally, using a high-performance DNS provider reduces the time spent on initial lookups.

Another technique to consider is HTTP 103 Early Hints, which allows servers to send preliminary instructions to browsers while the server processes other tasks. This approach lets critical assets start loading sooner. Cloudflare reports a 30% LCP improvement with Early Hints, compared to a 45% slower load time for LCP images without it. The adoption of the fetchpriority attribute has also surged, from 0.03% in 2022 to 15% in 2024.

Once server response time is optimized, the next step is to streamline resource loading.

Optimizing Resource Loading

Efficient resource loading minimizes Resource Load Delay and Element Render Delay, both of which are critical for LCP. Studies show that sites with poor LCP scores spend an average of 1.3 seconds on resource load delay, wasting precious time before downloading the LCP resource.

"The median site with poor LCP spends 1.3 seconds on resource load delay – time wasted before even starting to download the LCP image."

  • Harlan Wilton

To address this, preload the LCP resource using a <link rel="preload"> tag with fetchpriority="high" in the document’s <head>. This ensures the browser immediately prioritizes the LCP element, such as an image or font. Additionally, include the LCP element in the initial HTML rather than hiding it behind external CSS or JavaScript. This avoids unnecessary delays caused by request chains.

Inline critical CSS – the styles needed to render above-the-fold content – directly into the <head> of your HTML. This allows the browser to begin rendering the page without waiting for external stylesheets. Removing unused CSS can cut LCP by nearly 20%. For JavaScript, use defer or async attributes to prevent HTML parsing from being blocked, and delay non-essential scripts until after user interaction.

Avoid lazy loading for LCP images, as this postpones their download until after layout calculations. Instead, set loading="eager" for hero images to ensure they are prioritized. Minify CSS and JavaScript files, and use modern compression methods like Brotli to reduce network payloads.

LCP Sub-Part Target % of Total LCP Primary Optimization Focus
Time to First Byte (TTFB) ~40% Server response, CDN, Caching
Resource Load Delay <10% Preloading, Fetch Priority, Resource Discovery
Resource Load Duration ~40% Compression, Modern Formats, CDN
Element Render Delay <10% Eliminating Render-Blocking CSS/JS

With resource loading optimized, it’s time to focus on the most common LCP element for mobile pages: images.

Image Optimization Best Practices

For about 73% of mobile pages, the LCP element is an image. Optimizing images can significantly improve LCP performance. Start by adopting modern image formats like WebP or AVIF instead of JPEG or PNG. WebP files are typically 25–35% smaller than JPEGs, while AVIF offers reductions of up to 50%. WebP is supported by 95% of browsers, and AVIF by about 92%.

Use responsive images with srcset and sizes attributes to deliver appropriately sized images based on the user’s device and viewport. When preloading responsive images, include imagesrcset and imagesizes attributes in the <link> tag to prevent redundant downloads. Setting explicit width and height attributes for images reserves layout space, reducing layout shifts.

Self-host your LCP images instead of relying on third-party domains. This eliminates connection penalties like DNS, TCP, and TLS overheads. Avoid animations or fade-in effects on LCP images, as these delay when the LCP metric is recorded. If using a CMS, check for JavaScript tasks that block the main thread and delay image rendering, even if the image has already downloaded.

Image Format Compression Benefit Best Use Case
AVIF ~50% smaller than JPEG High-quality photos with modern browser support
WebP 25–35% smaller than JPEG Universal modern standard for web images
JPEG Baseline Fallback for older browsers
PNG Lossless Graphics requiring transparency

Finally, geographic distribution plays a critical role in reducing load duration.

Using a Content Delivery Network (CDN)

A Content Delivery Network (CDN) minimizes latency by serving content from servers closer to users, directly improving Resource Load Duration, which should ideally account for around 40% of total LCP time. For sites targeting users across multiple regions, a CDN is essential. Without edge caching, LCP times can be up to 140% slower.

CDNs cache static assets like images, CSS, and JavaScript – and sometimes entire HTML pages – on edge servers worldwide. This means user requests are routed to the nearest server, cutting down on TTFB and Resource Load Duration. Modern CDNs, such as Cloudflare, support HTTP 103 Early Hints, enabling browsers to start loading assets while servers process requests. This can lead to a 30% improvement in LCP.

For WordPress users, Cloudflare’s Automatic Platform Optimization (APO) offers a cost-effective solution at $5/month, caching pages on global edge servers for faster delivery.

Advanced LCP Optimization Techniques

Once you’ve nailed the basics, it’s time to tackle render-blocking resources. Optimizing CSS and JavaScript that delay Largest Contentful Paint (LCP) is essential to hit the 2.5-second target. CSS files in the <head> block rendering until the CSS Object Model (CSSOM) is built. This delay impacts Element Render Delay, which should make up less than 10% of your total LCP time.

To get started, use diagnostic tools to identify unnecessary CSS. The Chrome DevTools Coverage tab helps you spot unused code: green bars highlight critical styles for the initial paint, while red bars show non-essential ones. Extract only the styles needed for above-the-fold content and inline them in your HTML <head>. Keep this critical CSS under 14 KB (compressed) to fit within the initial TCP congestion window.

For non-critical CSS, use the media="print" swap method instead of rel="preload". For example:
<link rel="stylesheet" href="style.css" media="print" onload="this.media='all'">
This approach prevents rendering delays while loading styles asynchronously. Similarly, defer non-essential JavaScript to download in parallel and execute after HTML parsing. For large below-the-fold elements, like comment sections, the content-visibility: auto property can reduce rendering time by up to 7x.

Eliminating Render-Blocking Resources

Building on critical CSS inlining, you also need to address bottlenecks caused by render-blocking files. The LCP element won’t render until the CSSOM is built and the main thread is free from script execution. If left unchecked, this bottleneck could consume your entire LCP budget. Instead of relying on rel="preload" for asynchronous CSS, inline critical styles directly.

"Every single CSS file referenced in your <head> is render-blocking by default. The browser has to download, parse, and build the entire CSS Object Model (CSSOM) before it paints a single pixel."

  • Web Perf Clinic

Inlining critical CSS directly into your HTML ensures the browser can render the LCP element after just one network round trip. Use automated tools to extract above-the-fold styles – manual extraction is tedious and prone to errors. Many modern CSS frameworks, like Tailwind CSS v4, now include built-in utility purging, eliminating the need for manual PurgeCSS setups.

For JavaScript, use the defer attribute for non-essential scripts. This allows them to download in parallel without blocking HTML parsing. Keep your total DOM nodes under 1,500 to minimize the CPU cost of layout and paint operations. The goal is to free up the main thread so the LCP element can render as soon as its resource downloads.

Metric Target Budget
Critical CSS (Compressed) < 14 KB
Total CSS Transferred < 100 KB
Unused CSS Coverage < 30%
LCP (Mobile, 4G) ≤ 2.5s

Optimizing Fonts for Faster Loading

Fonts are another common culprit behind LCP delays, especially when they’re part of the LCP element or block text rendering in hero sections. WOFF2 is the current standard, offering 30% better compression compared to WOFF, thanks to the Brotli algorithm. Self-hosting fonts can also save 100–200ms by eliminating third-party connection overheads (DNS, TCP, TLS).

To ensure text remains visible while fonts load, use font-display: swap in your @font-face declarations. For even better Core Web Vitals scores, consider font-display: optional, which uses the web font only if it loads within roughly 100ms. Preload your top 1-2 critical fonts with:
<link rel="preload" as="font" crossorigin>
This starts downloads 200–800ms earlier. Remember, the crossorigin attribute is required even for same-origin fonts; skipping it can cause the browser to download the font twice.

Avoid loading unnecessary font weights – stick to just Regular (400) and Bold (700). Extra weights like 100, 200, or 900 add bloat without practical benefits. Variable fonts, which combine multiple weights and styles in a single file, can be a good alternative, though their initial file size is larger. Use tools like Google Webfonts Helper to download minimal character sets, cutting font file sizes by up to 76%.

"In fact, we think it is also time to proclaim: Use only WOFF2 and forget about everything else."

  • Bram Stein, 2022 Web Almanac

For icons, replace font-based solutions like Font Awesome with individual SVGs to reduce payload size. For body text, consider using system-ui to avoid delays entirely while maintaining a consistent, native appearance across platforms.

Setting Performance Budgets

Performance budgets are essential to prevent LCP regressions caused by new features, larger images, or additional third-party scripts. Without these limits, LCP can degrade as new functionality is added without considering performance. Over 40% of websites currently fail to meet Google’s LCP threshold, which accounts for 25% of the total Lighthouse Performance score.

Set clear thresholds for timing metrics and resource sizes. Aim for a "Good" LCP budget of 2.5 seconds or less on mobile, as Google prioritizes mobile-first indexing. To pass the Core Web Vitals assessment, 75% of real-user page loads must meet this threshold. Create resource-specific budgets to support this goal: for example, keep the LCP image under 100 KB on mobile and limit render-blocking CSS to 14 KB.

Integrate performance budget checks into your CI/CD pipeline using tools like Lighthouse CI with GitHub Actions. A budget.json file can automatically fail builds that exceed your defined LCP targets. Use both lab data (Lighthouse) for immediate feedback during development and field data (Chrome User Experience Report) to monitor real-world performance over a 28-day rolling window.

Advanced teams often break down their LCP budget into subparts: TTFB (Time to First Byte) should take around 40%, Resource Load Delay less than 10%, Resource Load Duration about 40%, and Element Render Delay under 10%. This detailed approach pinpoints bottlenecks, ensuring teams focus on the right areas for optimization. Combined with font tuning and performance budgets, these strategies provide a solid framework for achieving top-tier LCP scores.

Conclusion: Next Steps for LCP Optimization

Summary of LCP Optimization Methods

Improving Largest Contentful Paint (LCP) requires a detailed and step-by-step approach to tackle every stage of the loading process. Start by identifying the LCP element – often an image, as this accounts for 73% of mobile pages – using tools like PageSpeed Insights or Chrome DevTools. From there, focus on reducing the Time to First Byte (TTFB) to under 800 ms, as this can impact up to 40% of the LCP time. Other key actions include minimizing resource loading delays (e.g., using fetchpriority="high"), compressing images to under 100 KB for mobile, and inlining critical CSS to avoid rendering delays.

A few common mistakes can derail your efforts. For instance, avoid lazy-loading above-the-fold content, as it delays the visibility of key elements. Similarly, overloading resources with excessive preloading can backfire, adding nearly 1 second to load times.

Case studies highlight just how effective these strategies can be. For example:

  • Tokopedia cut LCP by 55% (from 3.78 seconds to 1.72 seconds) and saw a 23% boost in session duration.
  • Vodafone improved LCP by 31%, leading to an 8% increase in total sales.
  • Agrofy reduced LCP by 70%, slashing load abandonment rates by 76%.

"LCP is the hardest Core Web Vital to pass. Only 59% of mobile pages achieve good LCP compared to 74% for INP and 72% for CLS."

To maintain these improvements, enforce performance budgets in your CI/CD pipeline, aim for an LCP of 2.5 seconds or less on at least 75% of visits, and monitor real-user metrics through tools like CrUX. These practices not only enhance LCP but also improve overall user experience and boost search rankings.

How Upward Engine Can Help

Upward Engine

While technical fixes are essential, professional support can make the process smoother and more efficient. Optimizing LCP isn’t a one-and-done task – it requires continuous monitoring, technical expertise, and collaboration across hosting, design, and development teams. That’s where Upward Engine steps in.

Our services are designed to keep your LCP performance on track. From WordPress hosting with server-level caching to custom web designs that prioritize critical content, we ensure your site delivers fast, seamless experiences. For example, reducing delays by just 100 ms can increase sales by 1%.

We also provide ongoing SEO monitoring using tools like Google Search Console and Real User Monitoring (RUM) to identify and fix issues before they affect your rankings. Our advanced frontend techniques – like setting fetchpriority="high", using responsive srcset images, and delivering next-gen formats like AVIF and WebP – further reduce load times. With LCP accounting for 25% of the Lighthouse Performance score, these optimizations directly translate into measurable business results.

Whether you need a full site audit, targeted fixes, or continuous performance management, Upward Engine can create a strategy tailored to your goals. Visit upwardengine.com to see how we’ve helped clients achieve faster load times, higher rankings, and noticeable revenue growth through Core Web Vitals optimization.

FAQs

Which page element is actually my LCP?

Your Largest Contentful Paint (LCP) refers to the biggest visible element – like an image, text block, or video – displayed in the viewport during page load. Typical examples include a hero image, a bold heading, or a video poster, depending on which element takes the most time to fully render.

Should I trust Lighthouse or real-user LCP data?

Field data for Largest Contentful Paint (LCP) is far more dependable than the lab measurements provided by Lighthouse. Why? Because field data captures real user experiences – it accounts for differences in network speeds, devices, and how users interact with a site.

Since Google bases its Core Web Vitals rankings on field data, this makes it the go-to source for judging and improving performance. While Lighthouse offers controlled lab results, these tests often fail to reflect actual browsing conditions, making them less useful for understanding how your site performs in the hands of real users.

What should I fix first if my LCP is slow?

To tackle a slow LCP (Largest Contentful Paint), start by pinpointing common bottlenecks such as slow server response times, unoptimized images, or resources that block rendering. Address these issues by:

  • Reducing server response time (TTFB): Ensure your server processes requests and delivers content as quickly as possible.
  • Optimizing images: Compress images or switch to modern formats like WebP for faster loading without sacrificing quality.
  • Eliminating render-blocking resources: Minimize or defer CSS and JavaScript files that delay rendering.

By focusing on these areas, you can speed up the loading of the largest visible element, making a noticeable difference in LCP performance.

Related Blog Posts

Interested In Boosting Your Rankings?

Fill Out The Form Below To Get Started Today

Related Articles