FCP distribution

How FCP is distributed across real-user data, plus pass-rate breakdown.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · All devices field outcomes
1

At a glance the headline numbers for FCP distribution

How FCP is distributed across real-user data, plus pass-rate breakdown.

76.6%
of sites good on FCP
1.2s
Typical site
2.6s
Worst 10% of sites

76.6% of sites good on FCP. The typical site's FCP is 1.2s. The worst 10% are above 2.6s.

The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
2

The FCP distribution site count at each FCP, from good to poor

0 8,744 17,487 26,231 34,974
0ms–250msms60 sites<0.1% of all sites
250ms–500msms5,413 sites3.1% of all sites
500ms–750msms25,686 sites14.5% of all sites
750ms–1sms34,974 sites19.8% of all sites
1s–1.3sms29,518 sites16.7% of all sites
1.3s–1.5sms21,652 sites12.2% of all sites
1.5s–1.8sms15,691 sites8.9% of all sites
1.8s–2sms11,023 sites6.2% of all sites
2s–2.3sms8,203 sites4.6% of all sites
2.3s–2.5sms5,990 sites3.4% of all sites
2.5s–2.8sms4,441 sites2.5% of all sites
2.8s–3sms3,302 sites1.9% of all sites
3s–3.3sms2,541 sites1.4% of all sites
3.3s–3.5sms1,932 sites1.1% of all sites
3.5s–3.8sms1,440 sites0.8% of all sites
3.8s–4sms1,046 sites0.6% of all sites
4s–4.3sms839 sites0.5% of all sites
4.3s–4.5sms658 sites0.4% of all sites
4.5s–4.8sms505 sites0.3% of all sites
4.8s–5sms382 sites0.2% of all sites
5s–5.3sms304 sites0.2% of all sites
5.3s–5.5sms240 sites0.1% of all sites
5.5s–5.8sms204 sites0.1% of all sites
5.8s–6sms148 sites0.1% of all sites
6s–6.3sms131 sites0.1% of all sites
6.3s–6.5sms107 sites0.1% of all sites
6.5s–6.8sms99 sites0.1% of all sites
6.8s–7sms79 sites<0.1% of all sites
7s–7.3sms55 sites<0.1% of all sites
7.3s–7.5sms40 sites<0.1% of all sites
7.5s–7.8sms30 sites<0.1% of all sites
7.8s–8sms27 sites<0.1% of all sites
8sms and up219 sites0.1% of all sites
p50 = 1.2s
p75 = 1.7s
p90 = 2.6s
p99 = 4.9s
0ms–250ms 250ms–500ms 500ms–750ms 750ms–1s 1s–1.3s 1.3s–1.5s 1.5s–1.8s 1.8s–2s 2s–2.3s 2.3s–2.5s 2.5s–2.8s 2.8s–3s 3s–3.3s 3.3s–3.5s 3.5s–3.8s 3.8s–4s 4s–4.3s 4.3s–4.5s 4.5s–4.8s 4.8s–5s 5s–5.3s 5.3s–5.5s 5.5s–5.8s 5.8s–6s 6s–6.3s 6.3s–6.5s 6.5s–6.8s 6.8s–7s 7s–7.3s 7.3s–7.5s 7.5s–7.8s 7.8s–8s 8s+
Good (≤1.8s) Needs improvement Poor (>3s) Percentile markers Total: 176,979 sites

Most sites are good on FCP. 76.6% sit at or under 1.8s. The typical site is at 1.2s, and 75% of sites stay under 1.7s. Only 23.4% miss good FCP. The slowest 10% are above 2.6s, and the slowest 1% are above 4.9s.

The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
3

The FCP pass rate the share of sites that are good, needs improvement and poor

FCP
76.6%
17.2%
6.2%
Good Needs Improvement Poor

76.6% of sites are good on FCP. 17.2% are in the needs improvement band, between 1.8s and 3s. 6.2% are poor, above 3s. A miss is usually needs improvement, not poor.

The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
4

Why this matters for the Core Web Vitals, and where to start fixing it

First Contentful Paint is when the first piece of content appears, the first text or image that tells the visitor something is happening. It is a diagnostic metric rather than a Core Web Vital, but it sits on the path to LCP: if the first paint is slow, the largest paint is almost always slow too. FCP is usually held up by the server response and by render-blocking CSS and JavaScript in the head.

Start with what blocks the first paint. Cut render-blocking resources, remove the CSS you do not use, and get the critical bytes to the browser as early as you can. Early Hints can let the browser start fetching key resources before the HTML even arrives. Improving FCP tends to pull LCP along with it.

How are sites doing on FCP?

76.6% of sites have a good FCP. The typical site sits at 1.7s at the 75th percentile; the slowest 1% pass 4.9s.

Related signals CLS → LCP → TTFB → INP → Chrome field data from 189,915 sites, representing millions of real page loads · How we measured
Live queries (2) — admin only
Query #1: 92.7 ms
SELECT COUNT(*) AS count,
            COUNT(*) FILTER (WHERE crux."all".fcp <= 1800) * 1.0 / COUNT(*) AS good,
            COUNT(*) FILTER (WHERE crux."all".fcp > 1800 AND crux."all".fcp <= 3000) * 1.0 / COUNT(*) AS needs_improvement,
            COUNT(*) FILTER (WHERE crux."all".fcp > 3000) * 1.0 / COUNT(*) AS poor,
            quantile_disc(crux."all".fcp, 0.10) AS p10,
            quantile_disc(crux."all".fcp, 0.25) AS p25,
            quantile_disc(crux."all".fcp, 0.50) AS p50,
            quantile_disc(crux."all".fcp, 0.75) AS p75,
            quantile_disc(crux."all".fcp, 0.90) AS p90,
            quantile_disc(crux."all".fcp, 0.99) AS p99
            FROM sites WHERE 1=1 AND crux."all".fcp IS NOT NULL;
Query #2: 63.8 ms
SELECT CASE WHEN crux."all".fcp >= 0 AND crux."all".fcp < 250 THEN 0 WHEN crux."all".fcp >= 250 AND crux."all".fcp < 500 THEN 1 WHEN crux."all".fcp >= 500 AND crux."all".fcp < 750 THEN 2 WHEN crux."all".fcp >= 750 AND crux."all".fcp < 1000 THEN 3 WHEN crux."all".fcp >= 1000 AND crux."all".fcp < 1250 THEN 4 WHEN crux."all".fcp >= 1250 AND crux."all".fcp < 1500 THEN 5 WHEN crux."all".fcp >= 1500 AND crux."all".fcp < 1750 THEN 6 WHEN crux."all".fcp >= 1750 AND crux."all".fcp < 2000 THEN 7 WHEN crux."all".fcp >= 2000 AND crux."all".fcp < 2250 THEN 8 WHEN crux."all".fcp >= 2250 AND crux."all".fcp < 2500 THEN 9 WHEN crux."all".fcp >= 2500 AND crux."all".fcp < 2750 THEN 10 WHEN crux."all".fcp >= 2750 AND crux."all".fcp < 3000 THEN 11 WHEN crux."all".fcp >= 3000 AND crux."all".fcp < 3250 THEN 12 WHEN crux."all".fcp >= 3250 AND crux."all".fcp < 3500 THEN 13 WHEN crux."all".fcp >= 3500 AND crux."all".fcp < 3750 THEN 14 WHEN crux."all".fcp >= 3750 AND crux."all".fcp < 4000 THEN 15 WHEN crux."all".fcp >= 4000 AND crux."all".fcp < 4250 THEN 16 WHEN crux."all".fcp >= 4250 AND crux."all".fcp < 4500 THEN 17 WHEN crux."all".fcp >= 4500 AND crux."all".fcp < 4750 THEN 18 WHEN crux."all".fcp >= 4750 AND crux."all".fcp < 5000 THEN 19 WHEN crux."all".fcp >= 5000 AND crux."all".fcp < 5250 THEN 20 WHEN crux."all".fcp >= 5250 AND crux."all".fcp < 5500 THEN 21 WHEN crux."all".fcp >= 5500 AND crux."all".fcp < 5750 THEN 22 WHEN crux."all".fcp >= 5750 AND crux."all".fcp < 6000 THEN 23 WHEN crux."all".fcp >= 6000 AND crux."all".fcp < 6250 THEN 24 WHEN crux."all".fcp >= 6250 AND crux."all".fcp < 6500 THEN 25 WHEN crux."all".fcp >= 6500 AND crux."all".fcp < 6750 THEN 26 WHEN crux."all".fcp >= 6750 AND crux."all".fcp < 7000 THEN 27 WHEN crux."all".fcp >= 7000 AND crux."all".fcp < 7250 THEN 28 WHEN crux."all".fcp >= 7250 AND crux."all".fcp < 7500 THEN 29 WHEN crux."all".fcp >= 7500 AND crux."all".fcp < 7750 THEN 30 WHEN crux."all".fcp >= 7750 AND crux."all".fcp < 8000 THEN 31 WHEN crux."all".fcp >= 8000 THEN 32 END AS bucket_idx, COUNT(*) AS count FROM sites WHERE 1=1 AND crux."all".fcp IS NOT NULL GROUP BY bucket_idx;
JSON file lookups (4)
20260625/meta.json 0.06 ms
20260625/types.json 0.51 ms
20260625/loaf-scripts.json 0.28 ms
20260625/menu.json 0.39 ms