{"id":"5solf5jzeq6g1av","title":"GA4 and Core Web Vitals Reporting Owners Actually Read","slug":"ga4-core-web-vitals-reporting","summary":"GA4’s default reports hide real Core Web Vitals pain behind useless averages. Here’s how I instrument web_vitals events, segment by device and page template, and build a dashboard owners actually use to fund fixes.","imageUrl":"https://briancrabtree.me/images/journal-ga4-core-web-vitals-reporting.webp","category":"Performance","date":"2026-06-14T18:00:00.000Z","featured":false,"likes":7,"author":"brian@briancrabtree.me","content":"<h2>Default GA4 Will Not Save Your CWV Program</h2>\n\n<p>I have built a lot of Google Analytics dashboards. Most Core Web Vitals reports in GA4 are useless for owners and product managers. They look official, aggregate everything into one polite average, and hide the segments where your site is actually bleeding conversions.</p>\n\n<p>After Universal Analytics, teams expected GA4 to ship a CWV panel out of the box. It does not. You get generic engagement metrics and sampled explorations that engineers cannot debug and executives will not fund. If you are still trusting a green Lighthouse score while GA4 stays silent, you are measuring the wrong layer.</p>\n\n<p>Field CWV data is what ranking signals and real users care about. GA4 can collect that signal — but only if you instrument it deliberately. Without custom events and dimensions, you are flying blind on the business side of performance.</p>\n\n<pre><code>// GA4 + CrUX — field LCP lives in PSI / Search Console\n// Lab scores in Lighthouse CI; field truth in CrUX + your RUM events\n// Push web_vitals_report with lcp_value, cls_value, inp_value, page_path</code></pre>\n\n<p><figure>\n  <img src=\"/images/journal-inline-ga4-core-web-vitals-reporting.webp\" alt=\"Split comparison of useless GA4 aggregate report versus actionable Core Web Vitals dashboard with device segmentation\" width=\"1200\" height=\"675\" loading=\"lazy\" />\n  <figcaption>Default GA4 smooths pain into averages; a real CWV dashboard segments by page, device, and funnel step.</figcaption>\n</figure></p>\n\n<h2>Why the Stock Reports Miss the Point</h2>\n\n<p>Dropping the GA4 tag on your site does not create a performance command center. Standard reports group events by name, not by render timing or interaction delay. Connecting a 4.2s LCP on checkout to a late hero image or a blocking third-party script becomes guesswork.</p>\n\n<p>Sampling makes it worse. A site-wide average can look acceptable while mobile users on slow connections see terrible INP on the same template. I have watched teams spend weeks debating framework choices when the data they needed was one segment filter away — if anyone had wired it.</p>\n\n<p>Executives do not reject performance work because they dislike fast sites. They reject it because the chart in front of them does not tie slow pages to revenue, leads, or support tickets. Generic GA4 views fail that test every time.</p>\n\n<h2>What Owners Actually Need to See</h2>\n\n<p>Product and business leads care about outcomes: conversion rate, bounce, form completion, return visits. A useful CWV report links LCP, CLS, and INP thresholds to those journeys — product view, add to cart, checkout, contact submit — not to abstract “site speed.”</p>\n\n<p>Segmentation is non-negotiable. Performance varies by device class, connection, geography, and campaign landing page. One headline number is theater. You need distributions: p75 LCP on mobile product pages, CLS on checkout for returning users, INP after the chat widget loads.</p>\n\n<p>That is the gap between lab vanity and field accountability. If you have not read the lab versus field distinction yet, start with <a href=\"/journal/lab-vs-field-data-pagespeed/\">Lab vs Field Data — When PageSpeed Scores Mislead You</a> — this GA4 layer sits on top of that reality.</p>\n\n<h2>Instrumenting Web Vitals as Custom Events</h2>\n\n<p>I push Core Web Vitals into GA4 as named events with explicit parameters. On each page view (or route change in a SPA), fire something like <code>web_vitals_report</code> with <code>lcp_value</code>, <code>cls_value</code>, <code>inp_value</code>, and <code>page_path</code>. Google Tag Manager is fine; a thin client module is fine — consistency matters more than the pipe.</p>\n\n<p>Register custom dimensions for device category, effective connection type, and internal page template (marketing, product, checkout). Without those, your events land in a bucket labeled “all users” and you are back to aggregates that teach nothing.</p>\n\n<p>Keep lab and field sources honest. CrUX in Search Console and PSI remains the public field record. GA4 RUM is your private drill-down: which template, which deploy, which segment regressed after you shipped the new hero video.</p>\n\n<h2>Building a Dashboard People Open on Mondays</h2>\n\n<p>With events flowing, I build explorations or Looker views that answer one question per tile: Where is LCP failing p75? Which CLS spikes correlate with ad slot injection? Did INP worsen after the tag manager container change?</p>\n\n<p>Each tile should point to a page path or component hypothesis, not a vanity gauge. I show trend lines over 28 days — CWV is a moving window, not a snapshot — and I annotate deploy markers so product can see cause and effect.</p>\n\n<p>The goal is a <em>google analytics cwv dashboard</em> that survives a leadership meeting: slow checkout on Android, fast homepage on desktop, fix list ordered by business impact. For the audit sequence that precedes this reporting work, see <a href=\"/journal/website-performance-audit-2026-react/\">Website Performance Audit Checklist for React Sites (2026)</a>.</p>\n\n<h2>From Charts to Fixes</h2>\n\n<p>Data without action is noise. When GA4 shows p75 LCP regression on a single template after a release, engineering gets a URL list, not a lecture about React. When CLS clusters on one ad partner, marketing gets a ticket with evidence.</p>\n\n<p>This setup changes conversations. Instead of “the site feels slow,” you get “mobile product LCP crossed 2.5s on 38% of sessions — here are the five URLs driving it.” That is how performance earns budget.</p>\n\n<p>I review the dashboard with stakeholders monthly. If nobody uses it to prioritize work, the tracking drifts and the charts rot. Treat GA4 CWV reporting like any other production system: owned, maintained, questioned.</p>\n\n<h2>What I Do Next</h2>\n\n<p>If you are standing up GA4 CWV reporting from scratch, sequence it: confirm field CWV in Search Console, instrument RUM events, segment by device and template, then tie tiles to funnel steps. Skip the step where you paste a Lighthouse PDF into Slack and call it analytics.</p>\n\n<p>Need help wiring custom dimensions, GTM containers, or a dashboard your team will actually read? I build these systems for owners who want performance tied to revenue, not vanity scores. <a href=\"/services/\">See services</a> or <a href=\"/contact?ref=journal-ga4-cwv\">send a brief</a> with your stack and reporting goals.</p>","tags":["ga4","core-web-vitals","analytics"],"views":45}