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
dns-prefetch hints
on the typical page
0
preconnect hints
on the typical page
0
preloads
on the typical page
180,899
sites measured
all-device field data

Connection hints on the typical site: 0 dns-prefetch, 0 preconnect, 0 preload.

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 — dns prefetch

0ms 750ms 1500ms 2250ms 3000ms
2.5s
0 61448 122895
0–0 1–1 2+
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 — dns prefetch which level passes the LCP most often

Connection hints — dns prefetchSitesPassing LCPLCP
0–0 122,895 86% 1.4s
1–1 27,829 76% 1.7s
2+ 30,175 73% 1.8s
Good Needs Improvement Poor Faded rows: under 100 sites

Connection hints — dns prefetch 0. p75 1. p99 8. At the low end (0–0): LCP 1.4s. At the high end (2+): LCP 1.8s. computed

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

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

0ms 750ms 1500ms 2250ms 3000ms
2.5s
0 64859 129717
0–0 1–1 2+
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
5

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

Connection hints — preconnectSitesPassing LCPLCP
0–0 129,717 83% 1.5s
1–1 19,666 79% 1.6s
2+ 31,516 84% 1.5s
Good Needs Improvement Poor Faded rows: under 100 sites

Connection hints — preconnect 0. p75 1. p99 6. At the low end (0–0): LCP 1.5s. At the high end (2+): LCP 1.5s. computed

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

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
7

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
8

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?

Connection hints correlate with the LCP. Dns-prefetch hints separates passing sites from failing sites the most. With few dns-prefetch hints, 86% of sites pass the LCP. With many, 73% do. The decline is gradual. There is no point where sites suddenly start failing.

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 (6) — admin only
Query #1: 268.0 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: 262.0 ms
SELECT CASE WHEN m.resource_hints.connection_hints.dns_prefetch >= 0 AND m.resource_hints.connection_hints.dns_prefetch < 1 THEN 0 WHEN m.resource_hints.connection_hints.dns_prefetch >= 1 AND m.resource_hints.connection_hints.dns_prefetch < 2 THEN 1 WHEN m.resource_hints.connection_hints.dns_prefetch >= 2 THEN 2 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.dns_prefetch IS NOT NULL GROUP BY bucket_idx;
Query #3: 245.4 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 #4: 268.8 ms
SELECT CASE WHEN m.resource_hints.connection_hints.preconnect >= 0 AND m.resource_hints.connection_hints.preconnect < 1 THEN 0 WHEN m.resource_hints.connection_hints.preconnect >= 1 AND m.resource_hints.connection_hints.preconnect < 2 THEN 1 WHEN m.resource_hints.connection_hints.preconnect >= 2 THEN 2 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.preconnect IS NOT NULL GROUP BY bucket_idx;
Query #5: 188.6 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 #6: 184.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.04 ms
20260625/types.json 0.82 ms
20260625/loaf-scripts.json 0.53 ms
20260625/menu.json 0.22 ms