Connection hints
dns-prefetch, preconnect and preload links the document declares.
At a glance the headline numbers for Connection hints
dns-prefetch, preconnect and preload links the document declares.
Distribution & median LCP site count and median LCP at each level of connection hints — preconnect
Passing LCP by connection hints — preconnect which level passes the LCP most often
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
Distribution & median LCP site count and median LCP at each level of connection hints — preload
Passing LCP by connection hints — preload which level passes the LCP most often
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
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.
Chrome field data from 189,915 sites, representing millions of real page loads. How we measured.
Live queries (5) — admin only
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;
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;
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;
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;
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;