At a glance the headline numbers for Media per page
Audio and video elements on the page and their weight.
The typical page embeds 0 media files.
Distribution & median CLS site count and median CLS at each level of media per page — n
Passing CLS by media per page — n which level passes the CLS most often
Media per page — n 0. p75 0. p99 6. At the low end (0–0): CLS 0.00. At the high end (1+): CLS 0.00. computed
Distribution & median CLS site count and median CLS at each level of media per page — size
Passing CLS by media per page — size which level passes the CLS most often
Media per page — size 39 KB. p75 2.8 MB. p99 44.4 MB. At the low end (0–499 KB): CLS 0.00. At the high end (10500+ KB): CLS 0.01. computed
Why this matters for the Core Web Vitals, and where to start fixing it
When audio or video is present, it outweighs everything else on the page. An autoplaying background video competes with the LCP image for bandwidth at the worst moment, and on phones it burns data the visitor never asked for.
A poster image carries the experience until the visitor opts in. It loads like an image, it can be the LCP candidate, and the video starts on interaction. Autoplay hero video is the expensive way to do what a good photo does.
Chrome field data from 189,915 sites, representing millions of real page loads. How we measured.
Live queries (4) — admin only
SELECT COUNT(*) AS count,
quantile_disc(m.media.total.n, 0.10) AS p10,
quantile_disc(m.media.total.n, 0.25) AS p25,
quantile_disc(m.media.total.n, 0.50) AS p50,
quantile_disc(m.media.total.n, 0.75) AS p75,
quantile_disc(m.media.total.n, 0.90) AS p90,
quantile_disc(m.media.total.n, 0.99) AS p99
FROM sites WHERE m.media.total.n IS NOT NULL;
SELECT CASE WHEN m.media.total.n >= 0 AND m.media.total.n < 1 THEN 0 WHEN m.media.total.n >= 1 THEN 1 END AS bucket_idx, COUNT(*) AS n,
quantile_disc(crux."all".cls, 0.5) AS median,
COUNT(*) FILTER (WHERE crux."all".cls IS NOT NULL AND crux."all".cls <= 0.1) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."all".cls IS NOT NULL), 0) AS good_pct
FROM sites WHERE m.media.total.n IS NOT NULL GROUP BY bucket_idx;
SELECT COUNT(*) AS count,
quantile_disc(m.media.total.size, 0.10) AS p10,
quantile_disc(m.media.total.size, 0.25) AS p25,
quantile_disc(m.media.total.size, 0.50) AS p50,
quantile_disc(m.media.total.size, 0.75) AS p75,
quantile_disc(m.media.total.size, 0.90) AS p90,
quantile_disc(m.media.total.size, 0.99) AS p99
FROM sites WHERE m.media.total.size IS NOT NULL;
SELECT CASE WHEN m.media.total.size >= 0 AND m.media.total.size < 500 THEN 0 WHEN m.media.total.size >= 500 AND m.media.total.size < 1000 THEN 1 WHEN m.media.total.size >= 1000 AND m.media.total.size < 1500 THEN 2 WHEN m.media.total.size >= 1500 AND m.media.total.size < 2000 THEN 3 WHEN m.media.total.size >= 2000 AND m.media.total.size < 2500 THEN 4 WHEN m.media.total.size >= 2500 AND m.media.total.size < 3000 THEN 5 WHEN m.media.total.size >= 3000 AND m.media.total.size < 3500 THEN 6 WHEN m.media.total.size >= 3500 AND m.media.total.size < 4000 THEN 7 WHEN m.media.total.size >= 4000 AND m.media.total.size < 4500 THEN 8 WHEN m.media.total.size >= 4500 AND m.media.total.size < 5000 THEN 9 WHEN m.media.total.size >= 5000 AND m.media.total.size < 5500 THEN 10 WHEN m.media.total.size >= 5500 AND m.media.total.size < 6000 THEN 11 WHEN m.media.total.size >= 6000 AND m.media.total.size < 6500 THEN 12 WHEN m.media.total.size >= 6500 AND m.media.total.size < 7000 THEN 13 WHEN m.media.total.size >= 7000 AND m.media.total.size < 7500 THEN 14 WHEN m.media.total.size >= 7500 AND m.media.total.size < 8000 THEN 15 WHEN m.media.total.size >= 8000 AND m.media.total.size < 8500 THEN 16 WHEN m.media.total.size >= 8500 AND m.media.total.size < 9000 THEN 17 WHEN m.media.total.size >= 9000 AND m.media.total.size < 9500 THEN 18 WHEN m.media.total.size >= 9500 AND m.media.total.size < 10000 THEN 19 WHEN m.media.total.size >= 10000 AND m.media.total.size < 10500 THEN 20 WHEN m.media.total.size >= 10500 THEN 21 END AS bucket_idx, COUNT(*) AS n,
quantile_disc(crux."all".cls, 0.5) AS median,
COUNT(*) FILTER (WHERE crux."all".cls IS NOT NULL AND crux."all".cls <= 0.1) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."all".cls IS NOT NULL), 0) AS good_pct
FROM sites WHERE m.media.total.size IS NOT NULL GROUP BY bucket_idx;