Largest Contentful Paint (LCP) measures the time from when a page begins loading to when the largest visible content element — typically a hero image or heading — is fully rendered in the viewport.
Quick Answer
Largest Contentful Paint (LCP) measures the time from when a page begins loading to when the largest visible content element — typically a hero image or heading — is fully rendered in the viewport.
TTFB is the upstream bottleneck for LCP — improving server response time with caching and CDN delivery is often the highest-leverage LCP fix.
Setting fetchpriority="high" on the LCP image element forces the browser to preload it before lower-priority resources, directly improving LCP time.
Inlining critical CSS and deferring non-critical stylesheets eliminates render-blocking delay that commonly pushes LCP beyond the 2.5-second threshold.
Key Takeaways
TTFB is the upstream bottleneck for LCP — improving server response time with caching and CDN delivery is often the highest-leverage LCP fix.
Setting fetchpriority="high" on the LCP image element forces the browser to preload it before lower-priority resources, directly improving LCP time.
Inlining critical CSS and deferring non-critical stylesheets eliminates render-blocking delay that commonly pushes LCP beyond the 2.5-second threshold.
How Largest Contentful Paint Works
The LCP element is determined dynamically by the browser as the largest image or text block visible within the viewport at the time of measurement. Common LCP elements include hero images, large above-the-fold photos, video poster images, and large block-level text elements like H1 headings. The identity of the LCP element matters for debugging: if the LCP is an image, optimization efforts focus on image delivery; if it is a text block, render-blocking CSS and fonts become the priority.
Why Largest Contentful Paint Matters for B2B Marketing
Time to First Byte (TTFB) is the upstream factor that most directly limits LCP improvement. Every millisecond of server response delay adds to the LCP time because the browser cannot begin rendering content until it has received the initial HTML response. Improving TTFB through server-side caching, edge delivery networks, and database query optimization is often the highest-leverage LCP improvement available, particularly for server-rendered CMS sites where uncached page generation times can exceed one second.
Largest Contentful Paint: Best Practices & Strategic Application
Render-blocking resources — CSS and JavaScript files loaded in the document head that must be fully processed before the browser can render any content — are a common LCP culprit. Inlining critical CSS (the styles needed to render above-the-fold content) and deferring non-critical CSS and JavaScript to load after the LCP element has been painted eliminates render-blocking delay. This technique requires identifying which styles are needed for the first viewport render and separating them from the full stylesheet.
Agency Perspective: Largest Contentful Paint in Practice
Image-based LCP elements benefit from several specific optimizations. Using next-generation formats (WebP or AVIF) reduces file size by 25-50% versus JPEG at equivalent visual quality. Setting fetchpriority="high" on the LCP image element signals the browser to preload it at the highest priority, preventing it from competing with lower-priority resources. Using srcset and sizes attributes ensures the correct image resolution is served to each device without delivering oversized images to mobile users.
Frequently Asked Questions: Largest Contentful Paint
Largest Contentful Paint (LCP) measures the time from when a page begins loading to when the largest visible content element — typically a hero image or heading — is fully rendered in the viewport.
The most common LCP causes are slow server response times (high TTFB), render-blocking CSS or JavaScript in the document head, unoptimized hero images without compression or modern formats, LCP images loaded lazily when they should be eagerly loaded, and no preload hint for the LCP resource. Running PageSpeed Insights on your page and examining the "Opportunities" and "Diagnostics" sections will identify which specific issues are contributing most to your LCP delay, ranked by estimated impact.
Yes, lazy loading the LCP element is a common mistake that significantly worsens LCP scores. The loading="lazy" attribute instructs the browser to delay loading an image until it is near the viewport, which is appropriate for below-the-fold images but counterproductive for the LCP element, which is by definition in the initial viewport. Always ensure your hero image and other above-the-fold images use loading="eager" or omit the loading attribute entirely, reserving lazy loading for images that appear lower on the page.
Open Chrome DevTools and go to the Performance panel, record a page load, and look at the "Timings" section where LCP is marked. Clicking the LCP marker reveals which element was identified as the LCP at that point in time. Alternatively, the PageSpeed Insights report identifies the LCP element by type in the Diagnostics section. The Web Vitals Chrome extension also highlights the LCP element on the live page with a colored overlay, making it easy to identify without diving into DevTools.
MV3 Marketing helps B2B companies apply these strategies to drive measurable pipeline growth. Our team executes our services for technology, SaaS, and professional services companies.
ID used to identify users for 24 hours after last activity
24 hours
_gat
Used to monitor number of Google Analytics server requests when using Google Tag Manager
1 minute
_gac_
Contains information related to marketing campaigns of the user. These are shared with Google AdWords / Google Ads when the Google Ads and Google Analytics accounts are linked together.
90 days
__utma
ID used to identify users and sessions
2 years after last activity
__utmt
Used to monitor number of Google Analytics server requests
10 minutes
__utmb
Used to distinguish new sessions and visits. This cookie is set when the GA.js javascript library is loaded and there is no existing __utmb cookie. The cookie is updated every time data is sent to the Google Analytics server.
30 minutes after last activity
__utmc
Used only with old Urchin versions of Google Analytics and not with GA.js. Was used to distinguish between new sessions and visits at the end of a session.
End of session (browser)
__utmz
Contains information about the traffic source or campaign that directed user to the website. The cookie is set when the GA.js javascript is loaded and updated when data is sent to the Google Anaytics server
6 months after last activity
__utmv
Contains custom information set by the web developer via the _setCustomVar method in Google Analytics. This cookie is updated every time new data is sent to the Google Analytics server.
2 years after last activity
__utmx
Used to determine whether a user is included in an A / B or Multivariate test.
18 months
_ga
ID used to identify users
2 years
_gali
Used by Google Analytics to determine which links on a page are being clicked