[{"data":1,"prerenderedAt":529},["ShallowReactive",2],{"content:\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ":3,"surroundings:\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ":520},{"id":4,"title":5,"body":6,"description":499,"extension":500,"meta":501,"navigation":513,"path":514,"seo":515,"stem":518,"__hash__":519},"content\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002Findex.md","CrUX vs Your Own RUM",{"type":7,"value":8,"toc":491},"minimark",[9,14,38,41,46,75,208,212,218,224,230,241,245,250,320,323,329,335,365,368,378,382,385,388,391,395,407,416,425,434,443,452,456,476,481,484,487],[10,11,13],"h1",{"id":12},"crux-vs-your-own-rum-why-the-two-numbers-disagree","CrUX vs Your Own RUM: Why the Two Numbers Disagree",[15,16,17,18,23,24,28,29,33,34,37],"p",{},"This comparison belongs to ",[19,20,22],"a",{"href":21},"\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002F","RUM Beacons & Field Data Collection"," within ",[19,25,27],{"href":26},"\u002Fcore-web-vitals-measurement\u002F","Core Web Vitals & Measurement",". Your dashboard says p75 LCP is ",[30,31,32],"code",{},"2.1s",". Search Console, reading the Chrome UX Report, says ",[30,35,36],{},"2.6s"," and marks the origin as needing improvement. Someone concludes the instrumentation is broken and the project loses a week.",[15,39,40],{},"Neither number is wrong. They describe different populations over different windows with different aggregation rules, and once you can name the four differences you can reconcile them in an afternoon.",[42,43,45],"h2",{"id":44},"rapid-diagnosis-which-difference-is-yours","Rapid Diagnosis: Which Difference Is Yours?",[47,48,49,57,63,69],"ul",{},[50,51,52,56],"li",{},[53,54,55],"strong",{},"Compare browser mix first."," If more than a quarter of your traffic is Safari or Firefox, browser coverage alone can explain a gap of several hundred milliseconds.",[50,58,59,62],{},[53,60,61],{},"Check the window."," CrUX is a rolling 28-day distribution. If you deployed a fix ten days ago, your 24-hour number and CrUX cannot agree yet by construction.",[50,64,65,68],{},[53,66,67],{},"Check the unit."," CrUX reports per origin and, for popular URLs, per URL group. If your dashboard averages across every route, you are comparing a weighted mixture against a differently weighted mixture.",[50,70,71,74],{},[53,72,73],{},"Check delivery."," Divide beacons received by page views. Loss is rarely uniform: the slowest sessions are the most likely to close before the flush, so loss makes your p75 optimistic.",[76,77,84,85,92,93,92,97,92,101,92,110,92,117,92,126,92,133,92,138,92,143,92,148,92,151,92,155,92,158,92,161,92,165,92,168,92,174,92,178,92,181,92,185,92,189,92,195,92,199,92,204,92],"svg",{"xmlns":78,"viewBox":79,"width":80,"role":81,"ariaLabel":82,"style":83},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","0 0 760 260","100%","img","Waterfall showing a self-reported p75 of 2.1 seconds rising to 2.6 seconds as browser coverage, the 28-day window, aggregation unit and delivery loss are corrected for","height:auto;max-width:760px;display:block;margin:1.75rem auto;font-family:inherit;color:var(--fp-svg-ink)","\n  ",[86,87],"rect",{"className":88,"x":90,"y":90,"width":80,"height":80,"fill":91},[89],"svg-canvas","0","#ffffff"," ",[94,95,96],"title",{},"Reconciling a self-reported p75 with CrUX",[98,99,100],"desc",{},"Starting from 2.1 seconds, adding non-Chrome coverage, widening to the 28-day window, switching to origin-level aggregation and correcting delivery loss each add time until the number matches the 2.6 second CrUX figure.",[86,102],{"x":103,"y":103,"width":104,"height":105,"rx":106,"fill":107,"stroke":108,"style":109},"1","758","258","10","none","currentColor","stroke-opacity:0.18",[111,112,116],"text",{"x":113,"y":114,"fill":108,"style":115},"24","32","font-size:16px;font-weight:700","From 2.1s to 2.6s, one correction at a time",[86,118],{"x":119,"y":120,"width":121,"height":122,"rx":123,"fill":124,"stroke":124,"style":125},"40","60","120","30","4","#0466c8","fill-opacity:0.18;stroke-opacity:0.5",[111,127,132],{"x":128,"y":129,"fill":108,"style":130,"textAnchor":131},"100","80","font-size:11.5px;font-weight:700;","middle","your p75 2.10s",[86,134],{"x":135,"y":120,"width":136,"height":122,"rx":123,"fill":108,"stroke":108,"style":137},"170","90","fill-opacity:0.08;stroke-opacity:0.32",[111,139,142],{"x":140,"y":129,"fill":108,"style":141,"textAnchor":131},"215","font-size:11px;","+0.18s",[111,144,147],{"x":140,"y":145,"fill":108,"style":146,"textAnchor":131},"106","font-size:10.5px;fill-opacity:0.75","drop non-Chrome",[86,149],{"x":150,"y":120,"width":136,"height":122,"rx":123,"fill":108,"stroke":108,"style":137},"270",[111,152,154],{"x":153,"y":129,"fill":108,"style":141,"textAnchor":131},"315","+0.15s",[111,156,157],{"x":153,"y":145,"fill":108,"style":146,"textAnchor":131},"28-day window",[86,159],{"x":160,"y":120,"width":136,"height":122,"rx":123,"fill":108,"stroke":108,"style":137},"370",[111,162,164],{"x":163,"y":129,"fill":108,"style":141,"textAnchor":131},"415","+0.09s",[111,166,167],{"x":163,"y":145,"fill":108,"style":146,"textAnchor":131},"origin-level",[86,169],{"x":170,"y":120,"width":136,"height":122,"rx":123,"fill":171,"stroke":172,"style":173},"470","#ffc300","#b8860b","fill-opacity:0.28",[111,175,177],{"x":176,"y":129,"fill":108,"style":141,"textAnchor":131},"515","+0.08s",[111,179,180],{"x":176,"y":145,"fill":108,"style":146,"textAnchor":131},"delivery loss",[86,182],{"x":183,"y":120,"width":184,"height":122,"rx":123,"fill":124,"stroke":124,"style":125},"570","150",[111,186,188],{"x":187,"y":129,"fill":108,"style":130,"textAnchor":131},"645","CrUX 2.60s",[190,191],"line",{"x1":113,"y1":192,"x2":193,"y2":192,"stroke":108,"style":194},"140","736","stroke-opacity:0.2",[111,196,198],{"x":113,"y":135,"fill":108,"style":197},"font-size:11.5px;font-weight:700","Reconciled means explained, not identical.",[111,200,203],{"x":113,"y":201,"fill":108,"style":202},"194","font-size:11.5px;fill-opacity:0.85","A residual under about 5% is normal: sampling, opt-in population and rounding are not reproducible.",[111,205,207],{"x":113,"y":206,"fill":108,"style":202},"222","A residual above 20% after all four corrections is a real instrumentation bug worth chasing.",[42,209,211],{"id":210},"root-cause-analysis-the-four-structural-differences","Root Cause Analysis: The Four Structural Differences",[15,213,214,217],{},[53,215,216],{},"1. Browser and opt-in coverage."," CrUX contains Chrome users who have opted into usage statistics reporting, on public origins. Your beacon fires wherever the APIs exist. Safari does not report INP at all and reports LCP differently in places, so an iOS-heavy audience shifts your distribution relative to CrUX in ways that vary per metric.",[15,219,220,223],{},[53,221,222],{},"2. The aggregation window."," CrUX publishes a rolling 28-day distribution updated daily, and the monthly dataset is coarser still. Any dashboard reading a shorter window will diverge after every meaningful change, in the direction of the change, for up to four weeks.",[15,225,226,229],{},[53,227,228],{},"3. The aggregation unit."," CrUX is origin-level unless a URL has enough traffic for its own entry. Your table can slice per route. A site whose homepage is fast and whose search results are slow will report wildly different numbers depending on which routes are in scope and how they are weighted.",[15,231,232,235,236,240],{},[53,233,234],{},"4. Delivery loss and its bias."," Beacons that never arrive are disproportionately from sessions that ended abruptly — precisely the slow ones. A 15% loss concentrated in the tail can move a p75 by more than a hundred milliseconds, always making your number look better than reality. The delivery fixes are in ",[19,237,239],{"href":238},"\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fsending-web-vitals-with-sendbeacon-on-visibility-change\u002F","sending Web Vitals with sendBeacon",".",[42,242,244],{"id":243},"step-by-step-resolution-build-a-comparable-view","Step-by-Step Resolution: Build a Comparable View",[15,246,247],{},[53,248,249],{},"1. Filter your data to a CrUX-shaped population.",[251,252,257],"pre",{"className":253,"code":254,"language":255,"meta":256,"style":256},"language-sql shiki shiki-themes github-light-high-contrast github-dark-high-contrast github-light-high-contrast","-- Chrome only, 28-day window, origin-level, cold navigations only.\nSELECT approx_quantile(value, 0.75) AS p75_lcp, count(*) AS samples\nFROM rum_events\nWHERE name = 'LCP'\n  AND browser = 'Chrome'\n  AND nav_type = 'navigate'          -- exclude bfcache restores and reloads\n  AND ts > now() - interval '28 days';\n-- trade-off: this view is for reconciliation only. Keep your per-route,\n-- all-browser view as the engineering dashboard — it is more useful precisely\n-- because it is not CrUX-shaped.\n","sql","",[30,258,259,266,272,278,284,290,296,302,308,314],{"__ignoreMap":256},[260,261,263],"span",{"class":190,"line":262},1,[260,264,265],{},"-- Chrome only, 28-day window, origin-level, cold navigations only.\n",[260,267,269],{"class":190,"line":268},2,[260,270,271],{},"SELECT approx_quantile(value, 0.75) AS p75_lcp, count(*) AS samples\n",[260,273,275],{"class":190,"line":274},3,[260,276,277],{},"FROM rum_events\n",[260,279,281],{"class":190,"line":280},4,[260,282,283],{},"WHERE name = 'LCP'\n",[260,285,287],{"class":190,"line":286},5,[260,288,289],{},"  AND browser = 'Chrome'\n",[260,291,293],{"class":190,"line":292},6,[260,294,295],{},"  AND nav_type = 'navigate'          -- exclude bfcache restores and reloads\n",[260,297,299],{"class":190,"line":298},7,[260,300,301],{},"  AND ts > now() - interval '28 days';\n",[260,303,305],{"class":190,"line":304},8,[260,306,307],{},"-- trade-off: this view is for reconciliation only. Keep your per-route,\n",[260,309,311],{"class":190,"line":310},9,[260,312,313],{},"-- all-browser view as the engineering dashboard — it is more useful precisely\n",[260,315,317],{"class":190,"line":316},10,[260,318,319],{},"-- because it is not CrUX-shaped.\n",[15,321,322],{},"Expected outcome: the gap typically closes by half to two-thirds in one step.",[15,324,325,328],{},[53,326,327],{},"2. Weight by the same unit."," If CrUX reports your origin, compare against your origin-wide number, not the average of per-route p75s — an average of percentiles is not a percentile. Compute the percentile over the pooled sample.",[15,330,331,334],{},[53,332,333],{},"3. Estimate delivery loss and bound its effect."," Take beacons received over page views from an independent counter. If you are at 88% delivery, recompute your p75 after discarding the fastest 12% of samples: that is the pessimistic bound, and the truth sits between the two figures.",[251,336,338],{"className":253,"code":337,"language":255,"meta":256,"style":256},"-- Pessimistic bound: assume every lost beacon was slower than everything you kept.\nSELECT approx_quantile(value, 0.75 \u002F 0.88) AS p75_pessimistic\nFROM rum_events WHERE name = 'LCP' AND browser = 'Chrome';\n-- trade-off: this assumes ALL loss is in the slow tail, which overshoots.\n-- Use it as an upper bound to decide whether loss can explain the gap at all.\n",[30,339,340,345,350,355,360],{"__ignoreMap":256},[260,341,342],{"class":190,"line":262},[260,343,344],{},"-- Pessimistic bound: assume every lost beacon was slower than everything you kept.\n",[260,346,347],{"class":190,"line":268},[260,348,349],{},"SELECT approx_quantile(value, 0.75 \u002F 0.88) AS p75_pessimistic\n",[260,351,352],{"class":190,"line":274},[260,353,354],{},"FROM rum_events WHERE name = 'LCP' AND browser = 'Chrome';\n",[260,356,357],{"class":190,"line":280},[260,358,359],{},"-- trade-off: this assumes ALL loss is in the slow tail, which overshoots.\n",[260,361,362],{"class":190,"line":286},[260,363,364],{},"-- Use it as an upper bound to decide whether loss can explain the gap at all.\n",[15,366,367],{},"Expected outcome: a range, not a point — and usually enough to show the residual gap is small.",[15,369,370,373,374,377],{},[53,371,372],{},"4. Only then look for a bug."," If a residual above roughly 20% survives all four corrections, investigate the instrumentation itself: an observer registered after the metric already fired, a ",[30,375,376],{},"reportAllChanges"," configuration reporting interim values, or a sampling rule that quietly excludes a device class.",[42,379,381],{"id":380},"verification","Verification",[15,383,384],{},"Re-run the comparison weekly for a month and track the residual rather than the absolute difference. A stable residual under 5% means your pipeline is sound and the two numbers are simply measuring different things. A residual that grows over time points at drift — usually a new route excluded from instrumentation, or a delivery regression on one platform.",[15,386,387],{},"Confirm your view responds to reality in the right direction. Deploy a change you know affects LCP — a hero image format change is ideal — and watch: your 24-hour view should move within a day, and the CrUX-shaped 28-day view should move gradually over four weeks. If your short window does not move at all, you are not measuring what you think you are.",[15,389,390],{},"Keep both views on the dashboard permanently. Engineers should read the per-route, all-browser number because it tells them what to fix. Stakeholders should read the CrUX-shaped number because it is what search reporting will show them, and having both visible prevents the recurring argument about which one is real.",[42,392,394],{"id":393},"faq","FAQ",[396,397,400,404],"details",{"className":398},[399],"faq-item",[401,402,403],"summary",{},"Can I make my RUM exactly match CrUX?",[15,405,406],{},"No, and it is not a useful goal. CrUX draws on an opt-in Chrome population you cannot enumerate, applies its own weighting, and rounds published values. What you can achieve is a reconciliation — an explanation of the gap in terms of coverage, window, unit and loss — that leaves a residual small enough to be uninteresting. Chasing an exact match wastes time that belongs on the pages that are actually slow.",[396,408,410,413],{"className":409},[399],[401,411,412],{},"Which number should the team be held to?",[15,414,415],{},"CrUX, because it is what search reporting uses and it is not something you can accidentally bias. But diagnose and prioritise with your own data: it has the attribution, the route granularity and the device segmentation that CrUX lacks. Score with one, work with the other.",[396,417,419,422],{"className":418},[399],[401,420,421],{},"Why is my CLS so much worse in CrUX than in my own data?",[15,423,424],{},"Usually because your beacon is missing the shifts that happen late in a visit. CLS accumulates until the page is hidden, so any delivery mechanism that fires early — on load, or on a timer — systematically under-reports it. Confirm the flush happens on the hidden transition and that a second flush cannot reset the accumulated value.",[396,426,428,431],{"className":427},[399],[401,429,430],{},"How often should I run the reconciliation?",[15,432,433],{},"Weekly is enough once the pipeline is stable, and the thing to record is the residual rather than either raw number. A residual that stays flat means both systems are healthy; one that drifts upward over a month points at a change in your instrumentation — a new route not covered, a delivery regression on one platform, a sampling rule that quietly excluded a device class. Reconciling more often than the underlying 28-day window updates mostly measures noise.",[396,435,437,440],{"className":436},[399],[401,438,439],{},"Can I use CrUX data programmatically to automate this?",[15,441,442],{},"Yes — the public API exposes per-origin and per-URL distributions, so the comparison can be a scheduled job rather than a manual exercise. Pull the origin-level histogram, compute the same view from your own table, and store both with the residual. The value of automating it is not the time saved but the fact that a slowly growing gap becomes visible on a chart instead of surfacing as an argument months later.",[396,444,446,449],{"className":445},[399],[401,447,448],{},"What if my site has too little traffic for CrUX?",[15,450,451],{},"Then your own RUM is the only field signal you have, and it becomes more important rather than less. Below the reporting threshold there is no external scoreboard, so instrument thoroughly, keep sampling at 100%, and lean on the segmentation you can do that CrUX never could. Compare against your own history rather than against an external number, and treat the absolute thresholds as the target.",[42,453,455],{"id":454},"related","Related",[47,457,458,463,470],{},[50,459,460,462],{},[19,461,22],{"href":21}," — the pipeline whose output you are reconciling.",[50,464,465,469],{},[19,466,468],{"href":467},"\u002Fcore-web-vitals-measurement\u002Funderstanding-core-web-vitals-thresholds\u002Fwhy-lab-and-field-lcp-disagree\u002F","Why lab and field LCP disagree"," — the same question for synthetic versus real data.",[50,471,472,475],{},[19,473,474],{"href":238},"Sending Web Vitals with sendBeacon"," — remove the delivery loss that biases your p75 optimistic.",[477,478,480],"script",{"type":479},"application\u002Fld+json","\n{\n  \"@context\": \"https:\u002F\u002Fschema.org\",\n  \"@type\": \"HowTo\",\n  \"name\": \"Reconcile your RUM p75 with CrUX\",\n  \"description\": \"Explain the gap between in-house field data and the Chrome UX Report by correcting for browser coverage, the 28-day window, the aggregation unit and beacon delivery loss.\",\n  \"step\": [\n    { \"@type\": \"HowToStep\", \"position\": 1, \"name\": \"Filter to a CrUX-shaped population\", \"text\": \"Restrict to Chrome, cold navigations and a 28-day window before comparing.\", \"url\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002F#step-by-step-resolution-build-a-comparable-view\" },\n    { \"@type\": \"HowToStep\", \"position\": 2, \"name\": \"Match the aggregation unit\", \"text\": \"Compute the percentile over the pooled origin sample rather than averaging per-route percentiles.\", \"url\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002F#step-by-step-resolution-build-a-comparable-view\" },\n    { \"@type\": \"HowToStep\", \"position\": 3, \"name\": \"Bound delivery loss\", \"text\": \"Measure beacons received over page views and recompute a pessimistic percentile to bound the loss effect.\", \"url\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002F#step-by-step-resolution-build-a-comparable-view\" },\n    { \"@type\": \"HowToStep\", \"position\": 4, \"name\": \"Investigate only the residual\", \"text\": \"Treat a residual above roughly 20% after all corrections as an instrumentation bug worth chasing.\", \"url\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002F#step-by-step-resolution-build-a-comparable-view\" }\n  ]\n}\n",[477,482,483],{"type":479},"\n{\n  \"@context\": \"https:\u002F\u002Fschema.org\",\n  \"@type\": \"TechArticle\",\n  \"headline\": \"CrUX vs Your Own RUM: Why the Two Numbers Disagree\",\n  \"description\": \"The four structural differences between the Chrome UX Report and in-house field data, and a procedure for reconciling them.\",\n  \"datePublished\": \"2026-08-01\",\n  \"dateModified\": \"2026-08-01\",\n  \"author\": { \"@type\": \"Organization\", \"name\": \"frontend-performance.com\" },\n  \"publisher\": { \"@type\": \"Organization\", \"name\": \"frontend-performance.com\" },\n  \"mainEntityOfPage\": { \"@type\": \"WebPage\", \"@id\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002F\" }\n}\n",[477,485,486],{"type":479},"\n{\n  \"@context\": \"https:\u002F\u002Fschema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [\n    { \"@type\": \"ListItem\", \"position\": 1, \"name\": \"Home\", \"item\": \"https:\u002F\u002Ffrontend-performance.com\u002F\" },\n    { \"@type\": \"ListItem\", \"position\": 2, \"name\": \"Core Web Vitals & Measurement\", \"item\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002F\" },\n    { \"@type\": \"ListItem\", \"position\": 3, \"name\": \"RUM Beacons & Field Data Collection\", \"item\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002F\" },\n    { \"@type\": \"ListItem\", \"position\": 4, \"name\": \"CrUX vs Your Own RUM\", \"item\": \"https:\u002F\u002Ffrontend-performance.com\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002F\" }\n  ]\n}\n",[488,489,490],"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);}",{"title":256,"searchDepth":268,"depth":268,"links":492},[493,494,495,496,497,498],{"id":44,"depth":268,"text":45},{"id":210,"depth":268,"text":211},{"id":243,"depth":268,"text":244},{"id":380,"depth":268,"text":381},{"id":393,"depth":268,"text":394},{"id":454,"depth":268,"text":455},"Both numbers can be right at once. A reconciliation procedure for the four differences that explain almost every gap between CrUX and your own field data.","md",{"slug":502,"type":503,"breadcrumb":504,"datePublished":512,"dateModified":512},"crux-vs-your-own-rum-why-the-numbers-differ","article",[505,508,509,510],{"name":506,"url":507},"Home","\u002F",{"name":27,"url":26},{"name":22,"url":21},{"name":5,"url":511},"\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002F","2026-08-01",true,"\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ",{"title":516,"description":517},"CrUX vs Your Own RUM: Why the Numbers Differ","Four structural reasons your in-house p75 disagrees with the Chrome UX Report — browser coverage, the 28-day window, aggregation unit and delivery loss — and how to reconcile them.","core-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fcrux-vs-your-own-rum-why-the-numbers-differ\u002Findex","vVHI8Ng8Lkwe6pfECgADm6scTku_zxoPvFJDF9FBJe4",[521,525],{"title":522,"path":523,"stem":524,"children":-1},"Attributing INP to a Component","\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fattributing-inp-to-a-component-with-the-attribution-build","core-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fattributing-inp-to-a-component-with-the-attribution-build\u002Findex",{"title":526,"path":527,"stem":528,"children":-1},"Sending Web Vitals with sendBeacon on visibilitychange","\u002Fcore-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fsending-web-vitals-with-sendbeacon-on-visibility-change","core-web-vitals-measurement\u002Frum-beacons-and-field-data-collection\u002Fsending-web-vitals-with-sendbeacon-on-visibility-change\u002Findex",1785622406838]