Discrepancy between CWV threshold values in CrUX and Google documentation

Skip to first unread message

Mr. T

Apr 16, 2024, 10:11:21 AMApr 16
to Chrome UX Report (Discussions)

I've found a discrepancy between the CWV threshold values in CrUX and the Google documentation.


CrUX report

LCP: Good (< 2500ms), Poor (>= 4000ms)
INP: Good (< 200ms), (>= 500ms)
CLS: Good (< 0.10), Poor (>= 0.25)

E.g. is Good LCP <=2.5s or <2.5s. 

What are the correct thresholds for CWV metrics?


Barry Pollard

Apr 16, 2024, 10:21:34 AMApr 16
to Mr. T, Chrome UX Report (Discussions)
The recommended thresholds are <= as documented in each of our metrics. Adn this is what is shown in the p75 numbers in all our tools.

The histogram bin data on CrUX BigQuery the bins are the keyed off the start of the bin (as detailed in this guide) so it is necessary to look at < rather than <= to avoid including everything in the next bin.
And since this forms the basis of the CrUX histogram graphs that's why you see that.

This is an unfortunate difference, however the reality is, with rounding, a strict interpretation of these numbers is not actually that useful (except perhaps with CLS since it has less precision). And of course, from a user perspective the difference between an LCP of 2499 and 2500 is negligible!

You received this message because you are subscribed to the Google Groups "Chrome UX Report (Discussions)" group.
To unsubscribe from this group and stop receiving emails from it, send an email to chrome-ux-repo...@chromium.org.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/chrome-ux-report/a7be75cc-2c04-48ec-8009-85626fc22372n%40chromium.org.

Taha Valiji

Apr 19, 2024, 12:10:09 PMApr 19
to Barry Pollard, Chrome UX Report (Discussions)
Thank you for the clarification, I was using queries to fetch some data and wanted to make sure my queries were setup correctly.

❄ Johannes Henkel

Apr 19, 2024, 12:29:54 PMApr 19
to Taha Valiji, Barry Pollard, Chrome UX Report (Discussions)
It's a bit of a personal choice, but I like to use >= and <= and start and end of the bins to select.
E.g., I think this example query is correct (although, it's more efficient to use the materialized table).

ROUND(SUM(if(lcp.end <= 2500, lcp.density, 0)), 4) AS good_lcp,
ROUND(SUM(if(lcp.start >= 2500 and lcp.end <= 4000, lcp.density, 0)), 4) AS ni_lcp,
ROUND(SUM(if(lcp.start >= 4000, lcp.density, 0)), 4) AS poor_lcp
UNNEST(largest_contentful_paint.histogram.bin) AS lcp
origin = 'https://web.dev'

Reply all
Reply to author
0 new messages