Connection hints

dns-prefetch, preconnect and preload links the document declares.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · All devices field outcomes
Metric LCP INP CLS
1

At a glance the headline numbers for Connection hints

dns-prefetch, preconnect and preload links the document declares.

0
Median (p50)
180,899 sites
1
p75
18
p99
Long tail
The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
2

Distribution & median LCP site count and median LCP at each level of connection hints — preload

0ms 750ms 1500ms 2250ms 3000ms
2.5s
0 64262 128523
0–0 1–1 2–2 3–3 4+
Good (≤2.5s) Needs improvement Poor (>4s) Site count
The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
3

Passing LCP by connection hints — preload which level passes the LCP most often

Connection hints — preloadSitesPassing LCPLCP
0–0 128,523 82% 1.5s
1–1 14,628 81% 1.6s
2–2 10,639 87% 1.4s
3–3 4,702 84% 1.6s
4+ 22,407 83% 1.5s
Good Needs Improvement Poor Faded rows: under 100 sites

Connection hints — preload 0. p75 1. p99 18. At the low end (0–0): LCP 1.5s. At the high end (4+): LCP 1.5s. computed

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

Hints move network work earlier. dns-prefetch resolves a domain name before it is needed. preconnect goes further and completes the TCP and TLS setup too. preload fetches one specific file that the scanner would otherwise find late, like a background hero image or a critical font.

Hints are easy to overuse. Every preconnect spends sockets and CPU on a connection you might never use. A preload that is not critical steals bandwidth from something that is. A handful of deliberate hints beats a wall of them.

How does this affect the Core Web Vitals?

Passing LCP barely moves across the range: 82% at one end, 83% at the other. This signal does not separate passing sites from failing ones.

Related signals Cacheable responses → Last-Modified present → Requests via CDN → HTML size (kB) → Chrome field data from 189,915 sites, representing millions of real page loads · How we measured
Live queries (4) — admin only
Query #1: 14.3 ms
SELECT COUNT(*) AS count,
            quantile_disc(m.resource_hints.connection_hints.dns_prefetch, 0.10) AS p10,
            quantile_disc(m.resource_hints.connection_hints.dns_prefetch, 0.25) AS p25,
            quantile_disc(m.resource_hints.connection_hints.dns_prefetch, 0.50) AS p50,
            quantile_disc(m.resource_hints.connection_hints.dns_prefetch, 0.75) AS p75,
            quantile_disc(m.resource_hints.connection_hints.dns_prefetch, 0.90) AS p90,
            quantile_disc(m.resource_hints.connection_hints.dns_prefetch, 0.99) AS p99
            FROM sites WHERE m.resource_hints.connection_hints.dns_prefetch IS NOT NULL;
Query #2: 11.0 ms
SELECT COUNT(*) AS count,
            quantile_disc(m.resource_hints.connection_hints.preconnect, 0.10) AS p10,
            quantile_disc(m.resource_hints.connection_hints.preconnect, 0.25) AS p25,
            quantile_disc(m.resource_hints.connection_hints.preconnect, 0.50) AS p50,
            quantile_disc(m.resource_hints.connection_hints.preconnect, 0.75) AS p75,
            quantile_disc(m.resource_hints.connection_hints.preconnect, 0.90) AS p90,
            quantile_disc(m.resource_hints.connection_hints.preconnect, 0.99) AS p99
            FROM sites WHERE m.resource_hints.connection_hints.preconnect IS NOT NULL;
Query #3: 154.5 ms
SELECT COUNT(*) AS count,
            quantile_disc(m.resource_hints.connection_hints.preload, 0.10) AS p10,
            quantile_disc(m.resource_hints.connection_hints.preload, 0.25) AS p25,
            quantile_disc(m.resource_hints.connection_hints.preload, 0.50) AS p50,
            quantile_disc(m.resource_hints.connection_hints.preload, 0.75) AS p75,
            quantile_disc(m.resource_hints.connection_hints.preload, 0.90) AS p90,
            quantile_disc(m.resource_hints.connection_hints.preload, 0.99) AS p99
            FROM sites WHERE m.resource_hints.connection_hints.preload IS NOT NULL;
Query #4: 155.5 ms
SELECT CASE WHEN m.resource_hints.connection_hints.preload >= 0 AND m.resource_hints.connection_hints.preload < 1 THEN 0 WHEN m.resource_hints.connection_hints.preload >= 1 AND m.resource_hints.connection_hints.preload < 2 THEN 1 WHEN m.resource_hints.connection_hints.preload >= 2 AND m.resource_hints.connection_hints.preload < 3 THEN 2 WHEN m.resource_hints.connection_hints.preload >= 3 AND m.resource_hints.connection_hints.preload < 4 THEN 3 WHEN m.resource_hints.connection_hints.preload >= 4 THEN 4 END AS bucket_idx, COUNT(*) AS n,
            quantile_disc(crux."all".lcp, 0.5) AS median,
            COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL AND crux."all".lcp <= 2500) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL), 0) AS good_pct
            FROM sites WHERE m.resource_hints.connection_hints.preload IS NOT NULL GROUP BY bucket_idx;
JSON file lookups (4)
20260625/meta.json 0.03 ms
20260625/types.json 0.51 ms
20260625/loaf-scripts.json 0.29 ms
20260625/menu.json 0.10 ms