Iframes per page

How many iframes the page embeds.

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 Iframes per page

How many iframes the page embeds.

0
on the typical site
half of sites sit at or below
2
1 in 4 sites exceed this
the top quarter
8
the heaviest 1%
the long tail
180,899
sites measured
all-device field data

The typical page embeds 0 iframes.

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

Distribution & median INP site count and median INP at each level of iframes per page

0ms 63ms 125ms 188ms 250ms
200ms
0 51319 102637
0–0 1–1 2–2 3+
Good (≤200ms) Needs improvement Poor (>500ms) Site count
The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
3

Passing INP by iframes per page which level passes the INP most often

Iframes per pageSitesPassing INPINP
0–0 102,637 95% 83ms
1–1 31,433 95% 87ms
2–2 21,235 96% 88ms
3+ 25,594 93% 97ms
Good Needs Improvement Poor Faded rows: under 100 sites

Iframes per page 0. p75 2. p99 8. At the low end (0–0): INP 83ms. At the high end (3+): INP 97ms. 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

Each iframe is a separate document with its own resources, scripts and lifecycle, and its work still competes for the same device. The count is a decent proxy for embed weight: chat widgets, videos, ad slots, forms.

Every embed should justify itself. The heavy default (always-on iframe) has a light replacement for almost every case: a facade for video and chat, a static image for maps, a reserved slot for ads.

Related signals Responsive image markup → Image fetchpriority → Script coverage (used vs unused) → Bytes by resource type → Chrome field data from 189,915 sites, representing millions of real page loads · How we measured
Live queries (2) — admin only
Query #1: 202.8 ms
SELECT COUNT(*) AS count,
            quantile_disc(m.iframes.total, 0.10) AS p10,
            quantile_disc(m.iframes.total, 0.25) AS p25,
            quantile_disc(m.iframes.total, 0.50) AS p50,
            quantile_disc(m.iframes.total, 0.75) AS p75,
            quantile_disc(m.iframes.total, 0.90) AS p90,
            quantile_disc(m.iframes.total, 0.99) AS p99
            FROM sites WHERE m.iframes.total IS NOT NULL;
Query #2: 306.4 ms
SELECT CASE WHEN m.iframes.total >= 0 AND m.iframes.total < 1 THEN 0 WHEN m.iframes.total >= 1 AND m.iframes.total < 2 THEN 1 WHEN m.iframes.total >= 2 AND m.iframes.total < 3 THEN 2 WHEN m.iframes.total >= 3 THEN 3 END AS bucket_idx, COUNT(*) AS n,
            quantile_disc(crux."all".inp, 0.5) AS median,
            COUNT(*) FILTER (WHERE crux."all".inp IS NOT NULL AND crux."all".inp <= 200) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."all".inp IS NOT NULL), 0) AS good_pct
            FROM sites WHERE m.iframes.total IS NOT NULL GROUP BY bucket_idx;
JSON file lookups (4)
20260625/meta.json 0.05 ms
20260625/types.json 0.75 ms
20260625/loaf-scripts.json 0.52 ms
20260625/menu.json 0.21 ms