State of Largest Contentful Paint
Most sites pass LCP. When they fail, look at the server and late discovery before you touch the image format.
86.0% of sites pass LCP. The typical site sits at 1.4s. The worst 10% are above 2.8s.
Field LCP from Chrome, joined to a technique crawl of the same origins. Every rate and ranking below is computed from this edition. Nothing here is a controlled experiment.
Cohorts, not A/B tests. Sites that adopt a technique are not randomly assigned. Read the gaps as associations, then verify on your own traffic.
LCP distribution and percentiles
How CrUX LCP is spread across desktop sites, from the fastest to the slowest.
Most desktop sites pass LCP. 86.0% sit at or under 2.5s. The typical site is at 1.4s, and 75% of sites stay under 2.0s. Only 14.0% fail LCP. The slowest 10% are above 2.8s, and the slowest 1% are above 5.4s.
Desktop sites by CrUX LCP
Explore the sub-phases of LCP
LCP is four sub-phases: TTFB, load delay, load time, and render delay.
LCP breaks into four sub-phases. On the typical site they add up to 1.3s, still under the 2.5s good bar.
TTFB is the longest at 647ms. That is almost half the path (48.6%). Load delay is second at 318ms (discovery of the hero). Render delay is 224ms. Download (load time) is the short one at 142ms.
TTFB is also the most interesting. It tracks CrUX LCP hardest (corr +0.64). When the server stretches, pass rate falls. The 50% cliff sits near 1.1s of TTFB. Load delay is next (+0.42). That is late discovery, not a heavy image file. Across sites, the image download is rarely the whole problem.
LCP sub-phases on the typical site
Sub-phase times and share
Lab medians on the LCP path. Corr. vs CrUX LCP. Open a phase for the pass-rate cliff.
| Phase | Median | Share | P90 | Corr. vs LCP | Cliff |
|---|---|---|---|---|---|
| TTFB (server) | 647ms | 48.6% | 2.0s | +0.64 | — |
| Load delay (discovery) | 318ms | 23.9% | 928ms | +0.42 | — |
| Load time (download) | 142ms | 10.7% | 358ms | +0.19 | |
| Render delay | 224ms | 16.8% | 569ms | +0.24 |
CrUX LCP pass rate vs Load time
50% @ 1.1sCrUX LCP pass rate vs Load time
LCP rating by Load time band
CrUX LCP pass rate vs Render delay
50% @ 1.6sCrUX LCP pass rate vs Render delay
LCP rating by Render delay band
How the browser finds the hero
Late discovery shows up as load delay. Background images and script-injected heroes are the common paths.
Discovery path
| Variant | Sites | Share | Pass LCP | p75 |
|---|---|---|---|---|
| Link header | 370 | 0.2% | 90% | 1.0s |
| HTML | 122,164 | 69.2% | 87% | 1.3s |
| Preload | 4,020 | 2.3% | 85% | 1.5s |
| CSS | 48,623 | 27.5% | 83% | 1.5s |
| JavaScript | 1,353 | 0.8% | 77% | 1.7s |
LCP element type
| Variant | Sites | Share | Pass LCP | p75 |
|---|---|---|---|---|
| Image | 74,505 | 42.2% | 88% | 1.4s |
| Video | 4,268 | 2.4% | 88% | 1.4s |
| Text | 46,425 | 26.3% | 85% | 1.3s |
| Background image | 51,352 | 29.1% | 83% | 1.5s |
Discovery path: Link header at 90%, JavaScript at 77% (12 points). LCP element type: Image at 88%, Background image at 83% (5 points).
CMS: pass rate and phase anatomy
A high pass rate can hide a different budget. Some platforms pay the server. Others pay discovery after a fast first byte.
CMS field LCP and phase medians
| CMS | Sites | Pass | p75 | TTFB | Load delay | Load time | Render delay | Total |
|---|---|---|---|---|---|---|---|---|
| Shopify | 7,616 | 97% | 1.6s | 390ms | 592ms | 208ms | 298ms | 1.5s |
| Squarespace | 2,029 | 94% | 1.9s | 422ms | 438ms | 188ms | 285ms | 1.3s |
| Drupal | 3,046 | 93% | 1.6s | 568ms | 294ms | 130ms | 211ms | 1.2s |
| Wix | 5,212 | 93% | 1.6s | 425ms | 452ms | 135ms | 151ms | 1.2s |
| Joomla | 2,329 | 92% | 1.8s | 728ms | 313ms | 112ms | 221ms | 1.4s |
| Adobe Commerce | 988 | 83% | 2.2s | 1.0s | 234ms | 84ms | 208ms | 1.6s |
| WordPress | 58,969 | 76% | 2.5s | 1.1s | 341ms | 166ms | 235ms | 1.9s |
Same stacks as bars
Shopify leads at 97% good LCP. WordPress sits at 76%. Server share of the phase budget runs from 26% on Shopify to 66% on Adobe Commerce/Magento. Same metric, different anatomy.
Which techniques actually separate pass from fail
Every row is the same fleet, split by a technique signal. Gap is best minus worst variant with at least 300 sites. Five points or more is a separator this edition. Under five points, the signal is real in labs and still weak as a fleet-level LCP story.
This edition the separators are Discovery path, Image format, Responsive markup and Element type. Ranked by gap: Discovery path (+12 pp), Image format (+7 pp), Responsive markup (+6 pp) and Element type (+5 pp).
Under the 5-point line: loading attribute on the LCP, Priority hint on the LCP and 1P vs 3P LCP origin. Fix them when you see them on a real page. Do not expect them to rewrite the fleet LCP story.
Scoreboard: best vs worst cohort on field LCP
Only variants with at least 300 sites. Gap under 5 points is marked weak for this edition.
| Signal | Best cohort | Worst cohort | Gap | Role |
|---|---|---|---|---|
| Discovery path | Link header → 90% | JavaScript → 77% | +12 pp | Separator |
| Image format | GIF → 90% | SVG → 83% | +7 pp | Separator |
| Responsive markup | picture element → 91% | No responsive markup → 85% | +6 pp | Separator |
| Element type | Image → 88% | Background image → 83% | +5 pp | Separator |
| loading attribute on the LCP | eager → 90% | auto (default) → 87% | +3 pp | Weak |
| Priority hint on the LCP | preconnect only → 87% | Preload → 85% | +2 pp | Weak |
| 1P vs 3P LCP origin | First party → 86% | Third party → 86% | +1 pp | Weak |
Separators this edition
Discovery path +12 pp
Link header passes on 90% of sites (p75 1.0s). JavaScript sits at 77% (p75 1.7s). Gap: 12 points.
Discovery path — every solid cohort
| Variant | Sites | Share of signal | Pass LCP | p75 LCP |
|---|---|---|---|---|
| Link header | 370 | 0.2% | 90% | 1.0s |
| HTML (parser) | 122,164 | 69.2% | 87% | 1.3s |
| Preload | 4,020 | 2.3% | 85% | 1.5s |
| CSS | 48,623 | 27.5% | 83% | 1.5s |
| JavaScript | 1,353 | 0.8% | 77% | 1.7s |
Image format +7 pp
GIF passes on 90% of sites (p75 1.3s). SVG sits at 83% (p75 1.4s). Gap: 7 points.
Image format — every solid cohort
| Variant | Sites | Share of signal | Pass LCP | p75 LCP |
|---|---|---|---|---|
| GIF | 651 | 0.6% | 90% | 1.3s |
| AVIF | 6,818 | 6.1% | 89% | 1.4s |
| WebP | 29,710 | 26.6% | 88% | 1.4s |
| JPEG | 55,415 | 49.6% | 86% | 1.4s |
| PNG | 16,502 | 14.8% | 84% | 1.4s |
| SVG | 2,498 | 2.2% | 83% | 1.4s |
Responsive markup +6 pp
picture element passes on 91% of sites (p75 1.3s). No responsive markup sits at 85% (p75 1.4s). Gap: 6 points.
Responsive markup — every solid cohort
| Variant | Sites | Share of signal | Pass LCP | p75 LCP |
|---|---|---|---|---|
| picture element | 12,249 | 6.9% | 91% | 1.3s |
| srcset only | 24,190 | 13.7% | 87% | 1.4s |
| No responsive markup | 140,113 | 79.4% | 85% | 1.4s |
Element type +5 pp
Image passes on 88% of sites (p75 1.4s). Background image sits at 83% (p75 1.5s). Gap: 5 points.
Element type — every solid cohort
| Variant | Sites | Share of signal | Pass LCP | p75 LCP |
|---|---|---|---|---|
| Image | 74,505 | 42.2% | 88% | 1.4s |
| Video | 4,268 | 2.4% | 88% | 1.4s |
| Text | 46,425 | 26.3% | 85% | 1.3s |
| Background image | 51,352 | 29.1% | 83% | 1.5s |
Looks important, barely separates pass from fail
Weak this edition (under 5 points)
Still worth fixing on a single site. As a fleet LCP separator, they do not clear the bar.
| Signal | Best | Pass | Worst | Pass | Gap |
|---|---|---|---|---|---|
| loading attribute on the LCP | eager | 90% | auto (default) | 87% | +3 pp |
| Priority hint on the LCP | preconnect only | 87% | Preload | 85% | +2 pp |
| 1P vs 3P LCP origin | First party | 86% | Third party | 86% | +1 pp |