[{"data":1,"prerenderedAt":838},["ShallowReactive",2],{"content:\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-core-web-vitals-use-the-75th-percentile":3,"surroundings:\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-core-web-vitals-use-the-75th-percentile":829},{"id":4,"title":5,"body":6,"description":808,"extension":809,"meta":810,"navigation":822,"path":823,"seo":824,"stem":827,"__hash__":828},"content\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-core-web-vitals-use-the-75th-percentile\u002Findex.md","Why Core Web Vitals Use the 75th Percentile",{"type":7,"value":8,"toc":794},"minimark",[9,14,42,45,168,173,202,206,212,218,224,230,295,299,304,307,371,379,383,418,421,425,432,436,439,591,594,678,682,690,694,700,710,716,722,726,743,752,756,779,784,787,790],[10,11,13],"h1",{"id":12},"why-core-web-vitals-use-the-75th-percentile-and-what-that-means-for-your-fixes","Why Core Web Vitals Use the 75th Percentile — and What That Means for Your Fixes",[15,16,17,18,23,24,28,29,33,34,37,38,41],"p",{},"This guide explains the assessment rule behind every threshold in ",[19,20,22],"a",{"href":21},"\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002F","Understanding Core Web Vitals Thresholds",", part of ",[19,25,27],{"href":26},"\u002Fcore-web-vitals-measurement\u002F","Core Web Vitals & Measurement",". A page passes LCP when the 75th percentile of its page loads is under ",[30,31,32],"code",{},"2.5s","; INP when the p75 interaction latency is under ",[30,35,36],{},"200ms","; CLS when p75 layout shift is under ",[30,39,40],{},"0.1",". Not the average, not the median, not the worst case.",[15,43,44],{},"That one choice shapes everything about how you prioritise performance work. A p75 boundary means the fastest three quarters of your visits are irrelevant to pass\u002Ffail; only the slowest quarter matters, and within it, only the visits near the boundary. Teams that optimise the median — the \"typical\" user on a fast laptop — routinely ship improvements that leave the assessed number untouched.",[15,46,47],{},[48,49,55,56,55,63,55,67,55,70,55,79,55,85,55,96,55,103,55,112,55,117,55,121,55,127,55,131,55,135,55,139,55,143,55,147,55,151,55,155,55,162,55],"svg",{"viewBox":50,"width":51,"role":52,"ariaLabel":53,"style":54},"0 0 760 242","100%","img","Bar chart of LCP at the 50th, 75th, 90th and 95th percentiles for a single page, with the 2.5 second threshold marked between p50 and p75.","height:auto;max-width:760px;display:block;margin:1.75rem auto;font-family:inherit;color:var(--fp-svg-ink)"," ",[57,58],"rect",{"className":59,"x":61,"y":61,"width":51,"height":51,"fill":62},[60],"svg-canvas","0","#ffffff",[64,65,66],"title",{},"One page, four percentiles of LCP",[68,69,53],"desc",{},[57,71],{"x":72,"y":72,"width":73,"height":74,"rx":75,"fill":76,"stroke":77,"style":78},"1","758","240","10","none","currentColor","stroke-opacity:0.18",[80,81,66],"text",{"x":82,"y":83,"fill":77,"style":84},"28.0","34.0","font-size:16px;font-weight:700",[86,87],"line",{"x1":88,"y1":89,"x2":88,"y2":90,"stroke":91,"strokeWidth":92,"strokeDashArray":93,"style":95},"383.7","72.0","194.0","#b8860b","1.5",[94,94],"4","stroke-opacity:0.9",[80,97,102],{"x":98,"y":99,"fill":77,"style":100,"textAnchor":101},"117.8","92.0","font-size:13px","end","p50 (median)",[57,104],{"x":105,"y":106,"width":107,"height":108,"rx":109,"fill":110,"stroke":110,"style":111},"129.8","78.0","192.9","19","3","#0466c8","fill-opacity:0.55;stroke-opacity:0.9",[80,113,116],{"x":114,"y":99,"fill":77,"style":115},"328.7","font-size:12px;font-weight:600","1.9s",[80,118,120],{"x":98,"y":119,"fill":77,"style":100,"textAnchor":101},"123.0","p75 (assessed)",[57,122],{"x":105,"y":123,"width":124,"height":108,"rx":109,"fill":125,"stroke":91,"style":126},"109.0","284.3","#ffc300","fill-opacity:0.7;stroke-opacity:0.9",[80,128,130],{"x":129,"y":119,"fill":77,"style":115},"420.1","2.8s",[80,132,134],{"x":98,"y":133,"fill":77,"style":100,"textAnchor":101},"154.0","p90",[57,136],{"x":105,"y":137,"width":138,"height":108,"rx":109,"fill":125,"stroke":91,"style":126},"140.0","416.3",[80,140,142],{"x":141,"y":133,"fill":77,"style":115},"552.1","4.1s",[80,144,146],{"x":98,"y":145,"fill":77,"style":100,"textAnchor":101},"185.0","p95",[57,148],{"x":105,"y":149,"width":150,"height":108,"rx":109,"fill":125,"stroke":91,"style":126},"171.0","538.2",[80,152,154],{"x":153,"y":145,"fill":77,"style":115},"674.0","5.3s",[80,156,161],{"x":88,"y":157,"fill":158,"style":159,"textAnchor":160},"68.0","#8a6608","font-size:12px;font-weight:700","middle","2.5s threshold",[80,163,167],{"x":82,"y":164,"fill":165,"style":166},"220.0","#51617a","font-size:12.5px","The median passes comfortably; the assessed p75 fails. Fixes that only speed up typical visits will not change the verdict.",[169,170,172],"h2",{"id":171},"rapid-diagnosis-where-does-your-distribution-sit","Rapid Diagnosis: Where Does Your Distribution Sit?",[174,175,176,184,190,196],"ul",{},[177,178,179,183],"li",{},[180,181,182],"strong",{},"Pull the full distribution, not a single number."," CrUX's BigQuery tables and the CrUX API expose histogram bins; your own RUM should store raw values. You need at least p50, p75 and p90.",[177,185,186,189],{},[180,187,188],{},"Compare p75 with p50."," A small gap (p75 within 20% of p50) means a uniform experience — improvements must make everything faster. A large gap means a distinct slow population exists, and identifying it is the whole job.",[177,191,192,195],{},[180,193,194],{},"Check the share of \"good\" visits."," CrUX reports good\u002Fneeds-improvement\u002Fpoor percentages. If 72% of visits are good, you need to move 3 percentage points of visits across the line — not speed up all of them.",[177,197,198,201],{},[180,199,200],{},"Segment the slow quarter."," Break visits above p75 down by device class, connection type, country and page template. The cause is almost always concentrated.",[169,203,205],{"id":204},"root-cause-analysis-why-p75-behaves-the-way-it-does","Root Cause Analysis: Why p75 Behaves the Way It Does",[15,207,208,211],{},[180,209,210],{},"1. It deliberately includes difficult conditions."," The 75th percentile was chosen so that most users — three in four — get a good experience, while not being dominated by extreme outliers (the very slowest networks, bot-like traffic, broken devices) that a p95 or p99 would be. It is a balance between inclusiveness and stability.",[15,213,214,217],{},[180,215,216],{},"2. It is stable enough to compare over time."," Higher percentiles move erratically with small changes in traffic mix; a campaign that brings in users on slow networks for a weekend can swing p95 dramatically. p75 is far less sensitive to such shifts, which makes 28-day comparisons meaningful.",[15,219,220,223],{},[180,221,222],{},"3. It hides the fast majority."," Because pass\u002Ffail depends on a single quantile, improvements to visits already well below it have no effect. Shaving 300ms off visits that take 1.2s does nothing; shaving 300ms off visits that take 2.7s can flip the verdict.",[15,225,226,229],{},[180,227,228],{},"4. It amplifies device and network mix."," Your p75 is not a property of your code alone. Two sites with identical code but different audiences — one desktop-heavy, one mobile in emerging markets — will have very different p75s. That is why Core Web Vitals are assessed separately for mobile and desktop.",[15,231,232],{},[48,233,55,236,55,239,55,242,55,244,55,247,55,249,55,254,55,260,55,264,55,268,55,272,55,276,55,279,55,283,55,288,55,291,55],{"viewBox":234,"width":51,"role":52,"ariaLabel":235,"style":54},"0 0 760 188","Threshold scale for INP showing good, needs improvement and poor ranges with a p75 marker in the needs improvement band.",[57,237],{"className":238,"x":61,"y":61,"width":51,"height":51,"fill":62},[60],[64,240,241],{},"Where the p75 boundary sits for each metric",[68,243,235],{},[57,245],{"x":72,"y":72,"width":73,"height":246,"rx":75,"fill":76,"stroke":77,"style":78},"186",[80,248,241],{"x":82,"y":83,"fill":77,"style":84},[57,250],{"x":82,"y":251,"width":252,"height":83,"rx":61,"fill":110,"stroke":110,"style":253},"82.0","201.1","fill-opacity:0.14;stroke-opacity:0.9",[80,255,259],{"x":256,"y":257,"fill":77,"style":258,"textAnchor":160},"128.6","104.0","font-size:12.5px;font-weight:700","Good",[80,261,36],{"x":262,"y":263,"fill":77,"style":159,"textAnchor":160},"229.1","134.0",[57,265],{"x":262,"y":251,"width":266,"height":83,"rx":61,"fill":125,"stroke":91,"style":267},"301.7","fill-opacity:0.24;stroke-opacity:0.9",[80,269,271],{"x":270,"y":257,"fill":77,"style":258,"textAnchor":160},"380.0","Needs improvement",[80,273,275],{"x":274,"y":263,"fill":77,"style":159,"textAnchor":160},"530.9","500ms",[57,277],{"x":274,"y":251,"width":252,"height":83,"rx":61,"fill":77,"stroke":77,"style":278},"fill-opacity:0.06;stroke-opacity:0.4",[80,280,282],{"x":281,"y":257,"fill":77,"style":258,"textAnchor":160},"631.4","Poor",[86,284],{"x1":285,"y1":286,"x2":285,"y2":287,"stroke":77,"strokeWidth":92,"style":95},"289.5","73.0","81.0",[80,289,290],{"x":285,"y":157,"fill":110,"style":159,"textAnchor":160},"your p75 INP: 260ms",[80,292,294],{"x":82,"y":293,"fill":165,"style":166},"166.0","The same three-band structure applies to LCP (2.5s \u002F 4s) and CLS (0.1 \u002F 0.25); only the p75 decides the band.",[169,296,298],{"id":297},"step-by-step-moving-the-75th-percentile-efficiently","Step-by-Step: Moving the 75th Percentile Efficiently",[300,301,303],"h3",{"id":302},"_1-compute-the-distance-to-the-boundary","1. Compute the distance to the boundary",[15,305,306],{},"The useful number is not \"how slow is p75\" but \"what share of visits are above the threshold, and by how much\". Compute both from raw RUM values.",[308,309,314],"pre",{"className":310,"code":311,"language":312,"meta":313,"style":313},"language-sql shiki shiki-themes github-light-high-contrast github-dark-high-contrast github-light-high-contrast","-- Share of mobile page loads over the LCP threshold, and their median overshoot.\nSELECT\n  COUNTIF(lcp > 2500) \u002F COUNT(*)                         AS share_over,\n  APPROX_QUANTILES(IF(lcp > 2500, lcp - 2500, NULL), 2)[OFFSET(1)] AS median_overshoot_ms,\n  APPROX_QUANTILES(lcp, 100)[OFFSET(75)]                 AS p75\nFROM rum.page_loads\nWHERE device = 'mobile' AND ts > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 28 DAY);\n-- trade-off: APPROX_QUANTILES is fast but approximate (~1% error). Near the\n-- threshold that can matter; use exact percentile functions for the final check.\n","sql","",[30,315,316,323,329,335,341,347,353,359,365],{"__ignoreMap":313},[317,318,320],"span",{"class":86,"line":319},1,[317,321,322],{},"-- Share of mobile page loads over the LCP threshold, and their median overshoot.\n",[317,324,326],{"class":86,"line":325},2,[317,327,328],{},"SELECT\n",[317,330,332],{"class":86,"line":331},3,[317,333,334],{},"  COUNTIF(lcp > 2500) \u002F COUNT(*)                         AS share_over,\n",[317,336,338],{"class":86,"line":337},4,[317,339,340],{},"  APPROX_QUANTILES(IF(lcp > 2500, lcp - 2500, NULL), 2)[OFFSET(1)] AS median_overshoot_ms,\n",[317,342,344],{"class":86,"line":343},5,[317,345,346],{},"  APPROX_QUANTILES(lcp, 100)[OFFSET(75)]                 AS p75\n",[317,348,350],{"class":86,"line":349},6,[317,351,352],{},"FROM rum.page_loads\n",[317,354,356],{"class":86,"line":355},7,[317,357,358],{},"WHERE device = 'mobile' AND ts > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 28 DAY);\n",[317,360,362],{"class":86,"line":361},8,[317,363,364],{},"-- trade-off: APPROX_QUANTILES is fast but approximate (~1% error). Near the\n",[317,366,368],{"class":86,"line":367},9,[317,369,370],{},"-- threshold that can matter; use exact percentile functions for the final check.\n",[15,372,373,374,378],{},"Expected outcome: a statement like \"31% of mobile loads exceed 2.5s; the median overshoot is 600ms\" — which tells you that cutting ~600ms from the ",[375,376,377],"em",{},"slow"," population, not from everyone, is the goal.",[300,380,382],{"id":381},"_2-identify-who-the-slow-quarter-is","2. Identify who the slow quarter is",[308,384,386],{"className":310,"code":385,"language":312,"meta":313,"style":313},"SELECT device_memory, effective_type, template,\n       COUNT(*) AS loads, COUNTIF(lcp > 2500) \u002F COUNT(*) AS share_over\nFROM rum.page_loads WHERE device = 'mobile'\nGROUP BY 1, 2, 3 HAVING loads > 500 ORDER BY share_over * loads DESC LIMIT 15;\n-- trade-off: segment dimensions like device_memory are only available in\n-- Chromium. For Safari-heavy audiences, segment by connection RTT and template.\n",[30,387,388,393,398,403,408,413],{"__ignoreMap":313},[317,389,390],{"class":86,"line":319},[317,391,392],{},"SELECT device_memory, effective_type, template,\n",[317,394,395],{"class":86,"line":325},[317,396,397],{},"       COUNT(*) AS loads, COUNTIF(lcp > 2500) \u002F COUNT(*) AS share_over\n",[317,399,400],{"class":86,"line":331},[317,401,402],{},"FROM rum.page_loads WHERE device = 'mobile'\n",[317,404,405],{"class":86,"line":337},[317,406,407],{},"GROUP BY 1, 2, 3 HAVING loads > 500 ORDER BY share_over * loads DESC LIMIT 15;\n",[317,409,410],{"class":86,"line":343},[317,411,412],{},"-- trade-off: segment dimensions like device_memory are only available in\n",[317,414,415],{"class":86,"line":349},[317,416,417],{},"-- Chromium. For Safari-heavy audiences, segment by connection RTT and template.\n",[15,419,420],{},"Expected outcome: one or two segments — for example \"4GB devices on 4G loading product pages\" — account for most visits over the threshold. That segment is what you reproduce in the lab with matching throttling.",[300,422,424],{"id":423},"_3-fix-for-the-segment-then-measure-the-whole","3. Fix for the segment, then measure the whole",[15,426,427,428,431],{},"Choose fixes that disproportionately help slow visits: fewer round trips (preconnect, Early Hints, inlined critical CSS) help high-latency connections far more than fast ones; less JavaScript helps low-memory devices more than flagships. Then re-measure the ",[375,429,430],{},"whole"," p75 — a fix that helps the slow segment by 800ms may move overall p75 by 300ms, which can be enough.",[300,433,435],{"id":434},"_4-watch-the-good-visit-share-not-just-p75","4. Watch the good-visit share, not just p75",[15,437,438],{},"The p75 is a coarse indicator; the share of good visits moves continuously and responds sooner. Track it daily from your RUM.",[308,440,444],{"className":441,"code":442,"language":443,"meta":313,"style":313},"language-javascript shiki shiki-themes github-light-high-contrast github-dark-high-contrast github-light-high-contrast","\u002F\u002F Daily good-share for one metric, from raw RUM rows.\nconst goodShare = (rows, threshold) => rows.filter((r) => r.value \u003C= threshold).length \u002F rows.length;\nconsole.log(`LCP good share: ${(goodShare(lcpRows, 2500) * 100).toFixed(1)}% (need >= 75%)`);\n\u002F\u002F trade-off: a good-share target of exactly 75% passes with no margin; CrUX\n\u002F\u002F uses a 28-day window and different sampling. Aim for 80%+ in your own RUM.\n","javascript",[30,445,446,452,524,581,586],{"__ignoreMap":313},[317,447,448],{"class":86,"line":319},[317,449,451],{"class":450},"sjfSM","\u002F\u002F Daily good-share for one metric, from raw RUM rows.\n",[317,453,454,458,462,465,469,473,476,479,482,485,488,491,494,497,499,501,504,507,510,514,517,519,521],{"class":86,"line":325},[317,455,457],{"class":456},"sPARh","const",[317,459,461],{"class":460},"smZ65"," goodShare",[317,463,464],{"class":456}," =",[317,466,468],{"class":467},"saISM"," (",[317,470,472],{"class":471},"sQw3B","rows",[317,474,475],{"class":467},", ",[317,477,478],{"class":471},"threshold",[317,480,481],{"class":467},") ",[317,483,484],{"class":456},"=>",[317,486,487],{"class":467}," rows.",[317,489,490],{"class":460},"filter",[317,492,493],{"class":467},"((",[317,495,496],{"class":471},"r",[317,498,481],{"class":467},[317,500,484],{"class":456},[317,502,503],{"class":467}," r.value ",[317,505,506],{"class":456},"\u003C=",[317,508,509],{"class":467}," threshold).",[317,511,513],{"class":512},"sPXB4","length",[317,515,516],{"class":456}," \u002F",[317,518,487],{"class":467},[317,520,513],{"class":512},[317,522,523],{"class":467},";\n",[317,525,526,529,532,535,539,541,544,546,549,551,554,556,559,562,565,568,570,572,575,578],{"class":86,"line":331},[317,527,528],{"class":467},"console.",[317,530,531],{"class":460},"log",[317,533,534],{"class":467},"(",[317,536,538],{"class":537},"sZ8jY","`LCP good share: ${",[317,540,534],{"class":537},[317,542,543],{"class":460},"goodShare",[317,545,534],{"class":537},[317,547,548],{"class":467},"lcpRows",[317,550,475],{"class":537},[317,552,553],{"class":512},"2500",[317,555,481],{"class":537},[317,557,558],{"class":456},"*",[317,560,561],{"class":512}," 100",[317,563,564],{"class":537},").",[317,566,567],{"class":460},"toFixed",[317,569,534],{"class":537},[317,571,72],{"class":512},[317,573,574],{"class":537},")",[317,576,577],{"class":537},"}% (need >= 75%)`",[317,579,580],{"class":467},");\n",[317,582,583],{"class":86,"line":337},[317,584,585],{"class":450},"\u002F\u002F trade-off: a good-share target of exactly 75% passes with no margin; CrUX\n",[317,587,588],{"class":86,"line":343},[317,589,590],{"class":450},"\u002F\u002F uses a 28-day window and different sampling. Aim for 80%+ in your own RUM.\n",[15,592,593],{},"Expected outcome: a leading indicator that tells you within days whether a fix is working, instead of waiting for the 28-day CrUX window to roll over.",[15,595,596],{},[48,597,55,600,55,603,55,606,55,608,55,611,55,613,55,619,55,624,55,628,55,632,55,635,55,638,55,641,55,644,55,647,55,650,55,653,55,657,55,659,55,663,55,665,55,668,55,670,55,673,55,675,55],{"viewBox":598,"width":51,"role":52,"ariaLabel":599,"style":54},"0 0 760 228","Comparison of optimising the median user versus targeting the slow segment near the 75th percentile, and the effect each has on the pass rate.",[57,601],{"className":602,"x":61,"y":61,"width":51,"height":51,"fill":62},[60],[64,604,605],{},"Two ways to spend the same engineering week",[68,607,599],{},[57,609],{"x":72,"y":72,"width":73,"height":610,"rx":75,"fill":76,"stroke":77,"style":78},"226",[80,612,605],{"x":82,"y":83,"fill":77,"style":84},[57,614],{"x":82,"y":615,"width":616,"height":617,"rx":618,"fill":125,"stroke":91,"style":267},"56.0","340.0","150.0","6",[80,620,623],{"x":621,"y":251,"fill":77,"style":622},"42.0","font-size:14px;font-weight:700","Optimise the median",[80,625,627],{"x":621,"y":626,"fill":77,"style":258},"108.0","•",[80,629,631],{"x":615,"y":626,"fill":77,"style":166,"textAnchor":630},"start","Shave 300ms off fast desktop loads",[80,633,627],{"x":621,"y":634,"fill":77,"style":258},"132.0",[80,636,637],{"x":615,"y":634,"fill":77,"style":166,"textAnchor":630},"p50 improves from 1.9s to 1.6s",[80,639,627],{"x":621,"y":640,"fill":77,"style":258},"156.0",[80,642,643],{"x":615,"y":640,"fill":77,"style":166,"textAnchor":630},"p75 barely moves (2.8s to 2.7s)",[80,645,627],{"x":621,"y":646,"fill":77,"style":258},"180.0",[80,648,649],{"x":615,"y":646,"fill":77,"style":166,"textAnchor":630},"Verdict: still failing",[57,651],{"x":652,"y":615,"width":616,"height":617,"rx":618,"fill":110,"stroke":110,"style":253},"392.0",[80,654,656],{"x":655,"y":251,"fill":77,"style":622},"406.0","Target the slow quarter",[80,658,627],{"x":655,"y":626,"fill":77,"style":258},[80,660,662],{"x":661,"y":626,"fill":77,"style":166,"textAnchor":630},"420.0","Cut round trips for 4G mobile visits",[80,664,627],{"x":655,"y":634,"fill":77,"style":258},[80,666,667],{"x":661,"y":634,"fill":77,"style":166,"textAnchor":630},"Slow segment improves by 800ms",[80,669,627],{"x":655,"y":640,"fill":77,"style":258},[80,671,672],{"x":661,"y":640,"fill":77,"style":166,"textAnchor":630},"p75 moves from 2.8s to 2.3s",[80,674,627],{"x":655,"y":646,"fill":77,"style":258},[80,676,677],{"x":661,"y":646,"fill":77,"style":166,"textAnchor":630},"Verdict: passing",[169,679,681],{"id":680},"verification","Verification",[15,683,684,685,689],{},"After shipping, verify in three places and in this order: your RUM good-share (days), your RUM p75 (a week), then CrUX p75 (up to 28 days, as old data ages out of the window). If RUM improves but CrUX does not, compare populations — ",[19,686,688],{"href":687},"\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002F","CrUX vs your own RUM"," covers the usual reasons. Expect p75 changes in CrUX to appear gradually rather than as a step.",[169,691,693],{"id":692},"common-misreadings-of-the-p75-rule","Common Misreadings of the p75 Rule",[15,695,696,699],{},[180,697,698],{},"\"Our average is 1.8s, so we pass.\""," Averages are pulled down by fast visits and are not the assessed statistic. A page can average well under the threshold and fail at p75.",[15,701,702,705,706,709],{},[180,703,704],{},"\"We only need to fix 25% of users.\""," Not quite: you need fewer than 25% of ",[375,707,708],{},"visits"," over the threshold. A single user with many slow visits counts many times. Heavy users on old devices can dominate the slow tail.",[15,711,712,715],{},[180,713,714],{},"\"Lab Lighthouse passes, so p75 will pass.\""," Lighthouse emulates one device and one network profile, roughly a mid-tier phone on a slow 4G connection, and reports a single run. It says nothing about the distribution.",[15,717,718,721],{},[180,719,720],{},"\"Higher percentiles are irrelevant.\""," They are irrelevant to the pass\u002Ffail verdict, but they are where your most frustrated users are. Track p90\u002Fp95 as health metrics even though they do not decide the assessment.",[169,723,725],{"id":724},"faq","FAQ",[727,728,731,735],"details",{"className":729},[730],"faq-item",[732,733,734],"summary",{},"Is the 75th percentile computed per page or per site?",[15,736,737,738,742],{},"Both, separately. CrUX computes p75 per URL when a URL has enough traffic, and per origin (all pages aggregated) always. Search Console groups similar URLs and reports group-level status. The distinction is covered in ",[19,739,741],{"href":740},"\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fcrux-url-level-vs-origin-level-data\u002F","CrUX URL-level vs origin-level data",".",[727,744,746,749],{"className":745},[730],[732,747,748],{},"For INP, is it the p75 of all interactions or of pages?",[15,750,751],{},"Of page visits. Each page visit contributes one INP value — its worst interaction, ignoring one outlier per 50 interactions — and the p75 is taken across visits. A visit with a hundred fast clicks and one slow one contributes that one slow value.",[169,753,755],{"id":754},"related","Related",[174,757,758,765,772],{},[177,759,760,764],{},[19,761,763],{"href":762},"\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fpassing-desktop-but-failing-mobile-core-web-vitals\u002F","Passing desktop but failing mobile Core Web Vitals"," — why the two form factors have separate p75s.",[177,766,767,771],{},[19,768,770],{"href":769},"\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcomputing-p75-from-raw-rum-beacons\u002F","Computing p75 from raw RUM beacons"," — doing the percentile maths correctly in your own pipeline.",[177,773,774,778],{},[19,775,777],{"href":776},"\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fderiving-performance-budgets-from-core-web-vitals\u002F","Deriving performance budgets from Core Web Vitals"," — turning p75 targets into resource budgets.",[780,781,783],"script",{"type":782},"application\u002Fld+json","\n{\n  \"@context\": \"https:\u002F\u002Fschema.org\",\n  \"@type\": \"HowTo\",\n  \"name\": \"Why Core Web Vitals Use the 75th Percentile — and What That Means for Your Fixes\",\n  \"description\": \"The statistical reasoning behind the p75 boundary, what it means for which users you optimise for, and how to move it efficiently.\",\n  \"step\": [\n    {\n      \"@type\": \"HowToStep\",\n      \"position\": 1,\n      \"name\": \"Compute the distance to the boundary\",\n      \"text\": \"The useful number is not \\\"how slow is p75\\\" but \\\"what share of visits are above the threshold, and by how much\\\".\"\n    },\n    {\n      \"@type\": \"HowToStep\",\n      \"position\": 2,\n      \"name\": \"Identify who the slow quarter is\",\n      \"text\": \"Expected outcome: one or two segments — for example \\\"4GB devices on 4G loading product pages\\\" — account for most visits over the threshold.\"\n    },\n    {\n      \"@type\": \"HowToStep\",\n      \"position\": 3,\n      \"name\": \"Fix for the segment, then measure the whole\",\n      \"text\": \"Choose fixes that disproportionately help slow visits: fewer round trips (preconnect, Early Hints, inlined critical CSS) help high-latency connections far more than fast ones; less JavaScript helps low-memory devices more than flagships.\"\n    },\n    {\n      \"@type\": \"HowToStep\",\n      \"position\": 4,\n      \"name\": \"Watch the good-visit share, not just p75\",\n      \"text\": \"The p75 is a coarse indicator; the share of good visits moves continuously and responds sooner.\"\n    }\n  ]\n}\n",[780,785,786],{"type":782},"\n{\n  \"@context\": \"https:\u002F\u002Fschema.org\",\n  \"@type\": \"TechArticle\",\n  \"headline\": \"Why Core Web Vitals Use the 75th Percentile — and What That Means for Your Fixes\",\n  \"description\": \"The statistical reasoning behind the p75 boundary, what it means for which users you optimise for, and how to move it efficiently.\",\n  \"datePublished\": \"2026-10-06\",\n  \"dateModified\": \"2026-10-06\",\n  \"author\": {\n    \"@type\": \"Organization\",\n    \"name\": \"frontend-performance.com\"\n  },\n  \"publisher\": {\n    \"@type\": \"Organization\",\n    \"name\": \"frontend-performance.com\"\n  },\n  \"mainEntityOfPage\": {\n    \"@type\": \"WebPage\",\n    \"@id\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-core-web-vitals-use-the-75th-percentile\u002F\"\n  }\n}\n",[780,788,789],{"type":782},"\n{\n  \"@context\": \"https:\u002F\u002Fschema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 1,\n      \"name\": \"Home\",\n      \"item\": \"https:\u002F\u002Ffrontend-performance.com\u002F\"\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 2,\n      \"name\": \"Core Web Vitals & Measurement\",\n      \"item\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002F\"\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 3,\n      \"name\": \"Understanding Core Web Vitals Thresholds\",\n      \"item\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002F\"\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 4,\n      \"name\": \"Why Core Web Vitals Use the 75th Percentile\",\n      \"item\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-core-web-vitals-use-the-75th-percentile\u002F\"\n    }\n  ]\n}\n",[791,792,793],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .sjfSM, html code.shiki .sjfSM{--shiki-default:#66707B;--shiki-dark:#BDC4CC;--shiki-light:#66707B}html pre.shiki code .sPARh, html code.shiki .sPARh{--shiki-default:#A0111F;--shiki-dark:#FF9492;--shiki-light:#A0111F}html pre.shiki code .smZ65, html code.shiki .smZ65{--shiki-default:#622CBC;--shiki-dark:#DBB7FF;--shiki-light:#622CBC}html pre.shiki code .saISM, html code.shiki .saISM{--shiki-default:#0E1116;--shiki-dark:#F0F3F6;--shiki-light:#0E1116}html pre.shiki code .sQw3B, html code.shiki .sQw3B{--shiki-default:#702C00;--shiki-dark:#FFB757;--shiki-light:#702C00}html pre.shiki code .sPXB4, html code.shiki .sPXB4{--shiki-default:#023B95;--shiki-dark:#91CBFF;--shiki-light:#023B95}html pre.shiki code .sZ8jY, html code.shiki .sZ8jY{--shiki-default:#032563;--shiki-dark:#ADDCFF;--shiki-light:#032563}",{"title":313,"searchDepth":325,"depth":325,"links":795},[796,797,798,804,805,806,807],{"id":171,"depth":325,"text":172},{"id":204,"depth":325,"text":205},{"id":297,"depth":325,"text":298,"children":799},[800,801,802,803],{"id":302,"depth":331,"text":303},{"id":381,"depth":331,"text":382},{"id":423,"depth":331,"text":424},{"id":434,"depth":331,"text":435},{"id":680,"depth":325,"text":681},{"id":692,"depth":325,"text":693},{"id":724,"depth":325,"text":725},{"id":754,"depth":325,"text":755},"The statistical reasoning behind the p75 boundary, what it means for which users you optimise for, and how to move it efficiently.","md",{"slug":811,"type":812,"breadcrumb":813,"datePublished":821,"dateModified":821},"why-core-web-vitals-use-the-75th-percentile","article",[814,817,818,819],{"name":815,"url":816},"Home","\u002F",{"name":27,"url":26},{"name":22,"url":21},{"name":5,"url":820},"\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-core-web-vitals-use-the-75th-percentile\u002F","2026-10-06",true,"\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-core-web-vitals-use-the-75th-percentile",{"title":825,"description":826},"Why Core Web Vitals Are Judged at the 75th Percentile","Why p75, not the median or p95, decides whether LCP, INP and CLS pass — and how to reason about the slow quarter of visits that sets your score.","core-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-core-web-vitals-use-the-75th-percentile\u002Findex","em0RoE5YtgKTfbgbloSURr_9zkxQV2MegzAvO8RbQVM",[830,834],{"title":831,"path":832,"stem":833},"Passing Desktop but Failing Mobile Core Web Vitals","\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fpassing-desktop-but-failing-mobile-core-web-vitals","core-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fpassing-desktop-but-failing-mobile-core-web-vitals\u002Findex",{"title":835,"path":836,"stem":837},"Why Lab and Field LCP Disagree","\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-lab-and-field-lcp-disagree","core-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-lab-and-field-lcp-disagree\u002Findex",1791308074617]