Features · Measure

Core Web Vitals from real visits — p75, not averages

LCP, INP, CLS, FCP and TTFB collected from actual visitors through the browser's own PerformanceObserver. Reported at the 75th percentile, because that is how Google defines the thresholds and because an average hides exactly the visits that hurt.

Field data, not a lab score

A synthetic run from a fast machine on a fast connection tells you very little. These are your real visitors on their real devices.

p75 because averages lie

A handful of slow visits drags a mean around and manufactures a "nothing is wrong" reading. The 75th percentile is what the standard uses.

Slowest pages, ranked

Mean LCP per page with a minimum sample size, so a single unlucky visit cannot put a page at the top of the list.

No extra library

PerformanceObserver is already in the browser. Adding the web-vitals package would have cost more bytes than the rest of our tracker.

The evidence

Metric vitals.p75

SELECT ROUND(MAX(CASE WHEN rn_lcp = target_lcp THEN lcp END), 0) AS lcp, …
  FROM (SELECT lcp, inp, cls,
               ROW_NUMBER() OVER (ORDER BY lcp) AS rn_lcp,
               CAST(0.75 * COUNT(*) OVER () AS INTEGER) + 1 AS target_lcp
          FROM (SELECT CAST(json_extract(props,'$.lcp') AS REAL) AS lcp …
                  FROM events
                 WHERE site_id = ? AND ts >= ? AND ts < ?
                   AND bot_kind = '' AND name = 'web_vitals'))

The percentile is computed in SQL, so the number you see is the number that ran.

Documentation

More in measure

← All features