LCP in 2026: How to Keep Your Pages Under 2.5 Seconds
Published May 13, 2026 by Editorial Team

The 2026 version of LCP advice is not "find one weird trick."
The target is still the same: keep Largest Contentful Paint at 2.5 seconds or less for the 75th percentile of page visits. What has changed is the quality of the guidance. At this point, teams do not need more generic reminders to "optimize images" or "reduce JavaScript." They need to treat LCP as a budget across a small number of stages and diagnose which stage is actually late. (Optimize Largest Contentful Paint, Largest Contentful Paint (LCP), How the Core Web Vitals metrics thresholds were defined)
That framing matters because LCP is not just an image problem and not just a frontend problem. In field data, it also includes time spent before the page even starts rendering, including connection setup, redirects, and Time to First Byte. That is one reason lab runs and real-user results often disagree. (Largest Contentful Paint (LCP))
The Right Way to Think About the 2.5 Second Target
The most useful current guidance from web.dev is to break LCP into four subparts:
- Time to First Byte
- resource load delay
- resource load duration
- element render delay
web.dev even provides a rough ideal distribution for pages that need work: about 40% of the time in TTFB, less than 10% in resource load delay, about 40% in resource load duration, and less than 10% in element render delay. Those percentages are not hard rules, but they are a strong diagnostic lens. If too much time is disappearing into either delay bucket, your page is almost certainly making the browser wait unnecessarily. (Optimize Largest Contentful Paint)
That is the editorial point a more junior performance article usually misses: LCP is not one number to sand down. It is a sequence. The fix depends on which part of the sequence is wasting time.
1. Kill Resource Load Delay First
For many modern sites, the easiest way to lose LCP is simple: the browser discovers the real hero image too late.
Chrome's current LCP request discovery guidance is explicit. If the LCP is an image, the image should be discoverable from the main HTML immediately, prioritized with fetchpriority="high", and not lazy-loaded. (LCP request discovery)
That has practical consequences:
- do not make the hero image depend on client-side rendering
- do not hide the real image URL inside JavaScript data structures
- do not lazy-load an image that is likely to become the LCP element
- only preload the actual likely LCP image, not a guess
A defensible pattern looks like this:
<link
rel="preload"
as="image"
href="/images/hero-1280.avif"
fetchpriority="high"
>
<img
src="/images/hero-1280.avif"
srcset="/images/hero-640.avif 640w, /images/hero-1280.avif 1280w"
sizes="100vw"
width="1280"
height="720"
alt="Product hero"
fetchpriority="high"
>
The important part is not the syntax. It is the timing model. The browser should know about the LCP asset as early as possible and should not have to wait for hydration or a component effect to discover it. (LCP request discovery, fetchpriority HTML attribute)
2. Make TTFB Small Enough That the Rest of the Budget Is Still Possible
A page with a slow server response often has no realistic path to a good LCP.
web.dev calls this out plainly: a high TTFB can make achieving a 2.5 second LCP difficult or impossible. If the browser gets the first byte late, every downstream stage starts late too. (Optimize Largest Contentful Paint)
In practice, this usually means the first round of LCP work should focus on the HTML delivery path:
- remove redirects before the landing document
- cache HTML where the route can tolerate it
- move expensive personalization out of the first response when possible
- render the above-the-fold content on the server instead of waiting for client fetches
- serve from infrastructure close to the user population that matters
Teams often skip this because image work feels more tangible. That is a mistake. If your TTFB is already eating most of the 2.5 second budget, image tuning becomes cleanup, not rescue.
3. Shrink the Actual LCP Resource
Once the browser discovers the LCP resource on time, the next question is whether the resource itself is simply too expensive.
For image-driven pages, the obvious work still matters:
- serve the asset at the rendered size, not at a desktop-original size
- use responsive
srcsetandsizes - compress aggressively
- prefer modern formats when they materially reduce bytes
- keep the delivery path simple and predictable
What matters editorially is the tradeoff, not the slogan. A hero image can be visually strong and still be operationally disciplined. The browser does not care whether the image was approved by brand. It cares how many bytes it must fetch before the page can feel ready.
4. Stop Finishing the Download and Then Delaying the Render Anyway
One of the more frustrating LCP failures is element render delay: the asset is loaded, but the page still does not paint the LCP element promptly.
web.dev identifies this as a distinct subpart because it is common on pages that keep the main content behind CSS, fonts, JavaScript execution, or post-load UI work. A large gap between FCP and LCP often points to exactly that kind of delay. (Optimize Largest Contentful Paint)
This is where "we server-rendered it" can become a false sense of security. You can still miss LCP if the page:
- swaps in the hero after hydration
- animates or fades in the main content late
- blocks text rendering on font behavior
- injects the above-the-fold section after client data arrives
- performs heavy main-thread work before revealing the final state
For text-based LCP elements, web fonts are often the overlooked culprit. For image-based LCP elements, client-side rendering is more often the problem. Different pages miss for different reasons, but the pattern is the same: the browser had what it needed and your stack still made it wait.
5. Keep the LCP Element Boring
High-performing pages tend to have an unglamorous trait: the largest contentful element is obvious.
LCP can be a large text block, an image, a video poster, or even a CSS background image. It can also change during load as larger content appears. That is why unstable hero areas are expensive. If the top of the page rotates messages, replaces placeholders late, or reshuffles what is above the fold, you are making the LCP candidate itself less predictable. (Largest Contentful Paint (LCP))
The operational rule is straightforward:
- pick one clear hero
- reserve its dimensions
- keep it in the initial markup
- avoid above-the-fold experiments that replace it after first paint
Performance work gets much easier when the browser is not forced to keep revising its guess about what the main content actually is.
6. Treat Field Data as the Source of Truth
LCP is available in both lab and field tools, but web.dev is clear that real-user data should lead the diagnosis. PageSpeed Insights surfaces CrUX data first for a reason, and Chrome DevTools now layers field context and LCP subparts directly into its performance tooling. (Optimize Largest Contentful Paint)
If you are serious about improving LCP, collect your own page-level field data as well. Google's web-vitals package supports an attribution build specifically for diagnosing where LCP time is going in real sessions. (GoogleChrome/web-vitals)
import {onLCP} from 'web-vitals/attribution';
onLCP((metric) => {
sendToAnalytics('/rum', {
value: metric.value,
rating: metric.rating,
element: metric.attribution.element,
url: metric.attribution.url,
timeToFirstByte: metric.attribution.timeToFirstByte,
resourceLoadDelay: metric.attribution.resourceLoadDelay,
resourceLoadDuration: metric.attribution.resourceLoadDuration,
elementRenderDelay: metric.attribution.elementRenderDelay,
});
});
That kind of reporting changes the conversation. Instead of arguing about whether "the site feels fast," a team can see whether its problem is slow HTML, late image discovery, oversized media, or post-load rendering delay.
A More Useful 2026 Checklist
Before shipping a page, ask these questions in order:
- What is the actual LCP element on mobile?
- Is it present or discoverable in the initial HTML?
- If it is an image, is it eagerly loaded and explicitly prioritized?
- Is TTFB low enough to leave room for the rest of the load?
- Is the asset itself small enough for the networks your users actually have?
- After the asset loads, what still delays the final render?
- Does the 75th percentile field data stay at or below 2.5 seconds?
That sequence is more useful than a bag of isolated tips because it mirrors how LCP is really built.
Bottom Line
Keeping pages under a 2.5 second LCP in 2026 is not about chasing Lighthouse cosmetics. It is about preserving a tight critical path from navigation start to the moment the main content is visibly complete.
The teams that consistently hit the target tend to do four things well: they return HTML quickly, expose the LCP resource immediately, keep that resource efficient, and avoid burning time after the bytes have already arrived. That is not glamorous work. It is just disciplined loading architecture. (Optimize Largest Contentful Paint, LCP request discovery)