Connection hints

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

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · Desktop 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
preconnect hints
on the typical page
0
preloads
on the typical page
1
1 in 4 pages exceed this
preloads
180,899
sites measured
desktop field data
The State of Web Vitals · Q2 2026 · 189,915 sites · desktop field datacorewebvitals.io/state-of-cwv
2

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 · desktop field datacorewebvitals.io/state-of-cwv
3

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

Connection hints — preconnectSitesPassing LCPLCP
0–0 129,717 86% 1.3s
1–1 19,666 82% 1.5s
2+ 31,516 87% 1.4s
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.3s. At the high end (2+): LCP 1.4s. computed

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

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 · desktop field datacorewebvitals.io/state-of-cwv
5

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

Connection hints — preloadSitesPassing LCPLCP
0–0 128,523 86% 1.4s
1–1 14,628 84% 1.5s
2–2 10,639 88% 1.3s
3–3 4,702 88% 1.4s
4+ 22,407 87% 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.4s. At the high end (4+): LCP 1.5s. computed

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

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: 86% at one end, 87% 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 (5) — admin only
Query #1: 31.6 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: 411.9 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: 318.2 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."desktop".lcp, 0.5) AS median,
            COUNT(*) FILTER (WHERE crux."desktop".lcp IS NOT NULL AND crux."desktop".lcp <= 2500) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."desktop".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 #4: 235.9 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 #5: 255.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."desktop".lcp, 0.5) AS median,
            COUNT(*) FILTER (WHERE crux."desktop".lcp IS NOT NULL AND crux."desktop".lcp <= 2500) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."desktop".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.06 ms
20260625/types.json 0.90 ms
20260625/loaf-scripts.json 0.50 ms
20260625/menu.json 0.25 ms