<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged crux</title>
<link>https://coderlegion.com/tag/crux</link>
<description>Powered by Question2Answer</description>
<item>
<title>Partial Page Loads in CrUX: What Field Data Includes (and Excludes)</title>
<link>https://coderlegion.com/31522/partial-page-loads-in-crux-what-field-data-includes-and-excludes</link>
<description>&lt;p&gt;A Lighthouse or PageSpeed Insights laboratory run is designed to finish. The synthetic client navigates, waits for paints, and reports Largest Contentful Paint, Interaction to Next Paint, and Cumulative Layout Shift for that controlled pass. Chrome User Experience Report (CrUX) field percentiles are not the same experiment run later. They aggregate many real Chrome experiences, including visits that never complete a “full page load” story the way a lab profile does.&lt;/p&gt;
&lt;p&gt;That gap is what people mean when they ask how CrUX handles partial page loads or partial sessions. Lab green and field amber on the same URL often coexist because the field bucket mixes completed navigations with abandoned tabs, background starts, back/forward cache restores, and (for many SPAs until soft-navigation metrics are available in reporting tools) long lives on a single document URL. What follows maps what field data includes and excludes, how that differs from Lighthouse, and what to put in a client report when the clocks disagree.&lt;/p&gt;
&lt;p&gt;Keep &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;When to Use Synthetic vs Real User Monitoring&lt;/a&gt; open for the broader lab-versus-field split, and &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-no-cls-inp-for-url&quot;&gt;When PageSpeed Insights Shows No CLS or INP for Your URL&lt;/a&gt; when metric rows are missing while other field data exists. Thresholds and “good” ranges sit in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026&quot;&gt;What Are Core Web Vitals? A Practical Guide for 2026&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;what-partial-page-loads-means-in-crux-field-data&quot;&gt;What “partial page loads” means in CrUX field data&lt;/h3&gt;
&lt;p&gt;CrUX does not sell a public metric literally named “partial session.” In practice the phrase covers real experiences that diverge from a completed, foreground, full-document navigation of the kind Lighthouse scripts. Chrome’s &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/methodology&quot;&gt;CrUX methodology&lt;/a&gt; starts from eligible user experiences, then aggregates them into page-level and origin-level distributions. An “experience” is the metrics collected during a page view, not a synthetic end-to-end script that always waits for a quiet network.&lt;/p&gt;
&lt;p&gt;Agencies usually meet four shapes of “partial” that get blurred in one client chat:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Abandoned or interrupted loads.&lt;/strong&gt; The user navigates away, closes the tab, or loses connectivity before the lab-style quiet window, yet field may still record early paints or interactions that did fire.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visibility and background starts.&lt;/strong&gt; Pages opened in a background tab, or hidden before LCP settles, follow different LCP rules than a focused lab run.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non-&lt;code&gt;navigate&lt;/code&gt; restorations.&lt;/strong&gt; Back/forward cache and prerender activations are real visits for users, but not every timer (especially Time to First Byte) is collected the same way as a cold document load.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SPA soft navigations.&lt;/strong&gt; Route changes that look like new pages to users may still be attributed to the initial document URL in classic CrUX Core Web Vitals until soft-navigation metrics are used.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Those shapes are why a retainer that only re-runs PageSpeed Insights after a deploy can look fixed in the lab while Search Console or the CrUX panel stays amber. The field distribution is answering a different question: what happened across many real visits, including ones that never matched the synthetic path. Lab colour and field colour are both honest answers; they are just answering different populations.&lt;/p&gt;
&lt;h3 id=&quot;what-crux-includes-that-a-lighthouse-run-never-sees&quot;&gt;What CrUX includes that a Lighthouse run never sees&lt;/h3&gt;
&lt;p&gt;Field data is population data. Origin-level CrUX includes eligible experiences across the origin’s pages (subject to discoverability and popularity rules). Page-level CrUX needs enough samples for that URL. Neither side downsamples for convenience: Google has stated that aggregates use the eligible experiences that arrive, weighted by how often those experiences happen, not by how tidy they look in a waterfall.&lt;/p&gt;
&lt;p&gt;Lighthouse does not visit the site as a busy shopper who opens five tabs, restores from history, or arrives via a soft navigation after checkout. It runs one (or a few) controlled profiles, which is a strength for regression testing: comparable conditions, repeatable budgets, dated history. It is a weakness if someone treats the lab pass as proof that field percentiles must move this week. &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights vs Automated Monitoring&lt;/a&gt; covers when scheduled lab history is still the accountable layer; partial-load mismatch is one reason field can lag or disagree even when lab looks clean.&lt;/p&gt;
&lt;p&gt;CrUX also folds some complexity into the top-level page. Content in iframes is not reported as a separate CrUX URL; it can still move metrics on the parent page the user sees. Agencies debugging “our LCP is an embedded player” need that distinction labelled in the report, not buried in a screenshot caption.&lt;/p&gt;
&lt;h3 id=&quot;what-crux-excludes-or-stops-measuring-mid-experience&quot;&gt;What CrUX excludes (or stops measuring) mid-experience&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Background and visibility.&lt;/strong&gt; Not every browser event becomes a Core Web Vitals sample the way teams expect. Google tools that measure LCP do not treat a page loaded entirely in the background as a normal user-perceived load. The Largest Contentful Paint API can still emit entries in awkward visibility cases; the metric used for CrUX and related tooling ignores experiences where LCP is not a fair foreground story. A lab run that always starts focused will never reproduce that filter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interaction cut-off for LCP candidates.&lt;/strong&gt; Once the user taps, scrolls, or presses a key, browsers stop treating later paints as new LCP candidates for analysis purposes. Real sessions often interact early, so the field stop can arrive sooner than in a synthetic run that sits idle until the largest element paints. That alone can separate a calm lab LCP from a noisier field distribution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Timers that skip some navigation types.&lt;/strong&gt; CrUX &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/blog/crux-navigation-types&quot;&gt;navigation types&lt;/a&gt; show how often visits are ordinary navigates, cached document loads, reloads, back/forward, bfcache restores, or prerenders. Core Web Vitals such as LCP are measured for bfcache restores in ways that match user perception of a new visit. Time to First Byte in CrUX is collected on full page loads, not on every restore path, so TTFB sample sizes and stories can diverge from LCP on the same origin. Treating every field metric as if it sampled the same set of navigations is a reporting error.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eligibility gaps.&lt;/strong&gt; Origins or URLs with no CrUX data yet are a different problem: not enough eligible samples or discoverability failures. That is covered in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/why-crux-has-no-data-client-site-eligibility&quot;&gt;Why CrUX Has No Data for Your Site&lt;/a&gt;. Partial-load nuance only applies once field rows exist.&lt;/p&gt;
&lt;h3 id=&quot;lab-vs-field-core-web-vitals-when-loads-are-incomplete&quot;&gt;Lab vs field Core Web Vitals when loads are incomplete&lt;/h3&gt;
&lt;p&gt;Use an explicit comparison when a client asks why the lab card is green and the field card is not. The table below is the pairing we keep in decks so nobody treats PageSpeed Insights lab colour as a CrUX forecast. Each row answers one question clients usually ask in the same meeting.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Question &lt;/th&gt;&lt;th&gt;Lab (Lighthouse / PageSpeed Insights lab) &lt;/th&gt;&lt;th&gt;Field (CrUX)&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;What is measured? &lt;/td&gt;&lt;td&gt;One controlled navigation under a fixed profile &lt;/td&gt;&lt;td&gt;Many real Chrome experiences over a rolling window&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Does the run always “finish”? &lt;/td&gt;&lt;td&gt;Yes, by design &lt;/td&gt;&lt;td&gt;No; users abandon, hide tabs, or restore from cache&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Device and network mix? &lt;/td&gt;&lt;td&gt;Emulated / fixed &lt;/td&gt;&lt;td&gt;Real devices and networks in the eligible sample&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;SPA route changes? &lt;/td&gt;&lt;td&gt;Usually one document load per run &lt;/td&gt;&lt;td&gt;Historically attributed to the initial URL; experimental soft-navigation metrics arriving in CrUX&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Best use &lt;/td&gt;&lt;td&gt;Regression after deploy; budgets you can retest tomorrow &lt;/td&gt;&lt;td&gt;Ranking-facing experience; catch journeys lab never walked&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Lab versus field Core Web Vitals disagreements are often population disagreements, not “PageSpeed Insights is broken,” so say that plainly and then show which URLs you tested in the lab and which templates dominate traffic in analytics or Search Console groups. Aligning synthetic coverage with revenue and conversion paths does not force CrUX to match overnight. It does stop the team from optimising a quiet brochure URL while field pain sits on checkout.&lt;/p&gt;
&lt;p&gt;When field categories move slowly after a fix, the rolling window and pipeline lag matter too. &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window&quot;&gt;Why Your Core Web Vitals Fix Is Not in CrUX Yet&lt;/a&gt; covers the 28-day collection habit. Partial-load mix is an additional reason a single green lab screenshot is weak evidence for “field will be green by Friday.”&lt;/p&gt;
&lt;h3 id=&quot;crux-vs-lighthouse-same-url-different-experience-set&quot;&gt;CrUX vs Lighthouse: same URL, different experience set&lt;/h3&gt;
&lt;p&gt;CrUX versus Lighthouse comparisons fail when people assume both tools sample the same visits. Lighthouse answers: under these conditions, what did this URL do? CrUX answers: among eligible Chrome users on this page or origin, what did the distribution of experiences look like?&lt;/p&gt;
&lt;p&gt;Lighthouse will not invent a bfcache restore fraction, and CrUX will not pause the internet so every shopper waits for your hero image the way a lab profile does. Both can be correct. Client decks that print one Performance score next to one field category without labels invite false conclusions, so prefer two short labelled lines: lab result with date, strategy, and URL; field result with form factor and the collection window the tool shows.&lt;/p&gt;
&lt;p&gt;Scheduled lab history still earns its keep, because partial sessions make field distributions harder to debug from a single paste. Agencies need a trail of comparable synthetic runs on the templates that matter. That is monitoring, not a substitute for CrUX.&lt;/p&gt;
&lt;h3 id=&quot;soft-navigations-and-spa-routes-historical-gap-and-october-2026-experiments&quot;&gt;Soft navigations and SPA routes: historical gap and October 2026 experiments&lt;/h3&gt;
&lt;p&gt;For years, SPA architectures complicated Core Web Vitals because soft navigations looked like new pages to users while platform APIs still treated the experience as one document life. CrUX methodology documents that limitation and points to &lt;a rel=&quot;nofollow&quot; href=&quot;https://web.dev/articles/vitals-spa-faq&quot;&gt;How SPA architectures affect Core Web Vitals&lt;/a&gt; on web.dev. In that model, route transitions did not reset classic Core Web Vitals the way a full navigation would, so field scores could look harsh on long-lived documents or oddly attributed to landing URLs.&lt;/p&gt;
&lt;p&gt;As of October 2026, Chrome has started publishing experimental CrUX metrics that include soft navigations, with an aim to graduate them later. Tooling catch-up will take time. Until your reporting stack shows those experimental series clearly, keep two habits: (1) do not pretend classic CrUX already splits every SPA route as its own page URL; (2) use first-party RUM or the newer soft-navigation APIs when you need route-level debugging ahead of CrUX tool support. Label experimental field rows as experimental in client language so nobody treats a preview series as Search Console fact.&lt;/p&gt;
&lt;h3 id=&quot;what-agencies-should-report-when-lab-is-green-and-field-is-amber&quot;&gt;What agencies should report when lab is green and field is amber&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What we measured in the lab.&lt;/strong&gt; Use a short script so the conversation stays honest across accounts. Dated Lighthouse or PageSpeed Insights lab runs on [list URLs], mobile and desktop as separate rows, under a fixed profile. Those runs completed by design, which is useful for regression and useless as a CrUX forecast on its own.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What field data is saying.&lt;/strong&gt; CrUX (via PageSpeed Insights, Search Console, or the API) reflects a mix of real experiences, including visits that abandon early, change visibility, restore from bfcache, or stay on long SPA documents. Field amber does not mean the lab tool lied. It means the population of experiences is wider than one synthetic pass.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What we are not claiming.&lt;/strong&gt; We are not saying the next lab refresh will force field percentiles this week. Collection windows and experience mix both move slowly relative to a deploy day. Partial loads are part of that mix rather than a bug in the PDF export.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What we will do next.&lt;/strong&gt; Keep synthetic budgets on the journey URLs that match analytics and revenue, and re-check CrUX on a fixed schedule. If SPA routes dominate the product, add route-aware real-user monitoring or soft-navigation debugging rather than only re-running homepage Lighthouse. That script pairs with synthetic versus real-user roles in the monitoring guide linked earlier, and partial page loads are one more reason to layer clocks instead of picking a favourite colour on a single card.&lt;/p&gt;
&lt;h3 id=&quot;faq&quot;&gt;FAQ&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Do CrUX percentiles include users who leave before the page finishes loading?&lt;/strong&gt;&lt;br&gt;
Field data includes eligible experiences that occur in real browsing, not only visits that reach a lab-style quiet network. Early abandons can still contribute paints or interactions that fired. That is one reason distributions differ from a completed Lighthouse pass.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why is lab LCP good when field LCP is poor?&lt;/strong&gt;&lt;br&gt;
Common causes include different devices and networks, background or visibility filters, interaction timing, navigation-type mix (including bfcache), SPA attribution, and URL selection that does not match traffic. Treat the disagreement as a population problem first. Then debug the templates that dominate real visits, not only the quiet URL that scored well in the lab.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Does bfcache count as a page load in CrUX?&lt;/strong&gt;&lt;br&gt;
Users experience bfcache restores as navigations. CrUX reports navigation-type fractions and measures Core Web Vitals for restores in defined ways. Some supporting timers such as TTFB are tied to full page loads, so do not assume every metric samples the same navigations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Are SPA soft navigations in CrUX yet?&lt;/strong&gt;&lt;br&gt;
Historically, soft navigations were not separate classic Core Web Vitals page views in CrUX. Experimental soft-navigation metrics began appearing in CrUX around October 2026, but tooling catch-up varies. Confirm what your dashboard actually plots before you brief a client.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Should we stop lab testing and trust only CrUX?&lt;/strong&gt;&lt;br&gt;
No. Lab remains the regression and budget layer you can re-run on demand, while CrUX remains the public field distribution. Agencies need both labelled, plus journey-aligned URL lists.&lt;/p&gt;
&lt;h3 id=&quot;cta&quot;&gt;CTA&lt;/h3&gt;
&lt;p&gt;When lab and field disagree, name the experience set: completed synthetic runs versus CrUX’s mix of partial, restored, and long-lived visits. Align scheduled lab checks with the URLs users actually travel, keep budgets on those templates, and re-read field categories on a fixed calendar rather than after every deploy. For eligibility gaps with no field rows at all, use the CrUX no-data guide. For turning one-off PageSpeed Insights into a schedule across clients, start with &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/sign-up&quot;&gt;Apogee Watcher&lt;/a&gt; or run a public check from the homepage tools.&lt;/p&gt;
&lt;h3 id=&quot;references&quot;&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/methodology&quot;&gt;CrUX methodology&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/methodology/metrics&quot;&gt;CrUX metrics&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/blog/crux-navigation-types&quot;&gt;Navigation types now available in CrUX&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://web.dev/articles/lcp&quot;&gt;Largest Contentful Paint (LCP)&lt;/a&gt; (web.dev)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://web.dev/articles/vitals-spa-faq&quot;&gt;How SPA architectures affect Core Web Vitals&lt;/a&gt; (web.dev)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://groups.google.com/a/chromium.org/g/chrome-ux-report&quot;&gt;Chrome UX Report discussions&lt;/a&gt; (Chromium; partial load sessions thread, May 2026)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;When to Use Synthetic vs Real User Monitoring&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-no-cls-inp-for-url&quot;&gt;When PageSpeed Insights Shows No CLS or INP for Your URL&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights vs Automated Monitoring: When Manual Checks Aren't Enough&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026&quot;&gt;What Are Core Web Vitals? A Practical Guide for 2026&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/why-crux-has-no-data-client-site-eligibility&quot;&gt;Why CrUX Has No Data for Your Site&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window&quot;&gt;Why Your Core Web Vitals Fix Is Not in CrUX Yet&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/partial-page-loads-crux-field-data-includes-excludes&quot;&gt;Apogee Watcher&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/31522/partial-page-loads-in-crux-what-field-data-includes-and-excludes</guid>
<pubDate>Sat, 17 Oct 2026 16:13:27 +0000</pubDate>
</item>
<item>
<title>Why CrUX Has No Data for Your Site</title>
<link>https://coderlegion.com/31020/why-crux-has-no-data-for-your-site</link>
<description>&lt;p&gt;“No data” in the Chrome User Experience Report (CrUX) is not a single bug. It is a set of eligibility gates. Google only publishes field percentiles when enough opted-in Chrome sessions meet privacy and quality rules for that origin or URL. PageSpeed Insights and Search Console inherit those gaps. Lab scores from Lighthouse can still look complete on the same screen, which is why teams often treat a blank field block as a tool failure instead of an eligibility outcome.&lt;/p&gt;
&lt;p&gt;The sections below walk those gates for client sites: when an origin is missing from CrUX entirely, when a URL is thin while the origin still has data, what to say to the client, and what to monitor until field samples exist. Keep &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-no-cls-inp-for-url&quot;&gt;When PageSpeed Insights Shows No CLS or INP for Your URL&lt;/a&gt; open for metric-level gaps on a URL that may already show other field rows. For how lab and field clocks differ, use &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026&quot;&gt;What Are Core Web Vitals? A Practical Guide for 2026&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;When to Use Synthetic vs Real User Monitoring&lt;/a&gt; as context.&lt;/p&gt;
&lt;h3 id=&quot;what-no-crux-data-means-on-a-site&quot;&gt;What “no CrUX data” means on a site&lt;/h3&gt;
&lt;p&gt;CrUX is Google’s public field dataset for how real Chrome users experience popular destinations. It is also the field source behind PageSpeed Insights “Discover what your real users are experiencing” and related Search Console Core Web Vitals views. When CrUX has no data for a query, tools typically show a missing field section, an API &lt;code&gt;NOT_FOUND&lt;/code&gt; style response, or a message that Chrome UX Report data was not found. That is different from a red or amber field category. There is no percentile to classify yet.&lt;/p&gt;
&lt;p&gt;Agencies usually meet three patterns of “no data” that get mixed together in client chat: (1) &lt;strong&gt;origin absent&lt;/strong&gt; (&lt;code&gt;https://www.client.com&lt;/code&gt; or the wrong scheme/host variant is not in the dataset at all); (2) &lt;strong&gt;URL thin, origin present&lt;/strong&gt; (the homepage or a landing path has no URL-level field rows, while origin-level field data still exists); (3) &lt;strong&gt;metric missing&lt;/strong&gt; (some field metrics appear and others do not, for example LCP present and INP absent). Pattern (3) is covered in the PageSpeed Insights “no CLS or INP” guide linked above. What follows focuses on (1) and the client conversation around (2). The practical question is not whether PageSpeed Insights is broken; it is which eligibility gate failed, and what you measure until field data exists. Naming the gate early stops the team from chasing Lighthouse scores that never create field rows.&lt;/p&gt;
&lt;h3 id=&quot;chrome-ux-report-eligibility-user-origin-and-page&quot;&gt;Chrome UX Report eligibility: user, origin, and page&lt;/h3&gt;
&lt;p&gt;Google’s &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/methodology&quot;&gt;CrUX methodology&lt;/a&gt; describes three layers that must line up before an experience counts toward page-level field data in PageSpeed Insights and the CrUX API: the &lt;strong&gt;user&lt;/strong&gt;, the &lt;strong&gt;origin&lt;/strong&gt;, and the &lt;strong&gt;page&lt;/strong&gt;. Experiences that meet user and origin rules but not page rules can still feed origin-level data. Pages and origins appear and disappear automatically as eligibility changes. You cannot manually submit a site for inclusion.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;User eligibility&lt;/strong&gt; means the visit came from a Chrome user whose settings allow contribution to the statistics dataset. Not every browser, privacy mode, or visitor is included. CrUX is a sample, not a full count of all traffic in analytics.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Origin eligibility&lt;/strong&gt; needs two properties: the origin must be &lt;strong&gt;publicly discoverable&lt;/strong&gt;, and it must be &lt;strong&gt;sufficiently popular&lt;/strong&gt;. Discoverability is about whether the root of the origin can be treated as a public page (indexing and successful HTTP status on the root matter; blocked or failing roots are a common trap). Popularity means enough eligible experiences across the origin’s pages for Google to publish anonymised distributions. The exact threshold is not disclosed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Page eligibility&lt;/strong&gt; adds that the specific URL must also be popular enough for URL-level distributions. A thin blog post or campaign landing page can lack URL-level CrUX while the origin still has field data. That is expected on long-tail templates.&lt;/p&gt;
&lt;p&gt;HTTP versus HTTPS and &lt;code&gt;www&lt;/code&gt; versus apex are different origins. So are subdomains. &lt;code&gt;https://shop.example.com&lt;/code&gt; does not inherit CrUX from &lt;code&gt;https://www.example.com&lt;/code&gt;. When someone says “the client site has no CrUX data,” name the origin string you queried, including scheme and host.&lt;/p&gt;
&lt;h3 id=&quot;why-an-origin-is-missing-from-crux-entirely&quot;&gt;Why an origin is missing from CrUX entirely&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Wrong origin string.&lt;/strong&gt; When tools say the origin is not in the Chrome UX Report, check the origin string before you promise a timeline for field data, then move on to discoverability and sample size. Teams often query &lt;code&gt;http://&lt;/code&gt;, omit or add &lt;code&gt;www&lt;/code&gt;, or paste a path when the API expects an origin. The CrUX API docs recommend comparing the navigable final URL after redirects with the origin you requested. A 404-style “chrome ux report data not found” response is common when the string is simply wrong.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Root not publicly discoverable.&lt;/strong&gt; If the root redirects in a way that systems treat as undiscoverable, or if the root fails indexing / HTTP status checks, the origin can drop out even when inner URLs get traffic. Chromium discussion threads have long noted redirect-heavy roots as a reason PageSpeed Insights may show URL-level data after following a redirect while origin-level data is missing. Fix discoverability before you blame sample size alone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not enough eligible Chrome traffic.&lt;/strong&gt; Small sites, brand-new launches, sites that behave like private apps, and niches with little opted-in Chrome usage may never meet popularity. Google does not publish the cut-off. In our experience, waiting a few more PageSpeed Insights refreshes does not create an origin that is structurally ineligible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not a ranking penalty by itself.&lt;/strong&gt; Missing CrUX data is not the same as Search saying the site is slow. It means Google does not have enough public field evidence to publish Core Web Vitals percentiles for that origin or URL slice. Search Console may still show limited or grouped signals. Do not invent a field fail from a blank PageSpeed Insights field block.&lt;/p&gt;
&lt;h3 id=&quot;url-level-gaps-when-the-origin-still-has-field-data&quot;&gt;URL-level gaps when the origin still has field data&lt;/h3&gt;
&lt;p&gt;If origin-level field data exists but the client’s main URL shows no URL-level CrUX, you are usually looking at popularity at the page layer, not a dead origin. Homepage and key templates often qualify first; checkout steps, locale paths, and campaign URLs lag. PageSpeed Insights may still show origin-level field categories while the URL field rows are empty. Label that clearly in reports so nobody presents a Core Web Vitals pass for a thin URL using only origin-level fallback.&lt;/p&gt;
&lt;p&gt;When the gap is “this metric is missing but others appear,” use the dedicated guide for missing CLS or INP field rows. When the gap is “this URL has no field block but the origin does,” keep synthetic monitoring on that URL and wait for samples. Do not treat origin green as URL green in a client report; say which level the numbers come from.&lt;/p&gt;
&lt;h3 id=&quot;what-to-tell-the-client-when-field-data-is-unavailable&quot;&gt;What to tell the client when field data is unavailable&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What we know.&lt;/strong&gt; Use a short script so the conversation stays honest across accounts. CrUX has no (or incomplete) field data for [origin or URL] right now. That usually means eligibility: discoverability, traffic sample size, or the wrong host/scheme, not a broken lab test. We should confirm the origin string before we talk about traffic volume.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What we do not claim.&lt;/strong&gt; We are not saying the page passes or fails Core Web Vitals in the field. We do not have the percentiles yet. Lab scores alone cannot fill that gap in a report to the client.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What we will watch instead.&lt;/strong&gt; Scheduled lab tests on the homepage and other priority URLs (mobile and desktop as separate rows), with budgets and alerts, until URL-level or origin-level field data appears. We will re-check CrUX on a fixed schedule and say when field rows show up. That gives the retainer a measurable trail while field data is empty.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What we need from them.&lt;/strong&gt; Confirm the public origin (HTTPS, www or apex), that the root is indexable, and which URLs matter for the retainer. If the root redirects oddly or blocks indexing, that is an eligibility fix, not a Lighthouse tweak. Without a correct public root, more lab runs will not create CrUX rows. Pair that script with &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights vs Automated Monitoring&lt;/a&gt;: one-off PageSpeed Insights explains a moment, and scheduled runs explain change over time when field data cannot.&lt;/p&gt;
&lt;h3 id=&quot;what-to-monitor-instead-synthetic-budgets-on-priority-urls&quot;&gt;What to monitor instead: synthetic budgets on priority URLs&lt;/h3&gt;
&lt;p&gt;Until field data is available, synthetic (lab) monitoring is what you can report against week to week. Pick a small URL set: homepage, primary landing templates, and checkout or lead paths. Run the same lab profile on a schedule, store history, and alert when LCP, CLS, or related lab metrics cross a budget. &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/how-to-schedule-pagespeed-monitoring-test-frequency-priority-portfolio&quot;&gt;How to Schedule PageSpeed Monitoring&lt;/a&gt; covers frequency and priority across a portfolio. Synthetic versus real-user roles are spelled out in the synthetic vs RUM guide linked earlier.&lt;/p&gt;
&lt;p&gt;Lab data will not replace field eligibility, but it stops the retainer from depending on a blank CrUX panel. When origin or URL field data appears, add it to the same report without throwing away the lab history that covered the gap. In Apogee Watcher, scheduled PageSpeed Insights–backed checks keep that lab trail across client sites while CrUX field rows are absent or partial.&lt;/p&gt;
&lt;h3 id=&quot;faq-1&quot;&gt;FAQ&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Does “CrUX no data” mean the site is slow?&lt;/strong&gt;&lt;br&gt;
No. It means Google does not have enough eligible Chrome samples (or the origin is not publicly discoverable in the way CrUX requires) to publish field percentiles. Lab tools can still diagnose the template while you wait for eligibility.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can we force a site into the Chrome UX Report?&lt;/strong&gt;&lt;br&gt;
No. Inclusion is automatic when eligibility is met. You cannot manually submit an origin. Fix discoverability and grow real Chrome traffic, then re-check later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why does PageSpeed Insights show lab scores but no field section?&lt;/strong&gt;&lt;br&gt;
Lab data comes from Lighthouse on demand. Field data comes from CrUX only when eligibility passes. Both can appear on one PageSpeed Insights page, and either side can be missing independently.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Are subdomains included with the main domain?&lt;/strong&gt;&lt;br&gt;
No. Each origin is separate. &lt;code&gt;https://blog.example.com&lt;/code&gt; needs its own eligibility. Query the origin the client actually cares about, including scheme and host.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How long until field data appears after a launch?&lt;/strong&gt;&lt;br&gt;
There is no public SLA. CrUX uses a rolling collection window and popularity thresholds. New or low-traffic origins can stay empty for a long time. Plan synthetic monitoring from day one rather than waiting for CrUX before you set budgets.&lt;/p&gt;
&lt;h3 id=&quot;cta-1&quot;&gt;CTA&lt;/h3&gt;
&lt;p&gt;If a client site shows CrUX no data, name the origin, check discoverability and host/scheme, and say clearly that field percentiles are unavailable. Then put synthetic budgets on the priority URLs so the retainer still has numbers to report on a schedule. For metric-level PageSpeed Insights gaps, use the no CLS/INP guide. For turning one-off PageSpeed Insights into a schedule across many clients, start with &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/sign-up&quot;&gt;Apogee Watcher&lt;/a&gt; or run a check on a public URL from the homepage tools.&lt;/p&gt;
&lt;h3 id=&quot;references-1&quot;&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/methodology&quot;&gt;CrUX methodology&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux&quot;&gt;Overview of CrUX&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/guides/crux-api&quot;&gt;How to use the CrUX API&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-no-cls-inp-for-url&quot;&gt;When PageSpeed Insights Shows No CLS or INP for Your URL&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026&quot;&gt;What Are Core Web Vitals? A Practical Guide for 2026&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;When to Use Synthetic vs Real User Monitoring&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights vs Automated Monitoring: When Manual Checks Aren't Enough&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/how-to-schedule-pagespeed-monitoring-test-frequency-priority-portfolio&quot;&gt;How to Schedule PageSpeed Monitoring: Test Frequency and Priority Across a Portfolio&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/why-crux-has-no-data-client-site-eligibility&quot;&gt;Apogee Watcher&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/31020/why-crux-has-no-data-for-your-site</guid>
<pubDate>Wed, 14 Oct 2026 06:57:44 +0000</pubDate>
</item>
<item>
<title>Core Web Vitals Benchmarks for Shopify Stores (2026 Data)</title>
<link>https://coderlegion.com/27086/core-web-vitals-benchmarks-for-shopify-stores-2026-data</link>
<description>&lt;p&gt;Shopify's own theme performance table still shows median pass rates in the 80–97% range for LCP, INP, CLS, and “all Core Web Vitals.” Open a multi-page Lighthouse sample on a real storefront and the story often flips: mobile Performance scores cluster near 50, lab LCP averages stretch well past Google's 2.5 s “good” line, and unused JavaScript shows up on almost every domain. Both views can be true. Theme-level CrUX aggregates describe shops that look like a given theme under field conditions. Portfolio monitoring needs URL-level and multi-page evidence, because apps, media, and collection templates decide what shoppers feel.&lt;/p&gt;&lt;p&gt;What follows separates those clocks, publishes a reproducible sample from Shopify leads we analyse in Apogee Watcher, and points at the tuning work that actually moves scores. For store-level fixes after you read the numbers, pair this with &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/shopify-speed-optimization-core-web-vitals-ecommerce&quot;&gt;Shopify Speed Optimization: Core Web Vitals Guide for E-Commerce&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;what-counts-as-a-reliable-shopify-core-web-vitals-benchmark-in-2026&quot; class=&quot;scroll-mt-24&quot;&gt;What counts as a reliable Shopify Core Web Vitals benchmark in 2026&lt;/h2&gt;&lt;p&gt;For Core Web Vitals, the strongest public field source remains the Chrome UX Report (CrUX). Google's methodology is clear about inclusion: pages and origins must be publicly discoverable and popular enough, data comes from eligible Chrome users, and thresholds are read at the 75th percentile over a rolling window. That is why Search Console and the field section of PageSpeed Insights matter for ranking and real-user claims, while a single Lighthouse run remains a diagnostic tool.&lt;/p&gt;&lt;p&gt;Google's published thresholds are unchanged for the three metrics:&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Good (p75)&lt;/th&gt;&lt;th&gt;Needs improvement&lt;/th&gt;&lt;th&gt;Poor&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LCP&lt;/td&gt;&lt;td&gt;≤ 2.5 s&lt;/td&gt;&lt;td&gt;2.5 s – 4.0 s&lt;/td&gt;&lt;td&gt;&amp;gt; 4.0 s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;INP&lt;/td&gt;&lt;td&gt;≤ 200 ms&lt;/td&gt;&lt;td&gt;200 ms – 500 ms&lt;/td&gt;&lt;td&gt;&amp;gt; 500 ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CLS&lt;/td&gt;&lt;td&gt;≤ 0.1&lt;/td&gt;&lt;td&gt;0.1 – 0.25&lt;/td&gt;&lt;td&gt;&amp;gt; 0.25&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;An origin or URL group passes Core Web Vitals when all three sit in the good bucket at p75. A Lighthouse Performance score is a different artefact: it blends lab timings under a throttled environment and is useful for regression detection, not as a substitute for CrUX pass/fail. If you need a refresher on the three metrics themselves, start with &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026&quot;&gt;What Are Core Web Vitals? A Practical Guide for 2026&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;A useful Shopify benchmark therefore states four things up front: which clock (CrUX field versus Lighthouse lab), which URLs (homepage only versus collections, PDPs, cart), how scores are aggregated (single URL versus median or mean across pages), and the collection window. Platform marketing often quotes theme or “average store” figures without that scaffolding. Agencies managing twenty Shopify clients need the scaffolding more than another green screenshot.&lt;/p&gt;&lt;p&gt;Sources:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/methodology&quot;&gt;CrUX methodology&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developers.google.com/search/docs/appearance/core-web-vitals&quot;&gt;Understanding Core Web Vitals and Google search results&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://performance.shopify.com/blogs/blog/what-is-crux-and-how-to-use-it&quot;&gt;Shopify on using CrUX for real user performance&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;shopify-theme-level-crux-context-from-public-data&quot; class=&quot;scroll-mt-24&quot;&gt;Shopify theme-level CrUX context from public data&lt;/h2&gt;&lt;p&gt;Shopify's Performance team publishes aggregated Core Web Vitals performance by theme so merchants can compare popular themes under real Chrome traffic rather than a single lab screenshot. As of the 18 Aug 2026 update on their theme table, the median theme-level pass rates across listed themes were:&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Median % of shops passing (theme table)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Largest Contentful Paint (LCP)&lt;/td&gt;&lt;td&gt;90.3%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cumulative Layout Shift (CLS)&lt;/td&gt;&lt;td&gt;93.4%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Interaction to Next Paint (INP)&lt;/td&gt;&lt;td&gt;97.1%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Views passing all CWVs&lt;/td&gt;&lt;td&gt;82.0%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Those figures combine devices, cover recent theme versions with enough eligible shops, and still describe theme-level cohorts, not “every live Shopify store with every app enabled.” The same table shows wide floors and ceilings: all-CWV pass rates range from roughly 37% to 95% depending on the theme row, which is the first warning that platform averages do not replace store-specific monitoring.&lt;/p&gt;&lt;p&gt;Third-party research often cites a lower all-CWV pass rate for Shopify as a whole (for example ~45% in vendor CrUX summaries). The gap between ~45% store-wide claims and ~82% median theme-level “all CWVs” is not a mystery if samples, devices, and theme filters differ, so treat both as orientation and do not merge them into one scorecard column.&lt;/p&gt;&lt;p&gt;Source: &lt;a rel=&quot;nofollow&quot; href=&quot;https://performance.shopify.com/pages/theme-performance-data-table&quot;&gt;Aggregated Core Web Vitals performance by Shopify Theme&lt;/a&gt;&lt;/p&gt;&lt;h2 id=&quot;multi-page-lab-sample-from-watchers-shopify-users&quot; class=&quot;scroll-mt-24&quot;&gt;Multi-page lab sample from Watcher's Shopify users&lt;/h2&gt;&lt;p&gt;We keep Shopify-tagged storefronts in Watcher and run multi-page PageSpeed Insights analyses that store both Lighthouse lab metrics and CrUX field payloads when Google returns them. For this snapshot we took the latest domain report per Shopify-tagged lead with an aggregated payload (n = 64 stores; reports generated between April and September 2026). Each report averages Lighthouse metrics across the URLs selected for that domain (median 17 analysed pages per store; 1,070 page runs in total). Values below are store-level averages of lab runs, not single-URL CrUX p75s.&lt;/p&gt;&lt;h3&gt;Mobile and desktop Lighthouse Performance&lt;/h3&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Slice&lt;/th&gt;&lt;th&gt;Mobile Performance (avg)&lt;/th&gt;&lt;th&gt;Desktop Performance (avg)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Minimum&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;25th percentile&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Median&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;69&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;75th percentile&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;83&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Maximum&lt;/td&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;99&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mean&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;69&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Half of the sample sits at or below a mobile Performance average of about 51. Only 32 of 64 stores clear a mobile average of 50, and 9 of 64 clear 70; none of the 64 store averages reached 90 on mobile. Desktop is kinder in the same runs (median about 69), which matches what agencies see when a client forwards a desktop-only screenshot and assumes the site is fine.&lt;/p&gt;&lt;h3&gt;Mobile lab Core Web Vitals timings (store averages)&lt;/h3&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Median&lt;/th&gt;&lt;th&gt;75th percentile&lt;/th&gt;&lt;th&gt;Notes in this sample&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LCP (s)&lt;/td&gt;&lt;td&gt;9.8&lt;/td&gt;&lt;td&gt;14.5&lt;/td&gt;&lt;td&gt;0 / 64 store averages ≤ 2.5 s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;INP (s)&lt;/td&gt;&lt;td&gt;0.30&lt;/td&gt;&lt;td&gt;0.41&lt;/td&gt;&lt;td&gt;15 / 64 store averages ≤ 0.20 s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CLS&lt;/td&gt;&lt;td&gt;0.02&lt;/td&gt;&lt;td&gt;0.07&lt;/td&gt;&lt;td&gt;55 / 64 store averages ≤ 0.1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;CLS is the bright spot: layout stability is often already in a good lab band even when LCP is not. LCP is the structural problem. Multi-page mobile averages in the 8–15 s range do not mean every URL fails CrUX at that severity, but they do mean Lighthouse is consistently flagging heavy LCP candidates across templates. That is the signal agencies should take into a remediation backlog before arguing about a two-point Performance score change.&lt;/p&gt;&lt;h3&gt;CrUX origin categories when field data exists&lt;/h3&gt;&lt;p&gt;Not every lead has origin-level CrUX on the report. Where mobile origin overall category was present (n = 27), we saw 14 FAST, 8 AVERAGE, and 5 SLOW. Origin LCP was FAST on 22 of those stores, INP FAST on 22, and CLS FAST on 23. Field data is often healthier than multi-page lab averages on the same domains, especially for INP and CLS, because lab throttling and averaging across many templates punish media-heavy PDPs that may still pass origin-level CrUX when popular URLs are lighter.&lt;/p&gt;&lt;h3&gt;Recurring Lighthouse opportunities&lt;/h3&gt;&lt;p&gt;Across the 64 latest reports, the most common mobile opportunities were:&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Opportunity&lt;/th&gt;&lt;th&gt;Stores where it appeared&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reduce unused JavaScript&lt;/td&gt;&lt;td&gt;61 / 64&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reduce unused CSS&lt;/td&gt;&lt;td&gt;52 / 64&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Avoid multiple page redirects&lt;/td&gt;&lt;td&gt;26 / 64&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Minify JavaScript&lt;/td&gt;&lt;td&gt;17 / 64&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Minify CSS&lt;/td&gt;&lt;td&gt;10 / 64&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Unused JavaScript is effectively the default Shopify finding in this sample. Theme code, app scripts, analytics, and personalisation layers compete for the same main thread that INP and Total Blocking Time care about. For ecommerce metric priorities beyond the three Core Web Vitals, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/ecommerce-performance-monitoring-what-metrics-matter&quot;&gt;Performance Monitoring for E-Commerce: What Metrics Matter Most&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;why-shopify-core-web-vitals-still-vary-store-to-store&quot; class=&quot;scroll-mt-24&quot;&gt;Why Shopify Core Web Vitals still vary store to store&lt;/h2&gt;&lt;p&gt;Two shops on the same theme can land in different buckets for reasons that never appear in a theme marketing page:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;App footprint. Review widgets, loyalty, chat, upsell drawers, and A/B tools add script weight on collection and PDP templates.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Media strategy. Hero video, large product galleries, and unprioritised LCP images dominate mobile LCP in lab runs.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Template mix. A clean homepage can hide a slow cart drawer or a script-heavy collection grid when you only test one URL.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Headless versus online store. Hydrogen or other custom storefronts change what source-level theme IDs reveal and how caching works.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Traffic shape and geography. CrUX inclusion and p75 values move with real visitor mix; lab runs do not.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Platform-level medians help set expectations in a roadmap review. They do not replace scheduled checks on the URLs that drive revenue. That is why we treat theme tables as context and multi-page samples as the operating view.&lt;/p&gt;&lt;h2 id=&quot;global-dtc-shopify-cohort-lab-and-crux&quot; class=&quot;scroll-mt-24&quot;&gt;Global DTC Shopify cohort (lab and CrUX)&lt;/h2&gt;&lt;p&gt;We also tracked a public high-visibility cohort tagged &lt;code&gt;shopify-benchmark&lt;/code&gt; in Watcher (Allbirds, SKIMS, Kylie Cosmetics, Fashion Nova, Brooklinen, ColourPop, Steve Madden, Glossier, Netflix Shop, Mattel Creations). Six of those domains had multi-page Watcher lab reports in the lead pull above. On 7 Sep 2026 we also pulled mobile origin Chrome UX Report field data for the cohort via PageSpeed Insights (&lt;code&gt;originLoadingExperience&lt;/code&gt;), so lab and field sit in separate tables rather than one mixed scorecard.&lt;/p&gt;&lt;h3&gt;Lab multi-page averages (Watcher reports)&lt;/h3&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Brand&lt;/th&gt;&lt;th&gt;Domain&lt;/th&gt;&lt;th&gt;Mobile Performance (avg)&lt;/th&gt;&lt;th&gt;Desktop Performance (avg)&lt;/th&gt;&lt;th&gt;Mobile LCP avg (s)&lt;/th&gt;&lt;th&gt;Mobile CLS avg&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fashion Nova&lt;/td&gt;&lt;td&gt;fashionnova.com&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;8.6&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Allbirds&lt;/td&gt;&lt;td&gt;allbirds.com&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;53&lt;/td&gt;&lt;td&gt;15.6&lt;/td&gt;&lt;td&gt;0.02&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SKIMS&lt;/td&gt;&lt;td&gt;skims.com&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;td&gt;9.1&lt;/td&gt;&lt;td&gt;0.04&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Brooklinen&lt;/td&gt;&lt;td&gt;brooklinen.com&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;31.1&lt;/td&gt;&lt;td&gt;0.15&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kylie Cosmetics&lt;/td&gt;&lt;td&gt;kyliecosmetics.com&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;26.8&lt;/td&gt;&lt;td&gt;0.22&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Netflix Shop&lt;/td&gt;&lt;td&gt;netflix.shop&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;41&lt;/td&gt;&lt;td&gt;15.7&lt;/td&gt;&lt;td&gt;0.15&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;These lab averages punish product-heavy template sets under throttling. They are not claims that every shopper sees a Performance score in the mid-20s.&lt;/p&gt;&lt;h3&gt;Mobile CrUX at origin (PageSpeed Insights, Sep 2026)&lt;/h3&gt;&lt;p&gt;Origin metrics are Chrome UX Report p75 values for phone traffic across the origin. CLS is shown on the usual 0–1 scale (PSI returns hundredths). “Passes all CWVs” means LCP, INP, and CLS are all in the good (FAST) bucket at p75.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Brand&lt;/th&gt;&lt;th&gt;Domain&lt;/th&gt;&lt;th&gt;Origin overall&lt;/th&gt;&lt;th&gt;LCP p75&lt;/th&gt;&lt;th&gt;INP p75&lt;/th&gt;&lt;th&gt;CLS p75&lt;/th&gt;&lt;th&gt;Passes all CWVs?&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Allbirds&lt;/td&gt;&lt;td&gt;allbirds.com&lt;/td&gt;&lt;td&gt;Good&lt;/td&gt;&lt;td&gt;1.49 s (Good)&lt;/td&gt;&lt;td&gt;176 ms (Good)&lt;/td&gt;&lt;td&gt;0.00 (Good)&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ColourPop&lt;/td&gt;&lt;td&gt;colourpop.com&lt;/td&gt;&lt;td&gt;Needs improvement&lt;/td&gt;&lt;td&gt;1.66 s (Good)&lt;/td&gt;&lt;td&gt;212 ms (Needs improvement)&lt;/td&gt;&lt;td&gt;0.15 (Needs improvement)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kylie Cosmetics&lt;/td&gt;&lt;td&gt;kyliecosmetics.com&lt;/td&gt;&lt;td&gt;Needs improvement&lt;/td&gt;&lt;td&gt;2.02 s (Good)&lt;/td&gt;&lt;td&gt;319 ms (Needs improvement)&lt;/td&gt;&lt;td&gt;0.04 (Good)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Netflix Shop&lt;/td&gt;&lt;td&gt;netflix.shop&lt;/td&gt;&lt;td&gt;Needs improvement&lt;/td&gt;&lt;td&gt;2.06 s (Good)&lt;/td&gt;&lt;td&gt;221 ms (Needs improvement)&lt;/td&gt;&lt;td&gt;0.13 (Needs improvement)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Steve Madden&lt;/td&gt;&lt;td&gt;stevemadden.com&lt;/td&gt;&lt;td&gt;Needs improvement&lt;/td&gt;&lt;td&gt;2.09 s (Good)&lt;/td&gt;&lt;td&gt;245 ms (Needs improvement)&lt;/td&gt;&lt;td&gt;0.10 (Good)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mattel Creations&lt;/td&gt;&lt;td&gt;creations.mattel.com&lt;/td&gt;&lt;td&gt;Needs improvement&lt;/td&gt;&lt;td&gt;2.10 s (Good)&lt;/td&gt;&lt;td&gt;314 ms (Needs improvement)&lt;/td&gt;&lt;td&gt;0.02 (Good)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Glossier&lt;/td&gt;&lt;td&gt;glossier.com&lt;/td&gt;&lt;td&gt;Needs improvement&lt;/td&gt;&lt;td&gt;2.17 s (Good)&lt;/td&gt;&lt;td&gt;239 ms (Needs improvement)&lt;/td&gt;&lt;td&gt;0.09 (Good)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fashion Nova&lt;/td&gt;&lt;td&gt;fashionnova.com&lt;/td&gt;&lt;td&gt;Needs improvement&lt;/td&gt;&lt;td&gt;2.52 s (Needs improvement)&lt;/td&gt;&lt;td&gt;360 ms (Needs improvement)&lt;/td&gt;&lt;td&gt;0.20 (Needs improvement)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SKIMS&lt;/td&gt;&lt;td&gt;skims.com&lt;/td&gt;&lt;td&gt;Poor&lt;/td&gt;&lt;td&gt;2.64 s (Needs improvement)&lt;/td&gt;&lt;td&gt;204 ms (Needs improvement)&lt;/td&gt;&lt;td&gt;0.32 (Poor)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Brooklinen&lt;/td&gt;&lt;td&gt;brooklinen.com&lt;/td&gt;&lt;td&gt;Needs improvement&lt;/td&gt;&lt;td&gt;3.49 s (Needs improvement)&lt;/td&gt;&lt;td&gt;287 ms (Needs improvement)&lt;/td&gt;&lt;td&gt;0.13 (Needs improvement)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Homepage URL-level field rows can differ from origin (for example Fashion Nova’s homepage LCP was Good while origin LCP was Needs improvement), so use origin for brand-level scorecards and URL groups for template work.&lt;/p&gt;&lt;p&gt;Allbirds is the clearest split in this cohort: Watcher multi-page lab Performance averaged about 34, with lab LCP around 16 s, while mobile origin CrUX passed all three Core Web Vitals. Brand scale does not guarantee a field pass either, because only Allbirds cleared all three origin metrics in this snapshot and INP (and sometimes CLS) kept most of the other famous stores out of the good bucket even when LCP looked acceptable. If a client asks “are we slower than the big Shopify brands?”, compare their CrUX origin or Search Console URL groups to this table, and keep Lighthouse for regression hunting on the same money-path templates.&lt;/p&gt;&lt;p&gt;At the other end of our wider Watcher sample, smaller or carefully trimmed storefronts can clear mobile lab averages in the mid-70s to mid-80s (for example Beauty Connections, Valmont Wear, and Bäckerei Matzker in this pull). Those shops still run on Shopify. The gap versus the famous lab cohort is mostly implementation load: fewer competing scripts, lighter heroes, and fewer template surprises across the multi-page set.&lt;/p&gt;&lt;h2 id=&quot;lab-lighthouse-scores-versus-crux-field-data-on-shopify&quot; class=&quot;scroll-mt-24&quot;&gt;Lab Lighthouse scores versus CrUX field data on Shopify&lt;/h2&gt;&lt;p&gt;Use both clocks without mixing them in one column:&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Question&lt;/th&gt;&lt;th&gt;Prefer&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Does Google’s page experience view look healthy?&lt;/td&gt;&lt;td&gt;CrUX / Search Console / PSI field (p75)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Did last week’s theme or app change regress templates?&lt;/td&gt;&lt;td&gt;Scheduled Lighthouse (lab), same URL set&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Are we comparing to Shopify’s theme table?&lt;/td&gt;&lt;td&gt;Theme CrUX aggregates (device mix, theme filter)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Are we comparing agency client A to client B?&lt;/td&gt;&lt;td&gt;Same tool, same URL roles, same aggregation&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Watcher domain reports already separate lab score cards from field methodology notes (median of URL-level p75s where present, origin badge when available). Keep that separation in client decks. A green origin badge with a mobile Performance average of 40 is not a contradiction; it is a prompt to inspect which templates the lab average is punishing. For portfolio monitoring design, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/core-web-vitals-monitoring-checklist-for-agencies&quot;&gt;Core Web Vitals Monitoring Checklist for Agencies&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/how-to-set-up-automated-pagespeed-monitoring&quot;&gt;How to Set Up Automated PageSpeed Monitoring&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;what-to-fix-first-when-shopify-lighthouse-opportunities-repeat&quot; class=&quot;scroll-mt-24&quot;&gt;What to fix first when Shopify Lighthouse opportunities repeat&lt;/h2&gt;&lt;p&gt;When unused JavaScript appears on nearly every store, a useful remediation order is usually:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Measure the money paths: homepage, top collections, top PDPs, cart, and checkout-adjacent templates, not a single marketing URL.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Cut or defer app scripts that are not required for first paint or first interaction on those templates.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Fix LCP candidates explicitly (image dimensions, priority hints, hero media weight) before chasing a Performance score vanity target.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Re-check CLS when banners, consent UI, or late-injected reviews shift layout after load.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Re-run the same URL set on a schedule so you can tell a real regression from run noise.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The detailed Shopify playbook for those steps lives in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/shopify-speed-optimization-core-web-vitals-ecommerce&quot;&gt;Shopify Speed Optimization: Core Web Vitals Guide for E-Commerce&lt;/a&gt;. Benchmark numbers stay honest when prioritisation stops here and the how-to lives in that companion post.&lt;/p&gt;&lt;h2 id=&quot;how-to-run-a-repeatable-shopify-cwv-cohort-each-month&quot; class=&quot;scroll-mt-24&quot;&gt;How to run a repeatable Shopify CWV cohort each month&lt;/h2&gt;&lt;p&gt;A fixed process keeps each monthly refresh comparable:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Scope: mobile-first; LCP, INP, CLS; optional Lighthouse Performance as a lab companion metric.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;URL roles: same template set each month (home, collection, PDP, cart at minimum).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Aggregation: decide in advance whether you report origin CrUX, URL-level field, or multi-page lab averages, and never mix them in one table column.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Guardrails: mark insufficient CrUX explicitly; record tool, date, and page count.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Reporting: publish median cohort values, share of stores passing field CWV when available, top gains and regressions, and hypotheses (apps, media, theme) labelled as hypotheses.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;You can start wi
&lt;/p&gt;</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27086/core-web-vitals-benchmarks-for-shopify-stores-2026-data</guid>
<pubDate>Wed, 16 Sep 2026 08:04:00 +0000</pubDate>
</item>
<item>
<title>When LCP Moves and Nobody Deployed: Browser Release Cadence and Your 28-Day Field Window</title>
<link>https://coderlegion.com/25864/when-lcp-moves-and-nobody-deployed-browser-release-cadence-and-your-28-day-field-window</link>
<description>&lt;p&gt;Field Largest Contentful Paint in PageSpeed Insights can move while your release calendar stays empty. Chrome User Experience Report (CrUX) data is always a 28-day rolling average of real Chrome sessions. From &lt;strong&gt;Chrome 153&lt;/strong&gt; Stable on &lt;strong&gt;8 September 2026&lt;/strong&gt;, Chrome also moves to a &lt;strong&gt;two-week&lt;/strong&gt; release cycle, so that same window can include more than one browser major with different paint and interaction behaviour. An amber field band after a quiet week is often &lt;strong&gt;population mix&lt;/strong&gt; (who updated Chrome, which channel they use, how fast auto-update spreads), not proof that engineering shipped a regression on Tuesday.&lt;/p&gt;&lt;p&gt;We already separated pipeline lag from rolling-window lag in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/crux-pipeline-delays-late-field-data-client-reports&quot;&gt;CrUX pipeline delays and late field data&lt;/a&gt; and explained why a verified fix can sit inside a green lab run and an amber field band in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window&quot;&gt;why your Core Web Vitals fix is not in CrUX yet&lt;/a&gt;. The gap here is the third clock agencies rarely label: &lt;strong&gt;browser release cadence inside the field window&lt;/strong&gt;. When nobody deployed but field LCP drifts, you need release annotations on the same calendar as app, CDN, tag manager, and RUM changes, sample thresholds before you slice by exact Chrome major, and scheduled lab runs as same-week proof that the origin did not change.&lt;/p&gt;&lt;h2 id=&quot;why-field-lcp-can-move-when-nobody-deployed&quot; class=&quot;scroll-mt-24&quot;&gt;Why field LCP can move when nobody deployed&lt;/h2&gt;&lt;p&gt;CrUX and PageSpeed Insights field sections describe what &lt;strong&gt;real Chrome users&lt;/strong&gt; experienced over roughly the past 28 days, not what your staging build measured yesterday. If the mix of Chrome versions, devices, networks, and journeys inside that window changes, the published p75 can move even when your HTML, CSS, and JavaScript bundles are byte-identical to last month.&lt;/p&gt;&lt;p&gt;Three non-deploy causes show up often in agency tickets:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Browser updates.&lt;/strong&gt; A new Stable or Extended Stable channel release changes paint timing, image decoding, lazy-loading heuristics, or interaction scheduling for the same page. Users who auto-update mid-window contribute post-update sessions beside pre-update sessions in one aggregate.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Channel skew.&lt;/strong&gt; Beta, Dev, and Canary users are a thin slice for most retail sites, but enterprise Extended Stable cohorts can lag Stable by weeks. A retail origin and a locked-down corporate audience can read different field bands on the same URL template.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Traffic mix.&lt;/strong&gt; Campaign traffic, geography shifts, or seasonality change which templates dominate Chrome sessions. Origin-level field LCP can move when the homepage share of traffic falls while a slower category listing gains share, with no code change on either template.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Lab runs on a fixed URL answer whether &lt;strong&gt;your deploy&lt;/strong&gt; changed the critical path. Field CrUX answers what &lt;strong&gt;Chrome users actually experienced&lt;/strong&gt; across versions and journeys. Treating a field move as a deploy regression without checking browser and traffic mix sends engineering on a hunt for a commit that does not exist.&lt;/p&gt;&lt;h2 id=&quot;chrome-release-cycle-and-core-web-vitals-two-week-stable-from-chrome-153&quot; class=&quot;scroll-mt-24&quot;&gt;Chrome release cycle and Core Web Vitals: two-week Stable from Chrome 153&lt;/h2&gt;&lt;p&gt;Google announced in March 2026 that Chrome will move from a four-week Stable cadence to a &lt;strong&gt;two-week&lt;/strong&gt; cycle, starting with &lt;strong&gt;Chrome 153&lt;/strong&gt; Stable on &lt;strong&gt;8 September 2026&lt;/strong&gt; (&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/blog/chrome-two-week-release&quot;&gt;Chrome two-week release blog&lt;/a&gt;). Beta and Stable promotions arrive every two weeks on Desktop, Android, and iOS. &lt;strong&gt;Extended Stable&lt;/strong&gt; keeps an eight-week cycle for enterprises that need longer validation windows (&lt;a rel=&quot;nofollow&quot; href=&quot;https://support.google.com/chrome/a/answer/16942104?hl=en&quot;&gt;Chrome Enterprise Extended Stable&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;The schedule compresses milestones quickly. Under the new table in Google's post, &lt;strong&gt;Chrome 153&lt;/strong&gt; Stable cuts on &lt;strong&gt;25 August 2026&lt;/strong&gt; with public Stable on &lt;strong&gt;8 September&lt;/strong&gt;, while &lt;strong&gt;Chrome 154&lt;/strong&gt; Stable follows on &lt;strong&gt;22 September&lt;/strong&gt;. Firefox is running a similar experiment around &lt;strong&gt;Firefox 155&lt;/strong&gt; from &lt;strong&gt;1 September 2026&lt;/strong&gt; (see community coverage linked from &lt;a rel=&quot;nofollow&quot; href=&quot;https://csswizardry.com/2026/08/web-perf-wednesday-006-faster-browser-releases-change-your-rum-population/&quot;&gt;CSS Wizardry Web-Perf Wednesday 006&lt;/a&gt;). Performance teams that only annotated application releases in 2025 will need browser rows on the same calendar in 2026.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Release&lt;/th&gt;&lt;th&gt;Old four-week Stable (illustrative)&lt;/th&gt;&lt;th&gt;New two-week Stable (from Google table)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chrome 153&lt;/td&gt;&lt;td&gt;Tue 22 Sep 2026&lt;/td&gt;&lt;td&gt;**Tue 8 Sep 2026**&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chrome 154&lt;/td&gt;&lt;td&gt;Tue 20 Oct 2026&lt;/td&gt;&lt;td&gt;**Tue 22 Sep 2026**&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Smaller, more frequent browser releases are good for security and platform velocity. For field reporting they mean &lt;strong&gt;more opportunities for a 28-day CrUX window to span two majors&lt;/strong&gt; with different Web Vitals behaviour, without any change on your origin.&lt;/p&gt;&lt;h2 id=&quot;how-a-28-day-crux-window-can-span-multiple-browser-majors&quot; class=&quot;scroll-mt-24&quot;&gt;How a 28-day CrUX window can span multiple browser majors&lt;/h2&gt;&lt;p&gt;CrUX aggregates opted-in Chrome sessions into a rolling 28-day window. At any query, PageSpeed Insights and the CrUX API return a &lt;code&gt;collectionPeriod&lt;/code&gt; with &lt;code&gt;firstDate&lt;/code&gt; and &lt;code&gt;endDate&lt;/code&gt; covering that blend (&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/api&quot;&gt;CrUX API documentation&lt;/a&gt;). The window advances daily: oldest day drops, newest day enters. There is no switch that flips the entire population to &quot;only Chrome 153 sessions&quot; on Stable release day.&lt;/p&gt;&lt;p&gt;Under a four-week browser cadence, one 28-day field window often covered &lt;strong&gt;one&lt;/strong&gt; new Stable major plus tail versions. Under a two-week cadence, the same window can include &lt;strong&gt;two&lt;/strong&gt; adjacent majors (for example 152 and 153) while auto-update propagates. Each major can shift LCP, INP, or CLS for the same URL because the browser pipeline changed, not because your LCP element or server timing changed.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Clock&lt;/th&gt;&lt;th&gt;What moves&lt;/th&gt;&lt;th&gt;Typical agency mistake&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;28-day CrUX window&lt;/td&gt;&lt;td&gt;Rolling average of Chrome sessions&lt;/td&gt;&lt;td&gt;Treating field p75 as &quot;yesterday's score&quot;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chrome Stable cadence&lt;/td&gt;&lt;td&gt;Browser majors entering the window&lt;/td&gt;&lt;td&gt;Ignoring browser rows on the release calendar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;App / CDN deploy&lt;/td&gt;&lt;td&gt;Origin HTML, assets, cache rules&lt;/td&gt;&lt;td&gt;Blaming deploys for browser-driven field drift&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Lab schedule&lt;/td&gt;&lt;td&gt;Controlled PageSpeed Insights / Lighthouse runs&lt;/td&gt;&lt;td&gt;Expecting lab to explain field without dates&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;For metric definitions and why field percentiles behave differently from lab medians, start with our &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026&quot;&gt;practical Core Web Vitals guide&lt;/a&gt;. For why lab and field are different instruments on the same URL, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;synthetic versus real user monitoring&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;browser-version-in-rum-population-mix-vs-a-site-regression&quot; class=&quot;scroll-mt-24&quot;&gt;Browser version in RUM: population mix vs a site regression&lt;/h2&gt;&lt;p&gt;First-party Real User Monitoring (RUM) and CrUX answer different questions. CrUX is a public, privacy-thresholded view of Chrome traffic Google already collected. RUM is yours: you choose segments, retention, and alert rules. When practitioners search &lt;strong&gt;browser version RUM&lt;/strong&gt;, they usually need to know whether a field shift is &lt;strong&gt;segment noise&lt;/strong&gt; before they open a regression ticket.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Population mix&lt;/strong&gt; means the aggregate changed because the audience composition changed: more sessions on Chrome 153, fewer on 152, a higher share of mobile on a slower network, or a campaign that sent traffic to a heavier template. &lt;strong&gt;Site regression&lt;/strong&gt; means the same browser version and similar journey on the same URL got worse after your change (or after a third-party or CDN change you control).&lt;/p&gt;&lt;p&gt;Before you slice field data by exact Chrome major, set &lt;strong&gt;sample thresholds&lt;/strong&gt;. Thin segments produce volatile p75 lines that look like regressions every week. Rules we use in client work:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Do not report URL-level p75 for a single Chrome major until you have enough sessions to trust the segment (exact cut-offs depend on traffic; treat very small counts as directional only).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Prefer &lt;strong&gt;unsegmented&lt;/strong&gt; LCP, INP, and CLS as the headline series in retainer reports; use browser-major slices in appendix slides for engineers.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Compare like with like: same form factor, same URL or origin scope, same collection period dates.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Pair every segmented chart with an unsegmented line so leadership sees whether the whole population moved or only one slice.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Harry Roberts framed the risk clearly in &lt;a rel=&quot;nofollow&quot; href=&quot;https://csswizardry.com/2026/08/web-perf-wednesday-006-faster-browser-releases-change-your-rum-population/&quot;&gt;Web-Perf Wednesday 006&lt;/a&gt;: faster browser releases change the &lt;strong&gt;RUM population&lt;/strong&gt; you are averaging, not just the code on your server. Agencies that report &quot;Chrome 152 LCP&quot; and &quot;Chrome 153 LCP&quot; without sample sizes invite false escalations every Stable Tuesday.&lt;/p&gt;&lt;h2 id=&quot;put-chrome-stable-on-the-same-calendar-as-deploys-and-cdn-changes&quot; class=&quot;scroll-mt-24&quot;&gt;Put Chrome Stable on the same calendar as deploys and CDN changes&lt;/h2&gt;&lt;p&gt;Performance regressions are easier to debug when every graph annotation uses the same calendar. Most teams already mark application deploys, CDN cache rule changes, tag manager publishes, and major marketing releases. Browser Stable and Beta dates belong on that same timeline from September 2026 onward.&lt;/p&gt;&lt;p&gt;Checklist we ask account and engineering leads to maintain:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chrome Stable and Early Stable&lt;/strong&gt; dates for Desktop and Android (at minimum) through the next two milestones.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Extended Stable&lt;/strong&gt; notes for clients with locked-down browser policies.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Firefox&lt;/strong&gt; milestone dates when the site has meaningful non-Chrome share in RUM.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;RUM or CrUX instrumentation changes&lt;/strong&gt; (new snippet, different sampling, new soft-navigation handler).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Named owner&lt;/strong&gt; who updates the calendar within one business day of a release (not &quot;the platform team&quot; in the abstract).&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;When field LCP moves in the weekly report, the first question is not &quot;what did we ship?&quot; but &quot;what changed in the window: browser, traffic, CDN, tags, or code?&quot; A single annotated timeline prevents the &quot;nobody deployed&quot; argument from turning into a trust fight. The ops checklist (release owner, browser rows beside deploy rows) is the agency ritual; the sections above carry the CrUX math and monitoring split.&lt;/p&gt;&lt;h3&gt;Sample thresholds before you slice field data by Chrome major&lt;/h3&gt;&lt;p&gt;Segmentation is useful after thresholds, not before. If Chrome 153 represents 4% of sessions in a 28-day URL-level slice, its p75 is not a client-ready KPI. Use thresholds to decide when a segment earns its own row in the report.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Segment type&lt;/th&gt;&lt;th&gt;When to show in client body&lt;/th&gt;&lt;th&gt;When to keep internal&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Unsegmented origin or URL field p75&lt;/td&gt;&lt;td&gt;Always, with `collectionPeriod` dates&lt;/td&gt;&lt;td&gt;n/a&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mobile vs desktop field&lt;/td&gt;&lt;td&gt;When both pass eligibility&lt;/td&gt;&lt;td&gt;Thin desktop slice on mobile-heavy sites&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chrome major (e.g. M152 vs M153)&lt;/td&gt;&lt;td&gt;When each major has stable sample counts&lt;/td&gt;&lt;td&gt;Single-digit session majors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Beta / Dev channel&lt;/td&gt;&lt;td&gt;Rarely&lt;/td&gt;&lt;td&gt;Almost always appendix only&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;In first-party RUM, configure minimum session counts per segment before alerts fire. In CrUX-only workflows, respect Google's eligibility and popularity rules (&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/methodology&quot;&gt;CrUX methodology&lt;/a&gt;): missing URL-level data is often &quot;not enough Chrome sessions,&quot; not a tooling failure. Say that explicitly in the report footnote.&lt;/p&gt;&lt;h2 id=&quot;use-scheduled-lab-runs-as-same-week-proof-when-field-crux-drifts&quot; class=&quot;scroll-mt-24&quot;&gt;Use scheduled lab runs as same-week proof when field CrUX drifts&lt;/h2&gt;&lt;p&gt;Unsegmented field series are the executive headline. They answer &quot;how are our users doing in aggregate?&quot; without opening a statistics debate on Chrome 152.3 versus 153.0. Browser-major slices are diagnostic tools for engineers checking whether a shift correlates with a Stable release line on the calendar.&lt;/p&gt;&lt;p&gt;Scheduled lab runs provide &lt;strong&gt;same-week proof&lt;/strong&gt; that the origin did not change:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Run PageSpeed Insights or Lighthouse on priority URLs on a fixed schedule (&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/how-to-schedule-pagespeed-monitoring-test-frequency-priority-portfolio&quot;&gt;how to schedule PageSpeed monitoring across a portfolio&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Store run timestamps beside field &lt;code&gt;collectionPeriod&lt;/code&gt; dates in the &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/client-ready-core-web-vitals-report-outline&quot;&gt;client-ready Core Web Vitals report outline&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If lab LCP and INP stay inside budget while field p75 drifts, investigate population mix and browser cadence before you roll back a deploy.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If lab and field move together after a deploy, treat it as a site change regardless of browser week.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Spot checks fail this test because Tuesday's paste and Thursday's paste are not a history. &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights versus automated monitoring&lt;/a&gt; is where we unpacked why portfolios need schedules, not heroic manual runs. Apogee Watcher holds that lab clock for multi-tenant teams: scheduled tests, budgets, alerts, and CrUX field numbers when Google returns them beside the same URL row. We do not replace first-party RUM segmentation. We keep lab verification repeatable while you interpret field drift.&lt;/p&gt;&lt;h2 id=&quot;browser-mix-vs-fix-lag-and-crux-pipeline-delay-three-lag-types&quot; class=&quot;scroll-mt-24&quot;&gt;Browser mix vs fix lag and CrUX pipeline delay: three lag types&lt;/h2&gt;&lt;p&gt;Agencies confuse three lag types. Each needs a different sentence in the client deck.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Lag type&lt;/th&gt;&lt;th&gt;Cause&lt;/th&gt;&lt;th&gt;What the client sees&lt;/th&gt;&lt;th&gt;Primary doc&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rolling-window fix lag&lt;/td&gt;&lt;td&gt;Pre-fix sessions still inside 28 days after a deploy&lt;/td&gt;&lt;td&gt;Slow field improvement after a verified lab win&lt;/td&gt;&lt;td&gt;[Why your fix is not in CrUX yet](https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pipeline / publication lag&lt;/td&gt;&lt;td&gt;CrUX API, History, or BigQuery publish late&lt;/td&gt;&lt;td&gt;Same field values two days straight; missing weekly point&lt;/td&gt;&lt;td&gt;[CrUX pipeline delays](https://apogeewatcher.com/blog/crux-pipeline-delays-late-field-data-client-reports)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Browser population mix&lt;/td&gt;&lt;td&gt;New Chrome majors enter the window without a site deploy&lt;/td&gt;&lt;td&gt;Field moves while lab flat; shift aligns with Stable calendar&lt;/td&gt;&lt;td&gt;This post&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Fix lag is about &lt;strong&gt;your&lt;/strong&gt; sessions aging out. Pipeline lag is about &lt;strong&gt;Google's&lt;/strong&gt; publish schedule. Browser mix is about &lt;strong&gt;whose Chrome&lt;/strong&gt; sits inside an already-published window. A field LCP move with no deploy and flat lab budgets is often the third row, especially from September 2026 when two-week Stable releases overlap the 28-day average more often.&lt;/p&gt;&lt;h2 id=&quot;how-agencies-should-monitor-and-report-while-browser-mix-shifts&quot; class=&quot;scroll-mt-24&quot;&gt;How agencies should monitor and report while browser mix shifts&lt;/h2&gt;&lt;p&gt;From August through October 2026, expect more &quot;false regression&quot; tickets. Build the monitoring plan around dated clocks, not vibes.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Weekly field read&lt;/strong&gt; with &lt;code&gt;firstDate&lt;/code&gt; and &lt;code&gt;endDate&lt;/code&gt; on every table row. No naked p75 without collection period.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Daily or thrice-weekly lab&lt;/strong&gt; on money URLs through the Chrome 153 and 154 Stable window.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release calendar&lt;/strong&gt; with browser Stable rows visible to SEO and engineering, not only infra.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Executive one-liner&lt;/strong&gt; in the retainer PDF: &quot;Field CrUX is a 28-day rolling average of real Chrome users; browser Stable releases can move field bands without a site deploy; lab trends below are same-week origin verification.&quot;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Escalation rule:&lt;/strong&gt; open a code regression when lab budgets break or when unsegmented field and lab move together after a deploy; investigate population mix when lab is flat and field drifts across a Stable line.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Portfolio teams scale this with per-client organisations, shared budget templates, and alerts that fire on lab thresholds even when field data lags. That is the layer Apogee Watcher adds on top of Search Console and whatever RUM vendor the client already pays for.&lt;/p&gt;&lt;h2 class=&quot;scroll-mt-24&quot;&gt;FAQ&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Can Core Web Vitals change without a website update?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Yes. CrUX field metrics reflect real Chrome sessions over a rolling 28-day window. Browser updates, traffic mix shifts, and eligibility changes can move field p75 without any deploy on your origin. Lab runs on fixed URLs help prove whether the site changed.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;How does Chrome's two-week release cycle affect CrUX data?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;More frequent Stable releases mean a 28-day field window can include two browser majors with different performance behaviour. Field LCP or INP can shift as auto-update spreads, even when your code is unchanged. Annotate Chrome Stable dates on your release calendar from Chrome 153 onward.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Should I segment RUM by browser version after Chrome 153?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Segment when sample sizes support it, and keep an unsegmented headline series for clients. Thin Chrome-major slices produce noisy charts. Set minimum session thresholds before alerts or report rows use a single major.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Is a field LCP move a
&lt;/strong&gt;&lt;/p&gt;</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25864/when-lcp-moves-and-nobody-deployed-browser-release-cadence-and-your-28-day-field-window</guid>
<pubDate>Wed, 02 Sep 2026 22:12:54 +0000</pubDate>
</item>
<item>
<title>CrUX Pipeline Delays: What Late Field Data Means for Client Reports</title>
<link>https://coderlegion.com/25348/crux-pipeline-delays-what-late-field-data-means-for-client-reports</link>
<description>&lt;p&gt;CrUX field numbers in a client report carry two dates most teams never write on the slide: when Google published the aggregate, and which 28 days of Chrome sessions sit inside it. PageSpeed Insights, the CrUX API, CrUX Vis, Search Console, and BigQuery each refresh on a different schedule. Field Largest Contentful Paint and Interaction to Next Paint are always a rolling 28-day average on top of that schedule. Lab scores from a scheduled PageSpeed Insights run can turn green the morning after a deploy while the field band beside them stays amber for weeks. None of those contradictions mean the fix failed. They mean engineering, SEO, and the client are reading different clocks without labelling them.&lt;/p&gt;&lt;p&gt;Agencies lose retainer hours when those clocks get treated as one bug. Engineering trusts the lab trend; SEO trusts Search Console; the client trusts whichever PageSpeed Insights paste arrived in email first. Without a shared &quot;field data as of&quot; line, a routine CrUX pipeline delay reads like negligence. What follows separates pipeline lag (when Google publishes CrUX) from the 28-day rolling window (what CrUX averages once published), maps the Chrome UX Report update schedule across API, History, and BigQuery, and gives copy-ready footnotes for &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/client-ready-core-web-vitals-report-outline&quot;&gt;client-ready Core Web Vitals reports&lt;/a&gt;. For why a shipped fix can still sit inside a green lab run and an amber field band for weeks, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window&quot;&gt;why your Core Web Vitals fix is not in CrUX yet&lt;/a&gt;. For where to read field history after the CrUX Dashboard retirement, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/crux-dashboard-retired-where-to-get-ttfb-inp-field-history&quot;&gt;where to get TTFB, INP, and field history&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;what-crux-data-delay-means-for-agency-client-reports&quot; class=&quot;scroll-mt-24&quot;&gt;What CrUX data delay means for agency client reports&lt;/h2&gt;&lt;p&gt;&quot;CrUX data delay&quot; shows up in two conversations that get mixed together in client Slack. The first is publication lag: Chrome User Experience Report (CrUX) data moves through Google's pipeline before it appears in PageSpeed Insights, the CrUX API, CrUX Vis, Search Console, or BigQuery. The second is rolling-window lag: even when publication is on time, field percentiles describe roughly the past 28 days of real Chrome sessions, so a Tuesday deploy cannot rewrite Friday's field screenshot.&lt;/p&gt;&lt;p&gt;Client reports go wrong when those two lags are treated as one bug. A PageSpeed Insights field section that still shows last week's &lt;code&gt;collectionPeriod&lt;/code&gt; end date is often a short pipeline or API refresh issue, not proof that users are still suffering pre-fix timings. A field band that barely moves for three weeks after a large fix is usually the rolling window doing its job, not a broken pipeline. Your report should name which lag you are discussing before you paste a number.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Lag type&lt;/th&gt;&lt;th&gt;What the client sees&lt;/th&gt;&lt;th&gt;Typical duration&lt;/th&gt;&lt;th&gt;What to cite in the report&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pipeline / publication lag&lt;/td&gt;&lt;td&gt;Same field values two days in a row; History weekly point missing&lt;/td&gt;&lt;td&gt;Hours to a few days; rare multi-day slips on weekly/monthly surfaces&lt;/td&gt;&lt;td&gt;CrUX release notes; `collectionPeriod` dates in PageSpeed Insights or API&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rolling-window lag&lt;/td&gt;&lt;td&gt;Field LCP or INP improves slowly after a verified lab win&lt;/td&gt;&lt;td&gt;Days to ~28 days depending on traffic and fix size&lt;/td&gt;&lt;td&gt;[28-day CrUX window](https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window); lab trend for same-week proof&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Monthly BigQuery lag&lt;/td&gt;&lt;td&gt;SQL dashboards feel a month behind PageSpeed Insights&lt;/td&gt;&lt;td&gt;~5 weeks from collection month to second-Tuesday release&lt;/td&gt;&lt;td&gt;BigQuery `YYYYMM` table label; do not use for weekly client scorecards&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Account managers do not need the full pipeline diagram. They need one sentence in the executive summary: field metrics are a rolling average of real-user Chrome data, refreshed on Google's schedule; lab metrics below are our same-week verification. That single line prevents most &quot;your report is wrong&quot; threads when CrUX is merely late, not wrong.&lt;/p&gt;&lt;h2 id=&quot;chrome-ux-report-update-schedule-daily-api-weekly-history-monthly-bigquery&quot; class=&quot;scroll-mt-24&quot;&gt;Chrome UX Report update schedule: daily API, weekly History, monthly BigQuery&lt;/h2&gt;&lt;p&gt;Google publishes CrUX through several surfaces that update on different cadences. Teams that check only one surface often assume the whole ecosystem is broken. PageSpeed Insights field data and the daily CrUX API answer &quot;what does field say this week?&quot; CrUX History API and CrUX Vis answer &quot;how has the trend moved over the past months?&quot; BigQuery answers &quot;what did the origin look like in March?&quot; for analysts who accept monthly grain and query cost. Pick the surface that matches the question before you paste a number into a client deck.&lt;/p&gt;&lt;p&gt;According to &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/api&quot;&gt;Chrome's CrUX API documentation&lt;/a&gt;, the public dataset refreshes daily around 04:00 UTC on a best-effort basis with no fixed service-level agreement. Responses include a &lt;code&gt;collectionPeriod&lt;/code&gt; with &lt;code&gt;firstDate&lt;/code&gt; and &lt;code&gt;endDate&lt;/code&gt; so you can see whether today's query returned a new aggregation window or the same window as yesterday. Chrome's docs also note that the API is typically about two days behind &quot;today&quot; in Pacific time, which is normal processing lag rather than a stalled deploy on your site.&lt;/p&gt;&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/guides/history-api&quot;&gt;CrUX History API&lt;/a&gt; publishes weekly series: each point covers a 28-day window whose end dates are spaced seven days apart, with up to about 40 historical points. Weekly publication is aimed at trend charts in CrUX Vis and custom dashboards, not same-day deploy proof. &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/bigquery&quot;&gt;CrUX on BigQuery&lt;/a&gt; releases on the &lt;strong&gt;second Tuesday&lt;/strong&gt; of the month following each collection period, which is why BigQuery-only workflows feel like a month-long CrUX data delay even when PageSpeed Insights has already moved.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Surface&lt;/th&gt;&lt;th&gt;Update cadence&lt;/th&gt;&lt;th&gt;Best for client reports&lt;/th&gt;&lt;th&gt;Delay clients often misread&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PageSpeed Insights field section&lt;/td&gt;&lt;td&gt;Daily (~04:00 UTC refresh)&lt;/td&gt;&lt;td&gt;Current origin/URL field p75 with collection dates&lt;/td&gt;&lt;td&gt;Rolling 28-day average, not yesterday's deploy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CrUX API (`queryRecord`)&lt;/td&gt;&lt;td&gt;Daily&lt;/td&gt;&lt;td&gt;Automated field snapshots; same `collectionPeriod` as PSI&lt;/td&gt;&lt;td&gt;~2-day processing lag behind calendar &quot;today&quot;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CrUX History API / CrUX Vis&lt;/td&gt;&lt;td&gt;Weekly (Mondays typical)&lt;/td&gt;&lt;td&gt;Trend slides in QBR decks&lt;/td&gt;&lt;td&gt;New weekly point missing after a holiday Monday&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Search Console CWV report&lt;/td&gt;&lt;td&gt;Aligned with CrUX field base&lt;/td&gt;&lt;td&gt;SEO status badges clients already recognise&lt;/td&gt;&lt;td&gt;Same rolling window as PSI; not lab-on-demand&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BigQuery `chrome-ux-report`&lt;/td&gt;&lt;td&gt;Monthly (second Tuesday)&lt;/td&gt;&lt;td&gt;Long-range origin analysis, custom SQL&lt;/td&gt;&lt;td&gt;Entire month feels &quot;late&quot; vs daily PSI&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;When you build a &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/client-ready-core-web-vitals-report-outline&quot;&gt;client-ready Core Web Vitals report outline&lt;/a&gt;, put daily or weekly field numbers in the scorecard and relegate BigQuery charts to appendix slides for analysts. Mixing monthly SQL exports into a weekly status email is how agencies accidentally tell a client their site regressed when PageSpeed Insights field data had already turned green.&lt;/p&gt;&lt;h2 id=&quot;why-crux-pipeline-delays-happen-beyond-the-rolling-window&quot; class=&quot;scroll-mt-24&quot;&gt;Why CrUX pipeline delays happen beyond the rolling window&lt;/h2&gt;&lt;p&gt;The 28-day rolling average is predictable. CrUX pipeline delays are the extra slips: processing backlog, holiday staffing, connector outages on legacy Looker paths, or incidents that delay a weekly History release while the daily API still updates. Google's &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/release-notes&quot;&gt;CrUX release notes&lt;/a&gt; are the authoritative place to check whether a missing weekly point is your origin or the whole dataset. The May 2026 notes, for example, mention a slight delay to the weekly CrUX History API and CrUX Vis release that was resolved separately from the monthly BigQuery publish.&lt;/p&gt;&lt;p&gt;Pipeline incidents are not the same as &quot;my fix did not work.&quot; During a History API slip, CrUX Vis may show a flat line for one week while PageSpeed Insights field sections still advance their &lt;code&gt;collectionPeriod&lt;/code&gt; end date on schedule. During heavy monthly release weeks, teams that relied on the retired CrUX Dashboard connector sometimes saw monthly bars pause even though the API moved. After the &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/crux-dashboard-retired-where-to-get-ttfb-inp-field-history&quot;&gt;CrUX Dashboard retirement&lt;/a&gt;, those connector failures are less common, but weekly and monthly surfaces still batch work differently than the daily API. A report that mixes a Monday lab run with a weekly History chart and no dates on either axis will look inconsistent even when Google published everything correctly.&lt;/p&gt;&lt;p&gt;Low-traffic URLs add a different kind of delay that looks like a pipeline fault. CrUX omits URL-level field data when sample sizes are too thin, and PageSpeed Insights may show origin-level field bands while the URL you changed stays empty. That &quot;no data&quot; state can persist across daily refreshes until enough Chrome sessions accumulate. It is eligibility and popularity filtering, not a stuck ETL job. Google's &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/methodology&quot;&gt;CrUX methodology&lt;/a&gt; documents discoverability and popularity rules. Your footnote should say URL-level field data not available; origin-level field shown when that is what the tool returned. Holiday weeks add the same confusion: a report drafted on the Tuesday after a long weekend may pair a fresh lab run with a History chart whose &lt;code&gt;endDate&lt;/code&gt; still ends on the previous Saturday because the weekly job has not published yet.&lt;/p&gt;&lt;p&gt;In our experience, the CrUX Google Group threads that age badly inside agencies are the ones where nobody wrote down which surface was checked. Standardise on PageSpeed Insights or the daily API for current field and CrUX Vis for trend. When a weekly point is missing globally, link the release notes in the report caption so the client sees you checked for a pipeline slip rather than ignoring a regression.&lt;/p&gt;&lt;h2 id=&quot;how-late-crux-field-data-affects-client-core-web-vitals-reports&quot; class=&quot;scroll-mt-24&quot;&gt;How late CrUX field data affects client Core Web Vitals reports&lt;/h2&gt;&lt;p&gt;Late field data changes the story in client reports even when engineering already closed the ticket. Checkout field Interaction to Next Paint can stay amber while the rolling window is only halfway through shedding pre-fix sessions. Origin field Largest Contentful Paint can look green while the product listing URL the client cares about never earns URL-level CrUX. A weekly trend chart can sit flat for one publication cycle because History API ran late, so leadership assumes performance work stalled. Each pattern needs its own sentence in the report, not a generic &quot;CrUX is slow&quot; disclaimer.&lt;/p&gt;&lt;p&gt;Search Console status badges trail the same CrUX base as PageSpeed Insights field data. A Needs improvement label in week one after a deploy is expected when the rolling window still contains mostly pre-fix traffic. Clients who treat Search Console as a real-time monitor will forward screenshots that contradict your lab appendix unless you date both artefacts and explain that Search Console updates on CrUX's schedule, not on deploy day.&lt;/p&gt;&lt;p&gt;Executive summaries that only cite field numbers make pipeline delays look like negligence. If the headline says mobile LCP is still 3.1s without field data through 9 Aug and lab homepage 2.3s on 12 Aug runs, the client will compare your PDF to their own PageSpeed Insights paste from a different &lt;code&gt;collectionPeriod&lt;/code&gt;. Trust breaks fast. One dated footnote fixes most of that.&lt;/p&gt;&lt;p&gt;Trend slides built only from BigQuery or weekly History can miss a step change that daily PageSpeed Insights already shows in the &lt;code&gt;collectionPeriod&lt;/code&gt; end date. Daily API checks without History miss slow drifts that only become obvious across six weekly points. Multi-site portfolios amplify the noise: one client's field data updates on schedule while another's URL never earns CrUX eligibility, and a portfolio table without per-row collection dates looks like you ignored a site when the pipeline returned no data legitimately.&lt;/p&gt;&lt;p&gt;The operational fix is to treat field metrics as dated lagging indicators in every client-facing table and lab metrics as scheduled verification with run timestamps. That split matches how we described lab versus field clocks in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;synthetic versus real user monitoring&lt;/a&gt; and in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights versus automated monitoring&lt;/a&gt;. Field answers what Google will eventually show in search tooling. Lab answers whether your release is healthy on the URLs you monitor.&lt;/p&gt;&lt;h2 id=&quot;how-to-annotate-client-reports-with-field-data-collection-dates&quot; class=&quot;scroll-mt-24&quot;&gt;How to annotate client reports with field data collection dates&lt;/h2&gt;&lt;p&gt;Every field number in a client report needs a collection window beside it. PageSpeed Insights has displayed &lt;code&gt;collectionPeriod&lt;/code&gt; dates since late 2024; the CrUX API has exposed &lt;code&gt;firstDate&lt;/code&gt; and &lt;code&gt;endDate&lt;/code&gt; since 2022. If your report omits them, the client will supply their own assumed &quot;as of today&quot; date when they re-test.&lt;/p&gt;&lt;p&gt;Add these elements to the scorecard and executive summary from our &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/client-ready-core-web-vitals-report-outline&quot;&gt;client report template&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Executive summary footnote (copy-ready):&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Field Core Web Vitals below are 75th-percentile values from Google's Chrome UX Report, averaged over a rolling 28-day window. Collection period: &lt;strong&gt;{firstDate} to {endDate}&lt;/strong&gt; (source: PageSpeed Insights / CrUX API). Lab scores are scheduled PageSpeed Insights Lighthouse runs on &lt;strong&gt;{run dates}&lt;/strong&gt; on the URLs listed in the appendix.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;Scorecard column headers:&lt;/strong&gt;&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Mobile field (CrUX p75)&lt;/th&gt;&lt;th&gt;Mobile lab (scheduled)&lt;/th&gt;&lt;th&gt;Collection period (field)&lt;/th&gt;&lt;th&gt;Last lab run&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LCP&lt;/td&gt;&lt;td&gt;2.8s&lt;/td&gt;&lt;td&gt;2.1s&lt;/td&gt;&lt;td&gt;15 Jul to 11 Aug 2026&lt;/td&gt;&lt;td&gt;12 Aug 2026&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;Trend chart caption:&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Weekly points: CrUX History API (28-day windows ending Saturdays). If the latest weekly point is missing, check &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/release-notes&quot;&gt;CrUX release notes&lt;/a&gt; for pipeline delays before interpreting a flat line.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;When field and lab disagree&lt;/strong&gt;, use a single explanatory line rather than a paragraph of theory:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Field LCP remains amber because CrUX still includes sessions from before the 4 Aug image fix. Lab LCP on the same URL has been below 2.5s on daily scheduled runs since 5 Aug. We expect field to follow as older sessions roll out of the window.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;When CrUX returns no URL-level field data&lt;/strong&gt;, state what you showed instead:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;URL-level CrUX data is not available for &lt;code&gt;/checkout&lt;/code&gt; (insufficient Chrome traffic). Origin-level mobile LCP is shown below; lab monitoring covers &lt;code&gt;/checkout&lt;/code&gt; directly.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Account managers can paste those lines without opening the CrUX API. Technical leads should store &lt;code&gt;firstDate&lt;/code&gt;, &lt;code&gt;endDate&lt;/code&gt;, and lab run timestamps in the same spreadsheet or monitoring export you already use for multi-site portfolios, so the dates are not retyped by hand each month.&lt;/p&gt;&lt;h2 id=&quot;use-synthetic-monitoring-while-crux-field-data-is-late&quot; class=&quot;scroll-mt-24&quot;&gt;Use synthetic monitoring while CrUX field data is late&lt;/h2&gt;&lt;p&gt;Pipeline lag and rolling-window lag both create a gap between deploy and field proof. Synthetic monitoring fills that gap with scheduled lab runs on the URLs you choose, on a clock you control. It does not replace CrUX for Search Console or PageSpeed Insights field reporting. It gives the client something credible to read while Google's publication schedule and 28-day average catch up.&lt;/p&gt;&lt;p&gt;A practical agency workflow during a CrUX delay week:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Baseline before change.&lt;/strong&gt; Capture mobile and desktop lab LCP, INP, and CLS on priority URLs, with run dates stored alongside any field &lt;code&gt;collectionPeriod&lt;/code&gt; you quote.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Increase schedule frequency on touched URLs&lt;/strong&gt; for two weeks after deploy (daily or every two days on checkout and homepage, weekly on long tail), matching the priority model in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/how-to-schedule-pagespeed-monitoring-test-frequency-priority-portfolio&quot;&gt;how to schedule PageSpeed monitoring&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set lab budgets and alerts&lt;/strong&gt; so a regression during the wait still notifies someone, using thresholds from a shared &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/performance-budget-thresholds-template&quot;&gt;performance budget template&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check field once per week&lt;/strong&gt;, not every morning. Note whether &lt;code&gt;endDate&lt;/code&gt; moved and whether release notes mention a global History API delay.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ship the client report with both clocks labelled.&lt;/strong&gt; Lab trend proves the release; field dates prove you are not hiding behind a stale screenshot.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Apogee Watcher runs that split for multi-tenant teams: scheduled PageSpeed Insights-backed lab tests across many client sites, CrUX field numbers when Google returns them beside the same run, budgets and alerts while field data lags, and organisation-level views so agencies are not pasting PageSpeed Insights links into separate spreadsheets per client. We do not shorten Google's pipeline or replace first-party real-user monitoring. We give you a repeatable lab clock next to the field clock Google publishes, layered onto the SEO and observability tools you already use.&lt;/p&gt;&lt;p&gt;&amp;lt;a href=&quot;https://
&lt;/p&gt;</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25348/crux-pipeline-delays-what-late-field-data-means-for-client-reports</guid>
<pubDate>Thu, 27 Aug 2026 08:14:00 +0000</pubDate>
</item>
<item>
<title>Treo vs Apogee Watcher: CrUX Scale, Competitor Benchmarks, and Agency Portfolios</title>
<link>https://coderlegion.com/25142/treo-vs-apogee-watcher-crux-scale-competitor-benchmarks-and-agency-portfolios</link>
<description>&lt;p&gt;After the CrUX Dashboard and Looker Studio report retired, many teams rebuilt their field-data workflow from PageSpeed Insights, Search Console, and third-party CrUX explorers. &lt;a rel=&quot;nofollow&quot; href=&quot;https://treo.sh/&quot;&gt;Treo&lt;/a&gt; is one of the products agencies shortlist when they want CrUX at portfolio scale without writing BigQuery jobs. Apogee Watcher addresses a related but different bottleneck: keeping scheduled lab checks, budgets, and alerts aligned across many client sites when URL lists change every sprint.&lt;/p&gt;&lt;p&gt;Both products show lab and field context. Both matter to agencies. The decision is usually workflow fit, not which logo wins a feature grid. Below we compare Treo and Watcher on CrUX depth, competitor views, multi-site operations, and price bands. Figures change; verify limits on &lt;a rel=&quot;nofollow&quot; href=&quot;https://treo.sh/pricing&quot;&gt;Treo pricing&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/pricing&quot;&gt;Apogee Watcher pricing&lt;/a&gt; before you buy.&lt;/p&gt;&lt;h2 id=&quot;what-treo-is-built-for-crux-scale-and-competitor-benchmarks&quot; class=&quot;scroll-mt-24&quot;&gt;What Treo is built for: CrUX scale and competitor benchmarks&lt;/h2&gt;&lt;p&gt;Treo markets itself around the Chrome User Experience Report: raw field data, historical trends, connection and country breakdowns, and competitor comparisons without standing up your own BigQuery pipeline. Public materials emphasise large CrUX URL budgets (from dozens on the free tier to five figures on Scale and Enterprise), multi-year retention, and views that go beyond the p75 snapshots many free tools show.&lt;/p&gt;&lt;p&gt;That positioning matters when your brief is field exploration at scale:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;You need hundreds or thousands of URLs in CrUX with history, not just origin-level Search Console summaries.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;You want to chart competitors beside your client on LCP, INP, or CLS using the same CrUX source.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;You export or API-pull field series into your own reporting stack (paid tiers).&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Treo also adds scheduled Lighthouse monitoring on paid plans, with tiered page counts and frequency trade-offs (for example, hourly checks consume more capacity than eight-hour cadences). The free tier is CrUX-only: useful for evaluation, not for lab regression alerts across a retainer.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://cdn.apogeewatcher.com/blog-images/72-treo-crux-dashboard.png&quot; alt=&quot;Treo CrUX dashboard showing connection-type breakdown by country on a world map, with metric distributions for a tracked domain&quot;&gt;&lt;/p&gt;&lt;p&gt;The screenshot above is from Treo’s public product pages: connection mix by geography on a world map, one of the views teams use when they explain field data to stakeholders who will never open BigQuery. If your job is “show me five years of CrUX for this URL set and my competitors,” Treo is aimed at that job.&lt;/p&gt;&lt;p&gt;For where CrUX still lives inside Google’s own surfaces after dashboard retirement, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/crux-dashboard-retired-where-to-get-ttfb-inp-field-history&quot;&gt;CrUX Dashboard Retired: Where to Get TTFB, INP, and Field History&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;what-apogee-watcher-is-built-for-a-web-performance-monitoring-tool-for-agency-portfolios&quot; class=&quot;scroll-mt-24&quot;&gt;What Apogee Watcher is built for: a web performance monitoring tool for agency portfolios&lt;/h2&gt;&lt;p&gt;Apogee Watcher is a multi-tenant pagespeed monitoring platform built for agencies. We run scheduled tests through Google’s PageSpeed Insights API, which returns Lighthouse lab metrics plus CrUX field slices where Google publishes them for the tested URL. We emphasise organisations, sites, roles (Admin, Manager, Viewer), automated page discovery from sitemaps and crawl paths, performance budgets, and email alerts when thresholds breach.&lt;/p&gt;&lt;p&gt;We do not offer Treo-scale CrUX URL inventories or built-in competitor benchmarking boards. We do not replace a CrUX explorer when your primary question is “how does this competitor’s field INP trend over three years on five hundred URLs?”&lt;/p&gt;&lt;p&gt;We are strong when:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;You manage many client properties and need scheduled lab coverage without maintaining separate spreadsheets per site.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Discovery must catch new templates and campaign landers before someone remembers to add URLs manually.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Account managers need read-only access without touching API quotas.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Entry price and predictable tiers matter for monitoring as its own retainer line.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Setup patterns and discovery behaviour are in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/getting-started-apogee-watcher-step-by-step-setup-guide&quot;&gt;Getting Started with Apogee Watcher: A Step-by-Step Setup Guide&lt;/a&gt;. For how synthetic schedules relate to field proof, pair with &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;When to Use Synthetic vs Real User Monitoring for Performance&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;treo-vs-apogee-watcher-crux-monitoring-tools-compared&quot; class=&quot;scroll-mt-24&quot;&gt;Treo vs Apogee Watcher: CrUX monitoring tools compared&lt;/h2&gt;&lt;p&gt;Use this table as a decision grid, not a scorecard. Confirm numbers on each vendor site.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Topic&lt;/th&gt;&lt;th&gt;Treo (typical positioning)&lt;/th&gt;&lt;th&gt;Apogee Watcher&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Primary strength&lt;/td&gt;&lt;td&gt;CrUX URL scale, history, competitor benchmarks&lt;/td&gt;&lt;td&gt;Multi-site scheduled PSI monitoring, discovery, agency RBAC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Test engine&lt;/td&gt;&lt;td&gt;CrUX-native; Lighthouse on paid tiers&lt;/td&gt;&lt;td&gt;PageSpeed Insights API (Lighthouse lab + CrUX where available)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CrUX URL budgets&lt;/td&gt;&lt;td&gt;50 free; 1K–20K+ on Vital–Scale; 50K+ Enterprise&lt;/td&gt;&lt;td&gt;Per-URL CrUX via each PSI result; no competitor boards&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Competitor benchmarking&lt;/td&gt;&lt;td&gt;Built into product narrative&lt;/td&gt;&lt;td&gt;Not a core feature&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Data retention (public FAQ)&lt;/td&gt;&lt;td&gt;Unlimited historical access via UI/API&lt;/td&gt;&lt;td&gt;30–365 days by plan (confirm on pricing)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Team members&lt;/td&gt;&lt;td&gt;5–50 on paid tiers&lt;/td&gt;&lt;td&gt;Unlimited on published tiers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Entry paid pricing&lt;/td&gt;&lt;td&gt;Vital from **$75/mo** (CrUX + Lighthouse)&lt;/td&gt;&lt;td&gt;From **$9/mo** Personal through **$199/mo** Agency&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Free tier&lt;/td&gt;&lt;td&gt;50 CrUX pages; no Lighthouse&lt;/td&gt;&lt;td&gt;Free tier available (confirm current limits)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;API&lt;/td&gt;&lt;td&gt;Pro tier and above&lt;/td&gt;&lt;td&gt;Product API focus differs; confirm live features&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Best day-one use&lt;/td&gt;&lt;td&gt;Field exploration, competitive charts, large CrUX lists&lt;/td&gt;&lt;td&gt;Portfolio lab monitoring without per-client instrumentation&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Treo’s paid entry at $75/mo reflects CrUX infrastructure and history, not a stripped-down lab runner. Watcher’s lower entry reflects a different scope: scheduled synthetic monitoring and agency workflow, not five-figure CrUX URL catalogs.&lt;/p&gt;&lt;p&gt;Broader tool taxonomy (where Treo sits beside GTmetrix, DebugBear, and PSI) lives in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/comparing-pagespeed-monitoring-tools-features-agencies-need&quot;&gt;Comparing PageSpeed Monitoring Tools: Features Agencies Need&lt;/a&gt;. For another premium synthetic comparison with optional RUM, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/debugbear-vs-apogee-watcher-synthetic-monitoring-multi-site-teams&quot;&gt;DebugBear vs Apogee Watcher: Synthetic Monitoring for Multi-Site Teams&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;when-treo-is-the-better-primary-choice&quot; class=&quot;scroll-mt-24&quot;&gt;When Treo is the better primary choice&lt;/h2&gt;&lt;p&gt;Favour Treo when CrUX is the product, not a sidebar on lab reports:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Competitive narratives:&lt;/strong&gt; Monthly reviews that compare your client to named competitors on Core Web Vitals using the same CrUX source.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Large URL lists in field data:&lt;/strong&gt; Category or marketplace sites where you must monitor hundreds of URLs in CrUX, not ten hero routes in lab only.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Long historical arcs:&lt;/strong&gt; Multi-year trends for leadership decks; Treo’s marketing emphasises five-year history and unlimited retention in FAQ materials.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Export and API:&lt;/strong&gt; Pro/Scale customers pulling JSON series into BI tools without maintaining BigQuery pipelines.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If first-party RUM on the client origin is also non-negotiable, Treo still is not a RUM vendor; you would add analytics or a RUM product separately. &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagevitals-vs-apogee-watcher-rum-cicd-agency-portfolio-monitoring&quot;&gt;PageVitals vs Apogee Watcher&lt;/a&gt; covers a different RUM-first angle for WordPress-heavy stacks.&lt;/p&gt;&lt;h2 id=&quot;when-apogee-watcher-is-the-better-primary-choice&quot; class=&quot;scroll-mt-24&quot;&gt;When Apogee Watcher is the better primary choice&lt;/h2&gt;&lt;p&gt;Favour Watcher when the retainer is “keep these URLs inside budget and tell us when a deploy regresses”:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Many sites, modest field ambition:&lt;/strong&gt; You need lab schedules and CrUX context on priority URLs, not a five-thousand-row CrUX inventory on day one.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;URL churn:&lt;/strong&gt; Marketing publishes routes faster than spreadsheets update; discovery reduces stale monitor lists.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Role separation:&lt;/strong&gt; Managers tune budgets; viewers read dashboards; admins own billing without sharing one login.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cost at scale:&lt;/strong&gt; Monitoring line items must survive procurement at ten to thirty sites; entry tiers matter.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Watcher does not try to win on competitor benchmarking charts. We try to win on operational coverage: the same URLs tested on a cadence, with alerts that reach a human. Manual PSI rituals stop scaling long before CrUX URL math becomes the bottleneck; that case is in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights vs Automated Monitoring: When Manual Checks Aren't Enough&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;layer-treo-and-watcher-instead-of-forcing-one-vendor&quot; class=&quot;scroll-mt-24&quot;&gt;Layer Treo and Watcher instead of forcing one vendor&lt;/h2&gt;&lt;p&gt;Many agencies split roles:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Treo&lt;/strong&gt; for field exploration, competitor slides, and CrUX-heavy discovery when a client asks “how do we compare in the market?”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Watcher&lt;/strong&gt; for scheduled lab monitoring, budgets, and regression alerts across the whole portfolio.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That is the same layer-don’t-replace principle we use elsewhere: add CrUX exploration beside synthetic monitoring; do not pretend one subscription replaces both jobs. A team can run Treo on strategic URL sets and Watcher on every retainer property’s priority routes without duplicating work if roles are explicit in the SOW.&lt;/p&gt;&lt;p&gt;Neither tool replaces Search Console’s CWV report or one-off PSI checks before a sponsor call. Keep those; assign each tool a named owner in the runbook.&lt;/p&gt;&lt;h2 class=&quot;scroll-mt-24&quot;&gt;FAQ&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Can Apogee Watcher replace Treo for large-scale CrUX work?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;They overlap on “performance monitoring” but optimise for different questions. Treo is the stronger fit for large CrUX exploration and competitor benchmarking. Watcher is the stronger fit for multi-tenant scheduled PageSpeed monitoring with discovery and agency roles. Many teams use both.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Does Apogee Watcher replace Treo’s CrUX history?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;No. Watcher shows CrUX where PSI returns field data for each tested URL and stores lab history for trends and alerts. It does not replicate Treo-scale CrUX URL budgets or competitor boards.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Can I start on Treo’s free tier and add Watcher later?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Yes. Treo’s free plan (50 CrUX pages, no Lighthouse) suits evaluation of field views. When you need scheduled lab checks across many client sites, add Watcher rather than stretching Treo’s Lighthouse limits alone.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Which tool is cheaper for an agency with twenty sites?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Compare total cost with your URL counts and roles, not headline price alone. Watcher’s published tiers start lower; Treo’s Vital plan at $75/mo includes CrUX and Lighthouse capacity you may not need on every retainer. Run the maths for CrUX pages, Lighthouse pages, seats, and retention you actually use.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Do either tool replace BigQuery CrUX exports?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Treo abstracts BigQuery for dashboard and API users. Watcher does not. If you need custom SQL across the public dataset, you still use BigQuery or a vendor built for that scale; see our CrUX replacement guide linked above.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;If you want scheduled PageSpeed checks across client sites with budgets and discovery, start from &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/pricing&quot;&gt;pricing&lt;/a&gt; or &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/check&quot;&gt;run a free domain check&lt;/a&gt;. If your brief is CrUX competitor charts at thousands of URLs, evaluate &lt;a rel=&quot;nofollow&quot; href=&quot;https://treo.sh/pricing&quot;&gt;Treo&lt;/a&gt; on its own terms and layer monitoring where lab cadence still matters.&lt;/p&gt;&lt;h2 class=&quot;scroll-mt-24&quot;&gt;References&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://treo.sh/&quot;&gt;Treo&lt;/a&gt; (product home)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://treo.sh/pricing&quot;&gt;Treo pricing&lt;/a&gt; (plans and limits)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/crux-dashboard-retired-where-to-get-ttfb-inp-field-history&quot;&gt;CrUX Dashboard Retired: Where to Get TTFB, INP, and Field History&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/comparing-pagespeed-monitoring-tools-features-agencies-need&quot;&gt;Comparing PageSpeed Monitoring Tools: Features Agencies Need&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/debugbear-vs-apogee-watcher-synthetic-monitoring-multi-site-teams&quot;&gt;DebugBear vs Apogee Watcher: Synthetic Monitoring for Multi-Site Teams&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagevitals-vs-apogee-watcher-rum-cicd-agency-portfolio-monitoring&quot;&gt;PageVitals vs Apogee Watcher: RUM, CI/CD, and Agency Portfolio Monitoring&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;When to Use Synthetic vs Real User Monitoring for Performance&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights vs Automated Monitoring: When Manual Checks Aren't Enough&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/getting-started-apogee-watcher-step-by-step-setup-guide&quot;&gt;Getting Started with Apogee Watcher: A Step-by-Step Setup Guide&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25142/treo-vs-apogee-watcher-crux-scale-competitor-benchmarks-and-agency-portfolios</guid>
<pubDate>Mon, 24 Aug 2026 09:02:00 +0000</pubDate>
</item>
<item>
<title>CrUX Dashboard Retired: Where to Get TTFB, INP, and Field History</title>
<link>https://coderlegion.com/24402/crux-dashboard-retired-where-to-get-ttfb-inp-and-field-history</link>
<description>&lt;p&gt;For years the CrUX Dashboard was the bookmark agencies opened when a client asked whether field Largest Contentful Paint had moved since the last deploy. It was a Looker Studio report on monthly Chrome User Experience Report (CrUX) data: stacked bars for origin-level distributions, a familiar place to screenshot TTFB, Interaction to Next Paint (INP), and Cumulative Layout Shift (CLS) without writing SQL. Google retired it at the end of November 2025 and shut down the shared CrUX Connector that fed it. If your team still has a saved link, the chart either fails to load or stops at the last month the connector received.&lt;/p&gt;&lt;p&gt;The Chrome UX Report itself did not go away. What you need now is a replacement stack: CrUX Vis and the CrUX History API for TTFB, INP, and CLS trends, PageSpeed Insights and Search Console for the latest field slice, BigQuery if you want years of origin history on your own billing project, and scheduled lab monitoring so deploy proof does not wait on CrUX's 28-day rolling window. No single free dashboard copies every old Looker view, but the migration path is straightforward once you match each tool to the question you are actually asking.&lt;/p&gt;&lt;h2 id=&quot;why-google-retired-the-crux-dashboard-and-looker-studio-connector&quot; class=&quot;scroll-mt-24&quot;&gt;Why Google retired the CrUX Dashboard and Looker Studio connector&lt;/h2&gt;&lt;p&gt;Google announced the deprecation in &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/blog/crux-dashboard-deprecation&quot;&gt;September 2025&lt;/a&gt;. The CrUX Dashboard was a Chrome team-maintained Looker Studio template on monthly CrUX tables. Usage grew after Core Web Vitals became a ranking signal in 2020, but the connector behind it struggled with outages, especially around monthly data releases. Google pointed teams at the &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/guides/history-api&quot;&gt;CrUX History API&lt;/a&gt; (weekly series, up to about 40 points) and &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/vis&quot;&gt;CrUX Vis&lt;/a&gt; (first-party charts on that API) as more reliable paths.&lt;/p&gt;&lt;p&gt;By November 2025 the connector stopped receiving new months. Dashboards that depended on Google's shared BigQuery bridge stopped updating; &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/release-notes&quot;&gt;CrUX release notes&lt;/a&gt; treated that as the final reminder. You can still run the old Looker template against your own &lt;code&gt;chrome-ux-report&lt;/code&gt; BigQuery project if you accept query cost and setup work, but the free one-click version most teams used is not coming back. CrUX Vis now carries much of the same job with weekly points instead of monthly bars, and PageSpeed Insights still shows the latest rolling 28-day field slice when Google has enough Chrome traffic for the origin or URL.&lt;/p&gt;&lt;h2 id=&quot;pagespeed-insights-field-data-and-search-console-current-chrome-ux-report-numbers&quot; class=&quot;scroll-mt-24&quot;&gt;PageSpeed Insights field data and Search Console: current Chrome UX Report numbers&lt;/h2&gt;&lt;p&gt;When someone asks &quot;what does CrUX say right now?&quot;, they usually want the latest rolling field percentiles, not six months of history. Three surfaces answer that question most often, and they share the same underlying dataset with different filters and presentation. PageSpeed Insights, Search Console, and the daily CrUX API each emphasise a different workflow, but the numbers trace back to the same Chrome User Experience Report collection rules.&lt;/p&gt;&lt;h3&gt;PageSpeed Insights field data for one origin or URL&lt;/h3&gt;&lt;p&gt;PageSpeed Insights is still the default check for a single origin or URL. Open &lt;a rel=&quot;nofollow&quot; href=&quot;https://pagespeed.web.dev/&quot;&gt;PageSpeed Insights&lt;/a&gt;, run the test, and read the field section when CrUX has eligible traffic. You get origin-level and, when sample size allows, URL-level p75 values for Core Web Vitals and supporting metrics, including experimental field Time to First Byte (TTFB) where Google publishes it. Lab Lighthouse numbers on the same screen are synthetic; field numbers are the 28-day rolling average described in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window&quot;&gt;why your Core Web Vitals fix is not in CrUX yet&lt;/a&gt;.&lt;/p&gt;&lt;h3&gt;PageSpeed Insights lab data versus field data on the same URL&lt;/h3&gt;&lt;p&gt;PageSpeed Insights shows lab and field on one page, which is convenient and easy to misread. Lab data is a controlled Lighthouse run on demand: fixed device profile, emulated network, one load you triggered. Field data is CrUX: real Chrome users over roughly the past 28 days, blended across devices, cache states, and journeys. A green lab Performance score beside an amber field INP band is normal after a deploy, on a low-traffic URL, or when third-party scripts behave differently for real users than in the lab.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;/th&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Lab (Lighthouse in PageSpeed Insights)&lt;/p&gt;&lt;/th&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Field (CrUX in PageSpeed Insights)&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Source&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Synthetic test you run&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Opted-in Chrome sessions&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Clock&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Same day, every run&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;28-day rolling average&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Best for&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Deploy verification, before/after on priority URLs&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;SEO reporting, client field status&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Replaces CrUX Dashboard history?&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;No (point-in-time unless you store runs)&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;No (latest period only; use CrUX Vis or History API for trends)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Treat the two blocks as complementary, not competing scores. Lab answers whether the change shipped cleanly; field answers whether enough real users have lived with it for the aggregate to move. For a fuller split between synthetic schedules and real-user monitoring, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;synthetic versus real user monitoring&lt;/a&gt;. The CrUX Dashboard retirement does not remove that distinction; it removes one place that charted field history without opening PageSpeed Insights, CrUX Vis, or an API client.&lt;/p&gt;&lt;h3&gt;Search Console Core Web Vitals report for SEO workflows&lt;/h3&gt;&lt;p&gt;Search Console's Core Web Vitals report groups URLs by status (Good, Needs improvement, Poor) at origin granularity for SEO workflows. It is slower to navigate than PageSpeed Insights for one URL, but account managers already live there for indexing and query data. Field metrics inherit the same CrUX eligibility rules: low-traffic pages may show origin-only data or gaps, which we will unpack further in a later post on missing CLS and INP in PageSpeed Insights.&lt;/p&gt;&lt;h3&gt;Daily CrUX API for the latest field collection period&lt;/h3&gt;&lt;p&gt;The daily CrUX API (&lt;code&gt;queryRecord&lt;/code&gt; endpoint) returns the same latest collection period programmatically. Use it when you want to store today's field p75 beside yesterday's in your own database, or when a script needs TTFB, INP, or CLS without opening a browser. It refreshes roughly daily with a short processing lag; it does not return the long weekly history that the History API exposes.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Need&lt;/p&gt;&lt;/th&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Tool&lt;/p&gt;&lt;/th&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Granularity&lt;/p&gt;&lt;/th&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;History&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Quick check on one URL&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;PageSpeed Insights&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Origin + URL when eligible&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Latest 28-day period only&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;SEO reporting by URL group&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Search Console CWV report&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Origin / URL groups&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Status trends, not full metric export&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Automation for &quot;today's field&quot;&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;CrUX API `queryRecord`&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Origin or URL&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;One collection period per call&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Metric definitions and thresholds&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;[Core Web Vitals guide](https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026)&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Reference&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;N/A&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 id=&quot;crux-vis-and-the-crux-history-api-ttfb-inp-and-cls-field-history&quot; class=&quot;scroll-mt-24&quot;&gt;CrUX Vis and the CrUX History API: TTFB, INP, and CLS field history&lt;/h2&gt;&lt;p&gt;The old CrUX Dashboard's real value was trend lines: did INP drift after the tag manager change, did TTFB step up when the CDN rule shipped, did CLS calm down after the font fix? Current field snapshots in PageSpeed Insights answer &quot;where are we this week?&quot; History answers &quot;when did it start moving?&quot; Those are different tools now, and most teams need both answers on retainer accounts.&lt;/p&gt;&lt;h3&gt;CrUX Vis for weekly field trend charts&lt;/h3&gt;&lt;p&gt;CrUX Vis is Google's direct replacement UI. Point it at an origin or URL and open the Core Web Vitals, Loading Performance, Interactivity, or Visual Stability pages. Each chart shows weekly distributions built from the CrUX History API, with each point covering the previous 28 days of Chrome experiences. Data updates on Mondays; you can see up to about 40 weeks where Google has samples. TTFB sits with loading metrics; INP with interactivity; CLS with visual stability. CrUX Vis is free, fast compared with the old Looker report, and enough for a quarterly business review on one domain. It still queries one origin or URL at a time, so it does not replace a spreadsheet of fifty client homepages.&lt;/p&gt;&lt;h3&gt;Query the CrUX History API for programmatic field history&lt;/h3&gt;&lt;p&gt;The CrUX History API (&lt;code&gt;queryHistoryRecord&lt;/code&gt;) powers CrUX Vis and any custom chart you build. With a Google Cloud API key you can pull weekly time series for origins and, critically, for URLs that qualify, which monthly BigQuery alone did not make easy for page-level history. Set &lt;code&gt;collectionPeriodCount&lt;/code&gt; up to 40 to match the Vis window. Pair History API calls with daily &lt;code&gt;queryRecord&lt;/code&gt; calls when you want both &quot;what happened over the last six months&quot; and &quot;what changed since Tuesday's deploy.&quot; Google's &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/guides/history-api&quot;&gt;History API guide&lt;/a&gt; documents form factors, histogram densities, and collection period dates; put those dates on client slides so nobody mistakes a four-week blend for a live score.&lt;/p&gt;&lt;h3&gt;BigQuery for long-archive Chrome UX Report analysis&lt;/h3&gt;&lt;p&gt;BigQuery (&lt;code&gt;chrome-ux-report&lt;/code&gt; public dataset) remains the long-archive option. Monthly tables still publish for deep analysis, competitive research, and custom Looker Studio reports on your own billing account. Load times are slower and the data is less current than the APIs, but you can join CrUX to analytics exports, slice by country or device tables, and keep years of origin history that exceed the History API window. Expect to pay for queries after the free tier unless you cache results. Some newer sub-metrics appear in APIs before every BigQuery table catches up; check &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/release-notes&quot;&gt;CrUX release notes&lt;/a&gt; when you standardise a metric set for client reports.&lt;/p&gt;&lt;h2 id=&quot;crux-vis-crux-history-api-or-bigquery-which-fits-your-question&quot; class=&quot;scroll-mt-24&quot;&gt;CrUX Vis, CrUX History API, or BigQuery: which fits your question?&lt;/h2&gt;&lt;p&gt;Teams often ask for one replacement tool. In practice you pick by question, budget, and who needs to open the chart. Use CrUX Vis when a technical lead or SEO owner needs a trustworthy trend for one priority origin or URL and nobody wants to maintain a script. It is the fastest honest answer to &quot;show me INP over the last few months&quot; in a client call. Use the History API when you need the same series inside your own dashboard, a weekly email, or a database next to deploy tags. Use BigQuery when the question needs custom SQL, long horizons, or joins that Google's UI will never ship. Use PageSpeed Insights or the daily API when the question is simply whether today's field p75 cleared the budget.&lt;/p&gt;&lt;p&gt;None of these options shorten the 28-day rolling window. A fix shipped yesterday still ages into field aggregates gradually, which is why scheduled lab monitoring matters during the lag. &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights versus automated monitoring&lt;/a&gt; covers that split for teams who outgrew manual checks; the CrUX retirement does not remove the need for a lab clock beside the field clock.&lt;/p&gt;&lt;h2 id=&quot;third-party-chrome-ux-report-tools-for-agency-portfolios&quot; class=&quot;scroll-mt-24&quot;&gt;Third-party Chrome UX Report tools for agency portfolios&lt;/h2&gt;&lt;p&gt;Google is not the only place to chart CrUX. Several products wrap the History API or BigQuery with alerts, competitor views, and multi-URL boards. &lt;a rel=&quot;nofollow&quot; href=&quot;https://treo.sh/&quot;&gt;Treo&lt;/a&gt; is a common example for agencies that want CrUX-heavy field exploration and large URL lists without building pipes themselves. Field explorers and scheduled PageSpeed monitoring solve different jobs, and many teams use both. For how agencies shortlist monitoring tools on features and workflow fit, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/comparing-pagespeed-monitoring-tools-features-agencies-need&quot;&gt;comparing PageSpeed monitoring tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Apogee Watcher sits on the scheduled lab side of that split. We run PageSpeed Insights-backed tests across many sites on a cadence you set, store LCP, INP, CLS, FCP, and Total Blocking Time from lab runs, and show CrUX field numbers beside those results when Google returns them for the URL. We do not replace CrUX Vis for a six-month INP line chart on one domain, and we do not replicate BigQuery. We do give agency portfolios a repeatable before-and-after history on priority pages, budgets, and alerts while field data catches up, layered onto Search Console and the explorers you already use.&lt;/p&gt;&lt;p&gt;Field pipelines also slip. Collection delays, eligibility changes, and processing lag still show up in client inboxes as &quot;why is Search Console still amber?&quot; The same 28-day rolling window explains part of that lag after a deploy; see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window&quot;&gt;why your Core Web Vitals fix is not in CrUX yet&lt;/a&gt; for how to phrase timelines in client reports without blaming the wrong team.&lt;/p&gt;&lt;h2 id=&quot;what-no-free-chrome-ux-report-dashboard-replaces-after-retirement&quot; class=&quot;scroll-mt-24&quot;&gt;What no free Chrome UX Report dashboard replaces after retirement&lt;/h2&gt;&lt;p&gt;Being precise about gaps prevents another bookmark rot cycle. No free Google UI reproduces every old CrUX Dashboard view in one place. CrUX Vis does not list forty client origins on one screen. PageSpeed Insights does not chart six months of TTFB without you opening each URL. Search Console does not export weekly p75 series for every template. BigQuery is powerful but not free at scale and not friendly for account managers. The History API is accurate but requires engineering time.&lt;/p&gt;&lt;p&gt;Third-party tools close some of those holes with paid seats, URL limits, and their own refresh schedules. None of them remove CrUX eligibility rules: low-traffic pages still lack URL-level field data, desktop and phone still split, and rolling averages still trail deploys. The workable agency pattern we see is a small stack: CrUX Vis or a field explorer for deep history on hero URLs, Search Console for SEO status, scheduled lab monitoring for portfolio regression detection, and one sentence in the report that explains collection period dates. If nobody owns the threshold on a metric and nobody acts when it breaks, it should not be on the daily list, whether the chart came from Google or a vendor.&lt;/p&gt;&lt;h2 id=&quot;how-agencies-monitor-chrome-ux-report-field-metrics-across-client-sites&quot; class=&quot;scroll-mt-24&quot;&gt;How agencies monitor Chrome UX Report field metrics across client sites&lt;/h2&gt;&lt;p&gt;A practical Monday workflow after the dashboard retirement:&lt;/p&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;List priority origins and money URLs per client (home, pricing, signup, checkout, main templates). Match the list to URLs that actually receive Chrome traffic, not only the page engineering fixed in staging.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Pin one field history view per key domain. CrUX Vis or a History API-backed explorer for quarterly reviews; note the collection period on the screenshot.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Schedule lab tests on the same URLs. Use budgets so a deploy regression triggers before field data moves. Frequency guidance lives in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/how-to-schedule-pagespeed-monitoring-test-frequency-priority-portfolio&quot;&gt;how to schedule PageSpeed monitoring&lt;/a&gt; if you are standardising cadence across accounts.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Pull Search Console CWV status monthly for SEO owners. Treat it as a lagging group report, not a deploy gate.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Reserve BigQuery or custom API jobs for investigations (country regressions, device splits, before/after studies), not for every account manager every week.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Apogee Watcher automates steps two and three for multi-site organisations: discovery, scheduled tests, field slices when available, alerts, and client-ready exports without maintaining fifty PageSpeed Insights bookmarks. Start with a &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/check&quot;&gt;free domain check&lt;/a&gt; on one money URL if you want to see lab and field side by side before you add the portfolio, then expand the same URL list into budgets once the cadence feels right.&lt;/p&gt;&lt;h2 class=&quot;scroll-mt-24&quot;&gt;FAQ&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Is the CrUX Dashboard still available?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Google deprecated the shared CrUX Dashboard and turned off the CrUX Connector at the end of November 2025. You can copy the Looker Studio template and point it at your own BigQuery project, but the hosted connector most teams used no longer updates. CrUX Vis is Google's recommended first-party replacement for historical charts.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Where do I get field TTFB now that the dashboard is gone?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Check PageSpeed Insights field data for the latest rolling TTFB when Google publishes it for your origin or URL. For history, use CrUX Vis Loading Performance charts or query the CrUX History API for weekly TTFB series. BigQuery monthly tables remain available fo
&lt;/p&gt;</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/24402/crux-dashboard-retired-where-to-get-ttfb-inp-and-field-history</guid>
<pubDate>Mon, 10 Aug 2026 17:57:00 +0000</pubDate>
</item>
<item>
<title>Why Your Core Web Vitals Fix Isn't in CrUX Yet (28-Day Window)</title>
<link>https://coderlegion.com/23584/why-your-core-web-vitals-fix-isnt-in-crux-yet-28-day-window</link>
<description>&lt;p&gt;You shipped the fix on Tuesday. Hero images are compressed, the heavy tag is gone from the homepage, and Lighthouse on mobile looks healthier than Monday's run. Someone pastes the PageSpeed Insights link into Slack with a green check. On Thursday the account manager forwards a Search Console screenshot: the URL group is still Needs improvement, or field LCP in PageSpeed Insights is still amber. The instinct is to assume the deployment failed or that Google is ignoring the work. In most cases the change is real. Chrome User Experience Report (CrUX) data has not finished rolling the old sessions out of its window yet.&lt;/p&gt;&lt;p&gt;We already covered why lab and field can disagree on the same URL in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;synthetic versus real user monitoring&lt;/a&gt;. The gap below is the timeline inside that split: how CrUX's 28-day rolling average updates, why third-party and CDN fixes take weeks to show, and what to monitor so the client sees proof before Search Console turns green. If you only remember one rule, remember that field screenshots trail lab verification by design.&lt;/p&gt;&lt;h2 id=&quot;how-crux-data-updates-the-28-day-rolling-average&quot; class=&quot;scroll-mt-24&quot;&gt;How CrUX data updates: the 28-day rolling average&lt;/h2&gt;&lt;p&gt;CrUX is Google's public dataset of real-user Core Web Vitals from opted-in Chrome sessions on eligible origins and URLs. It is not a lab run. It is not a snapshot taken on the day you ship. According to &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/crux/api&quot;&gt;Chrome's CrUX API documentation&lt;/a&gt;, the numbers in PageSpeed Insights, the CrUX API, and related tools are a 28-day rolling average: at any moment you are looking at experiences collected across roughly the past four weeks, not &quot;yesterday after the release.&quot;&lt;/p&gt;&lt;p&gt;That design smooths day-to-day traffic noise. A busy campaign Friday or a quiet Sunday no longer swings the published p75 on its own. The trade-off is latency. Sessions collected before your fix stay inside the window until they age out, so a green lab run on ship day can sit next to amber field bands for days or weeks. Google's &lt;a rel=&quot;nofollow&quot; href=&quot;https://web.dev/articles/crux-and-rum-differences&quot;&gt;CrUX versus RUM differences&lt;/a&gt; article is blunt: CrUX uses a 28-day sliding window and you cannot shorten it. First-party RUM can show smaller time ranges if you accept more noise.&lt;/p&gt;&lt;p&gt;PageSpeed Insights and the daily CrUX API refresh that rolling window roughly every day, with a short processing lag (Chrome's docs put the API about two days behind &quot;today&quot; in Pacific time). Search Console's Core Web Vitals report draws on the same CrUX base, so client screenshots lag for the same reason. Monthly BigQuery CrUX tables and the weekly History API still describe overlapping 28-day collection periods; they do not collapse the window into a single-day score. For metric definitions before you argue about timelines, start with our &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026&quot;&gt;practical Core Web Vitals guide&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;when-does-crux-update-after-a-core-web-vitals-fix&quot; class=&quot;scroll-mt-24&quot;&gt;When does CrUX update after a Core Web Vitals fix?&lt;/h2&gt;&lt;p&gt;There is no single calendar day when CrUX flips to your new numbers. Each daily refresh drops the oldest day and adds a newer one. The published p75 moves gradually as post-fix traffic replaces pre-fix traffic inside the window. Teams often expect a step change on day 29. What you usually get is a curve: modest movement in the first week if traffic is high and the fix is large, clearer separation after two to three weeks, and a cleaner field result once most of the window is post-fix sessions.&lt;/p&gt;&lt;p&gt;Traffic volume matters. A high-traffic homepage pushes more new experiences into the aggregate each day, so old sessions lose weight faster. A low-traffic landing page can keep sparse pre-fix samples in the mix longer, and some URLs never earn stable URL-level CrUX at all. Origin-level field data can look better or worse than a single template depending on which URLs dominate Chrome traffic. Eligibility rules, form factor splits (phone versus desktop), and thin samples still produce &quot;no data&quot; in PageSpeed Insights even when lab runs succeed every morning.&lt;/p&gt;&lt;p&gt;So &quot;when does CrUX update?&quot; has two answers at once. The dataset refreshes often (daily for the API and PageSpeed Insights field numbers). The value you care about is always a rolling average, so field proof for clients trails lab proof by design. When tools expose &lt;code&gt;firstDate&lt;/code&gt; and &lt;code&gt;endDate&lt;/code&gt; on the collection period, put those dates on the report. Without them, a screenshot looks like a live score when it is really a four-week blend.&lt;/p&gt;&lt;h2 id=&quot;lab-scores-versus-crux-field-data-after-a-core-web-vitals-fix&quot; class=&quot;scroll-mt-24&quot;&gt;Lab scores versus CrUX field data after a Core Web Vitals fix&lt;/h2&gt;&lt;p&gt;Lab and field answer different questions on different clocks. A scheduled Lighthouse-style run through PageSpeed Insights measures a controlled load on a URL you choose, with a fixed device profile and network emulation, so you can compare Tuesday's ship to Monday's baseline under the same conditions. Field CrUX reports what real Chrome users experienced across devices, networks, cache states, and journeys over the rolling window. The short version for this lag: lab confirms the fix shipped; CrUX confirms enough real users have lived with it for the aggregate to move.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Signal&lt;/th&gt;&lt;th&gt;Clock&lt;/th&gt;&lt;th&gt;Best use after a fix&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scheduled lab (PageSpeed Insights / Lighthouse)&lt;/td&gt;&lt;td&gt;Same day, every run&lt;/td&gt;&lt;td&gt;Prove the change on priority URLs before the client meeting&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CrUX field (PageSpeed Insights, Search Console, CrUX API)&lt;/td&gt;&lt;td&gt;28-day rolling average&lt;/td&gt;&lt;td&gt;SEO and page-experience reporting once traffic ages in&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;First-party RUM&lt;/td&gt;&lt;td&gt;Configurable windows&lt;/td&gt;&lt;td&gt;Segmented proof if a client already has a snippet&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Trouble starts when one PageSpeed Insights paste is treated as both engineering proof and Search Console status. Spot checks also fail to scale once you manage many clients; that gap is why &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights versus automated monitoring&lt;/a&gt; exists. Keep lab history on a schedule so you can show before/after without waiting for CrUX. Label field screenshots as lagging indicators, not same-day scorecards.&lt;/p&gt;&lt;h2 id=&quot;why-core-web-vitals-fixes-take-weeks-to-show-in-crux&quot; class=&quot;scroll-mt-24&quot;&gt;Why Core Web Vitals fixes take weeks to show in CrUX&lt;/h2&gt;&lt;p&gt;Not every fix ages out of the rolling window at the same speed. Some lab improvements barely touch the field mix clients care about. The three cases below are the ones that show up most often in agency tickets after a &quot;green&quot; lab paste.&lt;/p&gt;&lt;h3&gt;Third-party script removal and CrUX lag&lt;/h3&gt;&lt;p&gt;Removing a heavy tag often improves lab Total Blocking Time and Interaction to Next Paint on a clean run the same day. Real users may still hit cached HTML, tag-manager containers that update later, or secondary templates where the tag remains. Old sessions with the heavy script stay in CrUX until they roll off. Lab green on the homepage is necessary; it is not enough until enough post-removal traffic fills the window.&lt;/p&gt;&lt;h3&gt;CDN and cache-rule changes&lt;/h3&gt;&lt;p&gt;CDN and cache-rule changes can cut Time to First Byte and Largest Contentful Paint in controlled tests within hours. Field users on different geographies, ISPs, and cache hit rates still contribute pre-change timings for weeks. Partial adoption of a new point of presence or a staggered purge means CrUX blends both eras. Expect Search Console origin status to move slowly even when synthetic runs look clear.&lt;/p&gt;&lt;h3&gt;Theme, template, and image work&lt;/h3&gt;&lt;p&gt;Theme, template, and image work (hero sizing, font loading, layout reserves for CLS) shows up cleanly in lab when you test the exact URL you changed. CrUX aggregates experiences across templates that share an origin. If only the blog template improved and the product listing still shifts, origin-level field bands can stay amber while your ticket looks closed. Align monitored URLs with the journeys that generate Chrome traffic, rather than the single page you edited in staging.&lt;/p&gt;&lt;p&gt;In our experience, the client conversation goes better when you separate three statements: (1) we verified the fix in lab on these URLs on these dates, (2) CrUX will keep including pre-fix sessions for up to about 28 days, and (3) we will watch field percentiles weekly without treating every daily wiggle as a regression. That framing prevents &quot;the fix did not work&quot; tickets in week one. It also gives account managers a shared script so engineering and SEO are not contradicting each other in the same thread.&lt;/p&gt;&lt;h2 id=&quot;how-to-monitor-core-web-vitals-while-crux-data-updates&quot; class=&quot;scroll-mt-24&quot;&gt;How to monitor Core Web Vitals while CrUX data updates&lt;/h2&gt;&lt;p&gt;Waiting passively for CrUX leaves a gap clients notice. They pay for confidence during the lag. A green Search Console badge later is not a substitute for that week. Set a monitoring plan that treats lab as the deploy gate and CrUX as the lagging SEO report.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Baseline before you change. Capture lab LCP, INP, and CLS (plus supporting timings you report) on mobile and desktop for the URLs in scope. Store the run dates so the before/after is not a memory test.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Keep a schedule after you ship. Daily or a few times per week on high-value pages, less often on long-tail templates, matching the priority model in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/how-to-schedule-pagespeed-monitoring-test-frequency-priority-portfolio&quot;&gt;how to schedule PageSpeed monitoring frequency&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Set budgets and alerts on lab vitals. Use thresholds from a shared &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/performance-budget-thresholds-template&quot;&gt;performance budget template&lt;/a&gt; so a regression during the CrUX wait still notifies someone, even if field data has not moved yet.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Read field data once a week. Check PageSpeed Insights or Search Console, note the collection period, and compare direction of travel rather than day-to-day noise.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Document the lag in client language. One sentence in the retainer report (&quot;Field CrUX remains a 28-day rolling average; lab trends below are same-week verification&quot;) saves a meeting.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Apogee Watcher runs that split for multi-site teams: scheduled PageSpeed Insights-backed lab tests across many sites, CrUX field numbers when Google returns them beside the lab result, budgets and alerts while you wait, and multi-tenant organisations so agencies are not pasting PageSpeed Insights links into spreadsheets. We do not replace first-party RUM. We do not invent a faster CrUX. We give you a repeatable lab clock next to the field clock Google already publishes, layered onto the SEO and observability tools you already use.&lt;/p&gt;&lt;h2 id=&quot;what-to-tell-clients-when-crux-has-not-updated-yet&quot; class=&quot;scroll-mt-24&quot;&gt;What to tell clients when CrUX has not updated yet&lt;/h2&gt;&lt;p&gt;Stakeholders rarely want a lecture on aggregation windows. They want to know whether the invoice bought a real improvement. Use a short script in email and in the monthly review. Do not put lab dates and field screenshots on the same slide without labels.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;What we fixed: name the change (script removed, image pipeline, CDN rule) and the URLs.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What lab shows now: before/after on the same strategy (mobile/desktop), with dates.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What field will do next: CrUX and Search Console update from a 28-day rolling average of real Chrome users; expect gradual movement over weeks, not an overnight flip.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What we watch meanwhile: scheduled lab budgets and alerts so regressions do not hide behind the lag.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What &quot;done&quot; means: lab stable in budget for several days, then field p75 entering Good (or the agreed band) on the URLs or origin in scope.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Avoid promising a specific Search Console colour by a calendar date unless traffic is huge and the fix is clear. Prefer ranges (&quot;we expect clearer field movement after two to three weeks of post-fix traffic&quot;) and show the collection period when tools expose it. If origin status stays poor while one landing page is excellent in lab, explain template mix rather than declaring CrUX broken.&lt;/p&gt;&lt;h2 class=&quot;scroll-mt-24&quot;&gt;FAQ&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;When does CrUX update after I fix Core Web Vitals?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The CrUX views in PageSpeed Insights and the CrUX API refresh often (typically daily for the rolling window, with a short processing lag). The number you see is still an aggregate of about 28 days of Chrome experiences, so your fix enters the published p75 gradually as older sessions age out. Plan client expectations in weeks, not hours.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Why is CrUX different from my Lighthouse score after a deployment?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Lighthouse (lab) measures a controlled run you triggered. CrUX (field) averages real users over a sliding 28-day window. Both can be correct at once: lab proves the new code path, field still includes pre-fix traffic. For shorter windows and session segments, see how first-party RUM sits beside CrUX in &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance&quot;&gt;synthetic versus real user monitoring&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Is Core Web Vitals in Search Console the same 28-day rolling average?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Search Console's Core Web Vitals report is based on CrUX field data, so it inherits the same rolling-window behaviour and eligibility limits. Treat it as a lagging SEO view, not a same-day deploy dashboard. Use scheduled lab monitoring for immediate verification.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;How long until field data fully reflects my change?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A full replacement of the window takes on the order of 28 days of post-fix traffic in the aggregate, though large improvements on high-traffic URLs can show direction earlier. Low-traffic URLs may move slowly or lack URL-level CrUX entirely. Keep lab history so you are not blind during that period.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Should agencies wait for CrUX before closing a performance ticket?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Close the engineering ticket when lab verification and release criteria are met, then keep a separate field-watch item until CrUX or Search Console moves into the agreed band. Mixing those two definitions of &quot;done&quot; creates false reopenings in week one. Budgets and alerts on scheduled tests keep the watch honest without daily manual PageSpeed Insights checks.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;On Monday, open the priority URL list for the account that shipped last week. Record lab LCP, INP, and CLS from the latest scheduled run beside CrUX or Search Console status, and note the collection period dates when they are available. One line per row is enough: lab improved, field still lagging, or field data missing. If you manage many client sites and need that history on a schedule, &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/&quot;&gt;start a free trial of Apogee Watcher&lt;/a&gt; or run a &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/check&quot;&gt;free domain PageSpeed check&lt;/a&gt; on one money URL first. Set budgets on the pages that pay the bills, review field collection periods weekly, and keep the 28-day rolling-average sentence in the client report until the amber screenshot turns green.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23584/why-your-core-web-vitals-fix-isnt-in-crux-yet-28-day-window</guid>
<pubDate>Tue, 28 Jul 2026 08:12:00 +0000</pubDate>
</item>
<item>
<title>When to Use Synthetic vs Real User Monitoring for Performance</title>
<link>https://coderlegion.com/21496/when-to-use-synthetic-vs-real-user-monitoring-for-performance</link>
<description>&lt;p&gt;Performance monitoring conversations often collapse two different questions into one: &quot;Are we fast in a controlled test?&quot; and &quot;Are we fast for real visitors?&quot; Synthetic monitoring answers the first; real user monitoring (RUM) answers the second. Teams that pick only one layer usually discover the gap after a deploy, when lab scores look fine but conversion drops on mobile, or when CrUX turns red a week later. What follows is a practical split for web teams and agencies: what each method measures, when each is worth the operational cost, and how scheduled PageSpeed monitoring with CrUX context fits beside first-party RUM without forcing a rip-and-replace.&lt;/p&gt;&lt;h2 id=&quot;what-is-synthetic-monitoring-for-web-performance&quot; class=&quot;scroll-mt-24&quot;&gt;What is synthetic monitoring for web performance?&lt;/h2&gt;&lt;p&gt;Synthetic monitoring runs automated tests against URLs you choose, on a schedule you control, in a lab environment, loading each page with a fixed device profile, simulated network, and throttled CPU (for example Lighthouse mobile emulation through &lt;a rel=&quot;nofollow&quot; href=&quot;https://pagespeed.web.dev/&quot;&gt;PageSpeed Insights&lt;/a&gt;) so results stay comparable run to run.&lt;/p&gt;&lt;p&gt;Typical outputs include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Core Web Vitals from the lab run (LCP, INP, CLS where Lighthouse reports them).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Lighthouse Performance score and supporting timings (FCP, TBT, Speed Index).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Diagnostics and opportunities (render-blocking resources, image sizing, third-party cost).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Chrome User Experience Report (CrUX) percentiles when Google publishes field data for that URL and strategy.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Synthetic monitoring is not a one-off PSI paste into a browser tab. It is the same class of measurement, repeated and stored so you can trend, alert, and report. Our &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights vs automated monitoring&lt;/a&gt; guide explains why spot checks fail once you manage more than a handful of URLs. Agencies use synthetic schedules to cover client portfolios (homepage, pricing, lead forms, checkout paths, and campaign landers), usually on both mobile and desktop strategies.&lt;/p&gt;&lt;h2 id=&quot;what-is-real-user-monitoring-rum&quot; class=&quot;scroll-mt-24&quot;&gt;What is real user monitoring (RUM)?&lt;/h2&gt;&lt;p&gt;Real user monitoring collects performance data from actual browser sessions on your site. A JavaScript snippet, or tag manager injection, records timings, navigation, and often custom attributes (logged-in state, plan tier, locale) as users browse, which is why RUM reflects real networks, devices, cache states, ad blockers, and consent banners rather than a fixed lab profile.&lt;/p&gt;&lt;p&gt;First-party RUM products (PageVitals, DebugBear, SpeedCurve, Datadog RUM, and others) let you:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Segment by page, device, geography, and custom tags.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;See distributions and percentiles from your traffic, not only Google's aggregate.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Monitor routes CrUX rarely covers well (authenticated app shells, low-volume templates).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Tie performance to business events when you connect analytics or product data.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That traffic mix is also why RUM is harder to compare week to week unless you control for seasonality and campaigns. For metric definitions shared by both lab and field programmes, start with &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026&quot;&gt;What Are Core Web Vitals?&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/lcp-inp-cls-what-each-core-web-vital-means-and-how-to-fix-it&quot;&gt;LCP, INP, and CLS explained&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;crux-vs-first-party-rum-both-are-field-data-but-not-the-same-thing&quot; class=&quot;scroll-mt-24&quot;&gt;CrUX vs first-party RUM: both are field data, but not the same thing&lt;/h2&gt;&lt;p&gt;Teams comparing RUM vs synthetic monitoring sometimes treat CrUX as &quot;free RUM,&quot; yet it is field data without session-level detail, and that distinction matters when you choose tooling or write a client report.&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Source&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;th&gt;Strength&lt;/th&gt;&lt;th&gt;Limit&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CrUX&lt;/td&gt;&lt;td&gt;Google's aggregated Chrome experience for URLs with enough traffic&lt;/td&gt;&lt;td&gt;Aligns with Search Console and SEO reporting; no snippet required&lt;/td&gt;&lt;td&gt;Rolling window; URL-level; limited segmentation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;First-party RUM&lt;/td&gt;&lt;td&gt;Your snippet on your origin&lt;/td&gt;&lt;td&gt;Session paths, custom tags, logged-in views&lt;/td&gt;&lt;td&gt;Consent, tag governance, maintenance per site&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Synthetic lab&lt;/td&gt;&lt;td&gt;Scheduled Lighthouse-style runs&lt;/td&gt;&lt;td&gt;Same-day, repeatable, works on staging&lt;/td&gt;&lt;td&gt;Simulated users, not real cache or ad mix&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;PageSpeed Insights and many monitoring tools show CrUX beside lab results, which helps public marketing URLs, but that pairing does not replace RUM when stakeholders ask what paying customers on 4G in Germany experience on a specific checkout step. &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/mobile-vs-desktop-core-web-vitals-monitoring-both&quot;&gt;Mobile vs desktop Core Web Vitals monitoring&lt;/a&gt; matters here as well: CrUX and lab both split by strategy, yet RUM segmentation is where device and connection reality show up for product decisions.&lt;/p&gt;&lt;h2 id=&quot;synthetic-vs-rum-comparison-for-web-teams&quot; class=&quot;scroll-mt-24&quot;&gt;Synthetic vs RUM: comparison for web teams&lt;/h2&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Question&lt;/th&gt;&lt;th&gt;Synthetic (scheduled lab)&lt;/th&gt;&lt;th&gt;First-party RUM&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Needs a script on the site?&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Works on staging / pre-release URLs?&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Usually no (no real traffic)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Comparable numbers every run?&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Depends on traffic mix&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Catches deploy regressions same day?&lt;/td&gt;&lt;td&gt;Yes, if scheduled&lt;/td&gt;&lt;td&gt;Yes, with enough sessions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Good for SEO / CrUX alignment?&lt;/td&gt;&lt;td&gt;Lab + CrUX in PSI output&lt;/td&gt;&lt;td&gt;CrUX separate; RUM is your own dataset&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Portfolio scale without per-site snippets?&lt;/td&gt;&lt;td&gt;Favourable for agencies&lt;/td&gt;&lt;td&gt;Harder (consent and client approvals)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Multistep flows (checkout, signup)?&lt;/td&gt;&lt;td&gt;Per-URL unless tool supports journeys&lt;/td&gt;&lt;td&gt;Strong when tagged correctly&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Neither approach wins outright because they answer different risk questions: synthetic shows whether yesterday's release broke lab thresholds on URLs you list, while RUM shows whether real users felt it across segments you care about.&lt;/p&gt;&lt;h2 id=&quot;when-synthetic-monitoring-is-the-right-choice&quot; class=&quot;scroll-mt-24&quot;&gt;When synthetic monitoring is the right choice&lt;/h2&gt;&lt;p&gt;Choose synthetic as your primary web performance layer when you manage many sites or URLs and need one schedule, one history store, and one alert policy without installing tags on every client origin. That is the common agency constraint on marketing sites, brochureware, and public app URLs where the client will not approve another analytics script.&lt;/p&gt;&lt;p&gt;Synthetic also fits when you need repeatable baselines before and after a change. Lab runs on the same URL, strategy, and daypart make comparisons honest, whereas field data drifts when traffic mix shifts. The same logic applies to low-traffic or new pages where CrUX may show &quot;no data&quot; for months while scheduled lab runs still return LCP, INP, and CLS every time.&lt;/p&gt;&lt;p&gt;Use synthetic for staging, preview, or password-protected builds before production, because RUM cannot run where users do not visit yet. Pair schedules with &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/the-complete-guide-to-performance-budgets-for-web-teams&quot;&gt;performance budgets&lt;/a&gt; and alerts when you need a steady measurement source, and with portfolio reporting when clients want trend lines instead of a PDF assembled from manual PSI tabs; &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/automated-vs-manual-pagespeed-testing-a-time-and-cost-comparison&quot;&gt;Automated vs manual PageSpeed testing&lt;/a&gt; shows the time cost when that layer is missing. Synthetic monitoring still does not replace backend APM, error tracking, or session replay: it measures web URLs in the browser lab, plus CrUX where published, not API latency inside your cluster.&lt;/p&gt;&lt;h2 id=&quot;when-real-user-monitoring-is-the-better-fit&quot; class=&quot;scroll-mt-24&quot;&gt;When real user monitoring is the better fit&lt;/h2&gt;&lt;p&gt;Choose first-party RUM when authenticated experiences dominate the product. Dashboards, account settings, and checkout after login often lack stable CrUX samples, and RUM with custom tags is how you prove INP on those routes. The same applies when stakeholders require segment-level proof by plan tier, locale, experiment bucket, or campaign source, because CrUX will not break down your traffic that way.&lt;/p&gt;&lt;p&gt;RUM also belongs in the stack when you already operate observability tooling and need web vitals beside traces and errors, when CI/CD or feature flags need session-level validation after release, or when multistep journeys must be measured as flows rather than isolated URLs. Legal and client approval for another script varies by estate, and if RUM is already installed you can add synthetic for URLs RUM under-samples or for pre-production checks, while teams with synthetic schedules add RUM where lab and CrUX disagree with support tickets or conversion data.&lt;/p&gt;&lt;h2 id=&quot;how-agencies-combine-synthetic-and-rum-across-client-portfolios&quot; class=&quot;scroll-mt-24&quot;&gt;How agencies combine synthetic and RUM across client portfolios&lt;/h2&gt;&lt;p&gt;Agencies rarely get a single answer across thirty clients, but a workable default is to run scheduled synthetic on mobile and desktop for public marketing and lead-gen URLs, read CrUX from the same test results, and keep budgets and alerts in one place without a snippet on every domain. For flagship SaaS or ecommerce clients with RUM already installed, keep their RUM vendor for logged-in app routes and use synthetic for the URLs the retainer covers and for prospects during &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-prospecting-workflow-analyze-report-qualify-reach-out&quot;&gt;performance audit outreach&lt;/a&gt;; when clients refuse third-party scripts, synthetic plus CrUX is often the entire programme, so say that explicitly in proposals rather than implying session replay is included.&lt;/p&gt;&lt;p&gt;In client reporting, separate slides for lab trends on priority URLs and for RUM segment summaries from the analytics team. Blending both into one green chart invites arguments about methodology. For tool selection by client shape, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/comparing-pagespeed-monitoring-tools-features-agencies-need&quot;&gt;comparing PageSpeed monitoring tools for agencies&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagevitals-vs-apogee-watcher-rum-cicd-agency-portfolio-monitoring&quot;&gt;PageVitals vs Apogee Watcher&lt;/a&gt; when RUM and CI/CD are part of the brief. SaaS product teams face a similar split at single-company scale; our &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/performance-monitoring-saas-metrics-product-teams&quot;&gt;SaaS performance monitoring guide&lt;/a&gt; covers URL priorities without repeating the full decision tree here.&lt;/p&gt;&lt;h2 id=&quot;how-scheduled-pagespeed-monitoring-fits-beside-rum-vendors&quot; class=&quot;scroll-mt-24&quot;&gt;How scheduled PageSpeed monitoring fits beside RUM vendors&lt;/h2&gt;&lt;p&gt;Apogee Watcher is built for scheduled synthetic monitoring across many sites: PageSpeed Insights-backed lab runs, CrUX when Google returns field data, vitals and optional FCP/TBT budgets, portfolio alerts, and multi-tenant organisations for agencies. We do not ship first-party RUM; we sit beside RUM, APM, and &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/lighthouse-ci-vs-managed-monitoring-build-vs-buy-agencies&quot;&gt;Lighthouse CI&lt;/a&gt; gates rather than replacing them, so when a client needs session-level RUM, PageVitals, DebugBear, or an observability vendor still belongs in the stack.&lt;/p&gt;&lt;p&gt;Watcher is often the better primary monitor when you run many client domains under one subscription without per-site RUM rollout, when &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/product-spotlight-how-apogee-watcher-discovers-pages-automatically&quot;&gt;automated page discovery&lt;/a&gt; should keep new templates on the schedule without spreadsheet maintenance, when retainers promise ongoing CWV oversight on public URLs rather than full product instrumentation, or when you want prospecting and free evaluation via the &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/check&quot;&gt;domain PageSpeed check&lt;/a&gt; before a client signs. Configure mobile and desktop strategies per URL, set budgets, route alerts, and review history in the app, and use RUM elsewhere when the question requires your traffic, your tags, and your logged-in routes.&lt;/p&gt;&lt;h2 class=&quot;scroll-mt-24&quot;&gt;FAQ&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;What is the difference between RUM and synthetic monitoring?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Synthetic monitoring runs controlled lab tests on chosen URLs on a schedule. RUM records performance from real user sessions in the browser, usually via a script you install. Synthetic is repeatable and works without site traffic; RUM reflects actual devices, networks, and behaviour, which is why most mature teams treat the two as complementary rather than interchangeable.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Is CrUX the same as RUM?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;No. CrUX is Google's aggregated field dataset for URLs with sufficient Chrome traffic, while RUM is first-party data you collect from your visitors. Both describe real loads in the field sense, but CrUX is not session-level RUM and cannot replace custom segmentation on your origin.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Should I use synthetic or RUM for Core Web Vitals?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Use both when you can. Synthetic and CrUX (via scheduled PSI runs) cover public URLs, staging, and low-traffic pages; first-party RUM covers segmented and authenticated experiences CrUX does not explain. SEO and client reporting often lean on CrUX, while product teams often lean on RUM for route-level proof.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Do agencies need RUM on every client site?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;No. Many retainers cover public marketing and key templates where synthetic plus CrUX is enough, and you add RUM when the contract includes logged-in app routes, the client already owns a RUM tool, or stakeholders require session-level segmentation that CrUX cannot supply.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Can synthetic monitoring replace RUM?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Not fully. Synthetic answers whether lab thresholds breached on listed URLs, while RUM answers what users experienced broken down by segment, so use synthetic for portfolio scale and pre-release checks and RUM where traffic truth and custom tags matter.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Does Apogee Watcher include RUM?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;No. Watcher schedules PageSpeed lab tests and shows CrUX where available, and you should layer it with your RUM or observability vendor when you need first-party session data on authenticated or heavily segmented routes.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;How often should synthetic tests run compared to RUM sampling?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Synthetic frequency is a schedule you set (daily, weekly, or higher on risky URLs), while RUM sampling is continuous or rate-limited by your vendor. Match synthetic cadence to release risk, use RUM for always-on field truth where installed, and see &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/how-to-schedule-pagespeed-monitoring-test-frequency-priority-portfolio&quot;&gt;test frequency and priority across a portfolio&lt;/a&gt; for scheduling patterns across many sites.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Pick synthetic when you need repeatable lab coverage at portfolio scale without a snippet on every domain, and RUM when session segments and authenticated routes drive decisions. Most mature stacks use both, with clear owners for each signal, rather than debating which single tool should own performance end to end.&lt;/p&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/sign-up&quot;&gt;Start a free Apogee Watcher account&lt;/a&gt; to schedule mobile and desktop tests with vitals budgets across your sites, or run a &lt;a rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/check&quot;&gt;free domain PageSpeed check&lt;/a&gt; to baseline a URL before you add RUM or expand monitoring.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21496/when-to-use-synthetic-vs-real-user-monitoring-for-performance</guid>
<pubDate>Sun, 28 Jun 2026 08:53:55 +0000</pubDate>
</item>
<item>
<title>Apogee Watcher vs PostHog Web Vitals: Synthetic PageSpeed Monitoring and Product Analytics Compared</title>
<link>https://coderlegion.com/14049/apogee-watcher-posthog-vitals-synthetic-pagespeed-monitoring-product-analytics-compared</link>
<description>&lt;p&gt;Core Web Vitals show up in two different places. One is &lt;strong&gt;real users&lt;/strong&gt;: metrics from the browser, fed by an analytics SDK. The other is &lt;strong&gt;scheduled tests&lt;/strong&gt;: Google’s PageSpeed machinery runs on a URL you choose, on a cadence you set.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://posthog.com/&quot;&gt;PostHog&lt;/a&gt; is the first kind for performance. Its &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://posthog.com/docs/web-analytics/web-vitals&quot;&gt;Web Vitals&lt;/a&gt; live under &lt;strong&gt;Web Analytics&lt;/strong&gt; and use the same &lt;code&gt;posthog-js&lt;/code&gt; SDK as the rest of product analytics. Apogee Watcher is the second kind: &lt;strong&gt;multi-tenant PageSpeed monitoring&lt;/strong&gt; on the &lt;strong&gt;PageSpeed Insights API&lt;/strong&gt;—Lighthouse lab data plus &lt;strong&gt;CrUX&lt;/strong&gt; where Google publishes it—for teams covering &lt;strong&gt;many sites&lt;/strong&gt; without putting a script on every domain.&lt;/p&gt;&lt;p&gt;PostHog is a strong product stack (flags, replay, experiments, warehouse analytics). We are not building that. PostHog’s Web Vitals module also does not replace &lt;strong&gt;synthetic monitoring&lt;/strong&gt; for sites you never instrument, and it does not include Watcher’s &lt;strong&gt;automated discovery&lt;/strong&gt;, &lt;strong&gt;performance budgets&lt;/strong&gt;, or &lt;strong&gt;agency RBAC&lt;/strong&gt; by default. The decision is which problem you are solving first—and whether you need &lt;strong&gt;both&lt;/strong&gt;.&lt;/p&gt;&lt;h2&gt;What PostHog Web Vitals actually is&lt;/h2&gt;&lt;p&gt;PostHog’s docs describe Web Vitals autocapture for &lt;strong&gt;FCP, LCP, INP, and CLS&lt;/strong&gt; via Google’s &lt;code&gt;web-vitals&lt;/code&gt; library. You turn on &lt;strong&gt;Web vitals autocapture&lt;/strong&gt; in project settings (separate from generic autocapture) and run &lt;code&gt;posthog-js&lt;/code&gt;&lt;strong&gt; v1.141.2 or newer&lt;/strong&gt;. Events are named &lt;code&gt;$web_vitals&lt;/code&gt;, with properties such as &lt;code&gt;$web_vitals_LCP_value&lt;/code&gt; per metric.&lt;/p&gt;&lt;p&gt;The UI is built for analysts: &lt;strong&gt;Web Analytics&lt;/strong&gt; → &lt;strong&gt;Web Vitals&lt;/strong&gt; gives trends, the same filters as the rest of Web Analytics, and a URL table in &lt;strong&gt;good / needs improvement / poor&lt;/strong&gt; buckets against PostHog’s thresholds (same bands as web.dev). You can view &lt;strong&gt;p75, p90, or p99&lt;/strong&gt;; PostHog &lt;strong&gt;recommends p90&lt;/strong&gt; as a balance between signal and noise. The &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://posthog.com/docs/toolbar&quot;&gt;toolbar&lt;/a&gt; shows vitals for the page you are on plus history for that page—handy while you debug in product.&lt;/p&gt;&lt;p&gt;That scope is intentional: PostHog gives you &lt;strong&gt;Core Web Vitals metrics&lt;/strong&gt; and trends for product analytics—it does &lt;strong&gt;not&lt;/strong&gt; replicate a &lt;strong&gt;full PageSpeed Insights or Lighthouse lab report&lt;/strong&gt;. You do not get the complete Lighthouse output from a PSI-style run: audit categories, opportunities, diagnostics, performance score breakdown, and the rest of the structured result you would see after calling the PageSpeed Insights API. For that depth you need a &lt;strong&gt;synthetic&lt;/strong&gt; lab run (or another tool that runs Lighthouse end to end), not &lt;code&gt;$web_vitals&lt;/code&gt; events alone.&lt;/p&gt;&lt;p&gt;Operationally, the SDK &lt;strong&gt;batches&lt;/strong&gt; vitals (a few seconds’ flush by default). You can &lt;strong&gt;sample&lt;/strong&gt; &lt;code&gt;$web_vitals&lt;/code&gt; in &lt;code&gt;before_send&lt;/code&gt; if billable events are a worry. PostHog suggests roughly &lt;strong&gt;30 &lt;/strong&gt;&lt;code&gt;$web_vitals&lt;/code&gt;&lt;strong&gt; events per 100 &lt;/strong&gt;&lt;code&gt;$pageview&lt;/code&gt;&lt;strong&gt; events&lt;/strong&gt; on average; vitals bill like any other event—see &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://posthog.com/pricing&quot;&gt;pricing&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Cookieless mode.&lt;/strong&gt; With PostHog’s &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://posthog.com/tutorials/cookieless-tracking&quot;&gt;&lt;strong&gt;cookieless tracking&lt;/strong&gt;&lt;/a&gt; (&lt;code&gt;cookieless_mode: 'always'&lt;/code&gt;, or the cookieless branch of &lt;code&gt;on_reject&lt;/code&gt;), &lt;code&gt;posthog-js&lt;/code&gt;&lt;strong&gt; does not send usable &lt;/strong&gt;&lt;code&gt;$web_vitals&lt;/code&gt;&lt;strong&gt; data&lt;/strong&gt;: each vitals payload needs &lt;strong&gt;session and window IDs&lt;/strong&gt;, and in these modes the usual session path is not there, so &lt;strong&gt;metrics are dropped&lt;/strong&gt;. If you run &lt;strong&gt;banner-free &lt;/strong&gt;&lt;code&gt;always&lt;/code&gt;&lt;strong&gt; cookieless&lt;/strong&gt;, do not expect a filled Web Vitals dashboard from PostHog alone—you give up that slice of analytics depth on purpose. SDK details change; check PostHog’s docs when you upgrade.&lt;/p&gt;&lt;p&gt;You only measure visitors who &lt;strong&gt;load the snippet&lt;/strong&gt; and whose sessions allow vitals (consent, ad blockers, cookieless settings, whether the page ran long enough to emit metrics). That fits &lt;strong&gt;your&lt;/strong&gt; product when capture is on. It does not cover &lt;strong&gt;dozens of client domains&lt;/strong&gt; you never instrument, or a &lt;strong&gt;prospect URL&lt;/strong&gt; before you have access.&lt;/p&gt;&lt;h2&gt;Budgets and email alerts: how much setup each tool expects&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;PostHog&lt;/strong&gt; has no monitoring-style “CWV budget” object—no per-URL LCP/INP/CLS cap with a built-in schedule and cooldown the way ops teams mean “budget.” You explore vitals in the &lt;strong&gt;Web Vitals&lt;/strong&gt; UI; &lt;strong&gt;alerts&lt;/strong&gt; hook onto &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://posthog.com/docs/alerts&quot;&gt;&lt;strong&gt;trends&lt;/strong&gt; insights&lt;/a&gt; in Product Analytics.&lt;/p&gt;&lt;p&gt;To get “email when this metric crosses a line,” you build or open a &lt;strong&gt;trend&lt;/strong&gt; that plots the right &lt;strong&gt;series&lt;/strong&gt; (often from &lt;code&gt;$web_vitals&lt;/code&gt; fields), pick the series the alert watches, set a fixed or &lt;strong&gt;relative&lt;/strong&gt; threshold, choose a check interval (hourly to monthly), and add &lt;strong&gt;email, Slack, or webhooks&lt;/strong&gt;. &lt;strong&gt;Goal lines&lt;/strong&gt; on the chart can match the threshold, but you are still in the insights product—not “add a budget for this URL” in one step. Someone has to keep those insights valid when events, filters, or properties change, and to align percentiles and sampling with what you are alerting on.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Watcher&lt;/strong&gt; puts &lt;strong&gt;performance budgets&lt;/strong&gt; and &lt;strong&gt;email&lt;/strong&gt; next to &lt;strong&gt;scheduled&lt;/strong&gt; PageSpeed tests for the org, site, or page you already track—no trend model first. Cooldowns are there to reduce alert noise for ops, not for funnel review. That is &lt;strong&gt;synthetic + CrUX&lt;/strong&gt; only; it does not replace PostHog alerts on signups, revenue, or anything non-PageSpeed.&lt;/p&gt;&lt;p&gt;Teams deep in PostHog often fine-tune vitals &lt;strong&gt;insights&lt;/strong&gt; and &lt;strong&gt;alerts&lt;/strong&gt; and are right to. If the job is “keep client sites inside CWV limits with little glue,” a monitoring product usually means &lt;strong&gt;fewer steps&lt;/strong&gt;.&lt;/p&gt;&lt;h2&gt;What Apogee Watcher optimises for&lt;/h2&gt;&lt;p&gt;Apogee Watcher is &lt;strong&gt;monitoring-first&lt;/strong&gt;, not analytics-first. We run &lt;strong&gt;scheduled&lt;/strong&gt; PageSpeed tests via Google’s API, store history per organisation, site, and page, and surface &lt;strong&gt;lab&lt;/strong&gt; and &lt;strong&gt;CrUX&lt;/strong&gt; together so you can see both “what Lighthouse saw” and “what Chrome users experienced at scale” when CrUX has data for that URL. You do &lt;strong&gt;not&lt;/strong&gt; deploy our code on your clients’ sites to get baseline monitoring—we hit public URLs from Google’s test infrastructure.&lt;/p&gt;&lt;p&gt;That design choice matters for agencies:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Add staging or production URLs even when marketing controls the tag manager and will not add another script.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Organisations, sites, pages, and Admin / Manager / Viewer roles match how agencies staff work—not one analytics property per product.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Sitemap and HTML crawl so new templates and landers are not stuck behind a manual URL list.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Budgets and alerts aimed at “tell us before the client’s CWV drifts for a week,” not funnel charts.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Leads Management for new business: prospect URL, one-page reports, time-limited share links, score-band outreach—&lt;strong&gt;revenue&lt;/strong&gt; workflows, not session analytics.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We do not ship a full &lt;strong&gt;product analytics&lt;/strong&gt; stack, &lt;strong&gt;session replay&lt;/strong&gt;, or &lt;strong&gt;feature flags&lt;/strong&gt;. If you need those, use a tool built for them—often PostHog.&lt;/p&gt;&lt;h2&gt;Side-by-side: where the overlap ends&lt;/h2&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Topic&lt;/p&gt;&lt;/th&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;PostHog (Web Vitals)&lt;/p&gt;&lt;/th&gt;&lt;th rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Apogee Watcher&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Primary job&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Product analytics OS; Web Vitals are real-user metrics from the browser&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Synthetic PageSpeed monitoring + CrUX in results&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Instrumentation&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Requires `posthog-js` on the site&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;No script on monitored sites&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Metrics&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;FCP, LCP, INP, CLS from real sessions (`$web_vitals`) when capture runs — not a full Lighthouse/PSI audit payload&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Lighthouse lab + CrUX (where available) via PSI (full Lighthouse context per scheduled run)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Cookieless analytics&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;With `always` (and cookieless paths without session IDs), `$web_vitals` does not populate—see Cookieless mode above&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;No snippet; tests do not use PostHog session state&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Best for&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;“How do my users experience my app?”&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;“How are these URLs doing on a schedule—and across many clients?”&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Multi-site agency&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Analytics projects and teams—not Watcher’s org/site/page model&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Multi-tenant orgs, roles, discovery, budgets&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Budgets &amp;amp; email alerts&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Insight-based—build trends from `$web_vitals`, attach [alerts](https://posthog.com/docs/alerts) with thresholds, frequency, destinations; maintain as analytics evolves&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Monitoring-native—performance budgets and email alerts tied to scheduled tests; no separate insight to curate first&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Extras&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Flags, replay, experiments, cohorts, warehouse pipelines&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;PDF-style reporting direction, Leads prospecting workflows&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Cost shape&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Event-based (vitals count toward event quotas)&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&lt;p&gt;Plan-based subscription; PSI quota bundled—verify [pricing](/pricing)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Use the table as a decision grid, not a spec sheet. Both products change; verify details on each vendor’s site before you buy.&lt;/p&gt;&lt;h2&gt;When PostHog is the better primary choice&lt;/h2&gt;&lt;p&gt;Choose PostHog when you &lt;strong&gt;own the app&lt;/strong&gt;, already want &lt;strong&gt;product analytics&lt;/strong&gt;, and need &lt;strong&gt;real-user vitals&lt;/strong&gt; next to releases, experiments, and segments. If the question is “did that React change hurt INP for paying customers on Safari?”, you want RUM inside analytics—not only a nightly PSI run.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Feature flags&lt;/strong&gt; and experiments sit next to Web Vitals, so you can tie score moves to &lt;strong&gt;what shipped&lt;/strong&gt;. We do not replace that layer.&lt;/p&gt;&lt;h2&gt;When Apogee Watcher is the better primary choice&lt;/h2&gt;&lt;p&gt;Choose Watcher when &lt;strong&gt;synthetic coverage&lt;/strong&gt; and &lt;strong&gt;agency workflow&lt;/strong&gt; matter more than in-app events:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;You watch &lt;strong&gt;many client or third-party sites&lt;/strong&gt; where you will not (or cannot) deploy PostHog for a baseline.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;You want &lt;strong&gt;scheduled&lt;/strong&gt; checks, &lt;strong&gt;regressions&lt;/strong&gt;, and &lt;strong&gt;budgets&lt;/strong&gt; even when traffic is quiet this week.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automated discovery&lt;/strong&gt; matters because CMSs and URL lists change constantly.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;You sell &lt;strong&gt;retainers&lt;/strong&gt; and need &lt;strong&gt;client-ready&lt;/strong&gt; reporting plus &lt;strong&gt;role separation&lt;/strong&gt; (internal vs customer).&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For the upgrade story from manual checks, see &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough&quot;&gt;PageSpeed Insights vs Automated Monitoring&lt;/a&gt;. For setup at scale, &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/blog/how-to-set-up-automated-pagespeed-monitoring-for-multiple-sites&quot;&gt;How to Set Up Automated PageSpeed Monitoring for Multiple Sites&lt;/a&gt; tracks the same workflow we care about.&lt;/p&gt;&lt;h2&gt;The complementary stack (layer, do not replace)&lt;/h2&gt;&lt;p&gt;For many agencies the practical setup is &lt;strong&gt;both&lt;/strong&gt;: PostHog (or similar) for &lt;strong&gt;behaviour and real-user vitals&lt;/strong&gt; on sites you control, plus Watcher for &lt;strong&gt;multi-site synthetic monitoring&lt;/strong&gt;, &lt;strong&gt;CrUX&lt;/strong&gt; where Google provides it, and &lt;strong&gt;prospecting&lt;/strong&gt; workflows. Different questions:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;PostHog Web Vitals&lt;/strong&gt; — What did &lt;strong&gt;users&lt;/strong&gt; experience on routes we instrumented?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Watcher&lt;/strong&gt; — Are &lt;strong&gt;our URLs&lt;/strong&gt; still inside budget—what did &lt;strong&gt;lab + CrUX&lt;/strong&gt; show on the last scheduled run?&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;RUM alone can miss &lt;strong&gt;pre-launch&lt;/strong&gt; or &lt;strong&gt;zero-traffic&lt;/strong&gt; URLs. Synthetic alone can miss &lt;strong&gt;logged-in&lt;/strong&gt; or &lt;strong&gt;heavy-JS&lt;/strong&gt; interaction pain. Together they cover more ground.&lt;/p&gt;&lt;h3&gt;If you already use PostHog, what does Watcher add?&lt;/h3&gt;&lt;p&gt;You already have &lt;code&gt;$web_vitals&lt;/code&gt;, charts, and optional &lt;strong&gt;trend alerts&lt;/strong&gt;—except in &lt;strong&gt;cookieless&lt;/strong&gt; setups where vitals do not fire (see above). Watcher does not copy flags, replay, or experiments. It adds:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CWV signals when PostHog cannot send vitals.&lt;/strong&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://posthog.com/tutorials/cookieless-tracking&quot;&gt;Cookieless &lt;/a&gt;&lt;code&gt;always&lt;/code&gt; (or the no-session cookieless branch) leaves the Web Vitals view empty. Watcher still runs &lt;strong&gt;scheduled PSI + CrUX&lt;/strong&gt; on the URLs you care about—&lt;strong&gt;independent of cookies, consent, or snippet load.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Scores without traffic.&lt;/strong&gt; PSI can run on a timetable when visits are rare, the page is new, or the build is on &lt;strong&gt;staging&lt;/strong&gt; without production tagging. PostHog needs visitors; Watcher needs a &lt;strong&gt;public URL&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Sites with no PostHog.&lt;/strong&gt; Retainers, handovers, marketing-owned stacks, or &lt;strong&gt;prospects&lt;/strong&gt; before contract: you still get lab + CrUX from Google &lt;strong&gt;without&lt;/strong&gt; another analytics install per domain.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Portfolio shape.&lt;/strong&gt; Orgs, sites, pages, &lt;strong&gt;Admin / Manager / Viewer&lt;/strong&gt;, and &lt;strong&gt;sitemap + crawl discovery&lt;/strong&gt; match “many clients, many URLs,” not one analytics project per product.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Monitoring alerts.&lt;/strong&gt; Thresholds and email on &lt;strong&gt;test results&lt;/strong&gt; and cooldowns, without building a &lt;strong&gt;trend&lt;/strong&gt; per metric (see &lt;strong&gt;Budgets and email alerts&lt;/strong&gt; above).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Sales workflows.&lt;/strong&gt; &lt;strong&gt;Leads Management&lt;/strong&gt;—prospect URL, one-page report, share link, score-band outreach—where PageSpeed is part of &lt;strong&gt;new business&lt;/strong&gt;, not product analytics.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Two lenses on one site.&lt;/strong&gt; On your own marketing site you can compare &lt;strong&gt;browser RUM&lt;/strong&gt; with &lt;strong&gt;scheduled lab + CrUX&lt;/strong&gt;. When they disagree, that is often &lt;strong&gt;lab vs field vs session&lt;/strong&gt;—useful, not contradictory.&lt;/p&gt;&lt;p&gt;Watcher is not a second analytics product. It adds &lt;strong&gt;external monitoring&lt;/strong&gt;, &lt;strong&gt;agency access control&lt;/strong&gt;, and &lt;strong&gt;stored synthetic history&lt;/strong&gt; next to what PostHog already does.&lt;/p&gt;&lt;h2&gt;Limitations we will not sugar-coat&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Watcher&lt;/strong&gt; is not &lt;strong&gt;session replay&lt;/strong&gt;, &lt;strong&gt;funnels&lt;/strong&gt;, or &lt;strong&gt;feature flags&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;PostHog Web Vitals&lt;/strong&gt; are &lt;strong&gt;event streams&lt;/strong&gt; from the browser, not a &lt;strong&gt;full PSI/Lighthouse audit&lt;/strong&gt; (see &lt;strong&gt;What PostHog Web Vitals actually is&lt;/strong&gt;). Watcher’s &lt;strong&gt;stored PSI runs&lt;/strong&gt; include &lt;strong&gt;full Lighthouse context&lt;/strong&gt; on a schedule—lab plus CrUX—when you need that bundle. In &lt;strong&gt;cookieless&lt;/strong&gt; PostHog setups where *&lt;code&gt;$web_vitals&lt;/code&gt; never lands**, you have no CWV series in PostHog at all—**synthetic monitoring** (here or elsewhere) is how you keep scores without changing your privacy settings.&lt;/p&gt;&lt;p&gt;Cookieless PostHog and Watcher work side by side: your analytics privacy choice does not block &lt;strong&gt;server-side&lt;/strong&gt; PageSpeed tests.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CrUX&lt;/strong&gt; needs enough real Chrome traffic; quiet URLs may show no field data. &lt;strong&gt;RUM&lt;/strong&gt;, &lt;strong&gt;CrUX&lt;/strong&gt;, and &lt;strong&gt;lab&lt;/strong&gt; can disagree—that is normal.&lt;/p&gt;&lt;h2&gt;Bottom line&lt;/h2&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://posthog.com/docs/web-analytics/web-vitals&quot;&gt;PostHog’s Web Vitals docs&lt;/a&gt; cover &lt;strong&gt;real-user&lt;/strong&gt; vitals for teams on the SDK. Watcher covers &lt;strong&gt;scheduled synthetic + CrUX&lt;/strong&gt; for teams running &lt;strong&gt;many URLs&lt;/strong&gt; and &lt;strong&gt;client-facing&lt;/strong&gt; workflows. Decide on &lt;strong&gt;coverage&lt;/strong&gt; (script or not), &lt;strong&gt;question&lt;/strong&gt; (users vs URLs), and &lt;strong&gt;org model&lt;/strong&gt; (analytics project vs agency portfolio)—then use one tool or both.&lt;/p&gt;&lt;p&gt;If Watcher matches how you work, check &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/pricing&quot;&gt;pricing&lt;/a&gt; and &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/features/web-performance-monitoring-for-solo-operators&quot;&gt;features for solo operators&lt;/a&gt; and &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;https://apogeewatcher.com/features/web-performance-monitoring-for-agencies&quot;&gt;agencies&lt;/a&gt;—including what is live for &lt;strong&gt;Leads Management&lt;/strong&gt;—before you assume every seat gets full prospecting access.&lt;/p&gt;&lt;hr&gt;&lt;h2&gt;FAQs&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Is Apogee Watcher a PostHog alternative?&lt;/strong&gt;&lt;br&gt;No. PostHog is &lt;strong&gt;product analytics&lt;/strong&gt;; Web Vitals are one part. Watcher is &lt;strong&gt;PageSpeed / CWV monitoring&lt;/strong&gt; across portfolios. Use neither, one, or both.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Does PostHog replace scheduled Lighthouse monitoring?&lt;/strong&gt;&lt;br&gt;No for URLs you never instrument, or environments with no traffic. Synthetic runs still matter.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Does Watcher replace real-user vitals?&lt;/strong&gt;&lt;br&gt;No. RUM captures post-load behaviour (SPAs, logged-in flows). CrUX helps at URL level when Google has data; it is not full RUM.&lt;/p&gt;
</description>
<category>Other</category>
<guid isPermaLink="true">https://coderlegion.com/14049/apogee-watcher-posthog-vitals-synthetic-pagespeed-monitoring-product-analytics-compared</guid>
<pubDate>Mon, 06 Apr 2026 12:09:27 +0000</pubDate>
</item>
</channel>
</rss>