75th percentile (p75)

The value that 75 out of 100 visits come in under. Google grades speed with it because averages quietly hide your slowest quarter.

not the average, the slower usershow bad is it for most peoplep75seventy fifth percentilethe number 3 out of 4 visits beatwhy doesn't google use the averagepercentile instead of meanthe slowest quarter of my traffic

See it

Live demo coming soon

What it is

Line up every recorded visit from fastest to slowest and walk three quarters of the way along the line. The value you are standing on is p75: three out of four visits were at least that fast, one out of four was worse. Core Web Vitals are assessed at p75 over a rolling 28 days, split by phone and desktop, which is why your dashboard's cheerful average has nothing to do with whether you pass.

Percentiles beat the mean because latency distributions have a long ugly tail: one person on a tunnel connection can pull an average up by a second while nothing about the site changed. The median (p50) has the opposite problem, hiding the tail completely. Google landed on p75 as the compromise: reachable enough that a well-built site can pass, strict enough that you cannot ignore your slow quarter.

Gotcha: percentiles do not add up. The p75 of TTFB plus the p75 of resource load time is not the p75 of LCP, because different sessions are slow for different reasons. Same trap across segments: fixing your fast desktop pages moves nothing, because the p75 lives inside your worst traffic. And do not over-read a pass: a quarter of visits being slower than your p75 does not mean a quarter of people had a bad time. If your p75 sits comfortably inside the good threshold, plenty of that slower quarter is still inside it too. What the grade does hide is the shape of the tail, so look at p95 before declaring victory.

Ask AI for it

Build a web vitals report that uses percentiles instead of averages. Given raw per-session metric events, group by route and device type, compute p50, p75, and p95 with the nearest-rank method, and show sample count next to every row so thin segments are obvious. Render p75 as the headline number, color-coded against the Core Web Vitals thresholds (LCP 2.5s and 4s, INP 200ms and 500ms, CLS 0.1 and 0.25), with a histogram of the full distribution underneath. Do not display a mean anywhere.

You might have meant

core web vitalsreal user monitoringlab data vs field datalargest contentful paintinteraction to next paint