Analytics · Survival Guide
Three years on, the complaints haven’t stopped — and most of them are correct. Here’s what actually changed, which of your old reports are genuinely gone, and how to rebuild the ones that mattered.
Universal Analytics stopped processing new data on 1 July 2023. The historical data went dark a year later. And there is still, in August 2026, a steady stream of people typing “GA4 alternative” into search engines at a volume that ought to embarrass somebody at Google.
I want to be fair to GA4 before I’m unfair to it, because the standard complaint — that it’s worse — isn’t quite right. It’s a different instrument measuring a different thing, built for a world where a user starts on a phone, continues on a laptop and finishes in an app, and where the session-and-pageview model of 2005 had stopped describing reality. The data model is better. The reporting interface built on top of it is, in my honest opinion, considerably worse, and the migration was handled with a carelessness that cost small businesses years of history.
So this isn’t a “GA4 is great actually” article. It’s a translation guide, written for someone who knew Universal Analytics well and now can’t find anything.
The One Conceptual Shift That Explains Everything Read this before anything else
Universal Analytics counted sessions containing pageviews. Everything in the interface descended from that. Bounce rate was a session with one pageview. Pages per session was arithmetic on pageviews. Goals were flags you attached to sessions.
GA4 counts events. That’s it. There is nothing else in the model. A pageview is an event called page_view. A scroll is an event. A purchase is an event. A session is not a primary object — it’s derived, reconstructed from an event called session_start and the events that follow it.
Once that lands, most of the confusing behaviour becomes predictable. Metrics vanished because they were arithmetic on a model that no longer exists. Reports feel sparse because you’re expected to define what matters rather than receive a default set. And numbers don’t reconcile with UA because they were never measuring the same object.
Which brings me to the first piece of practical advice, and it’s the one people resist hardest: stop comparing GA4 numbers to your UA numbers. Your sessions will differ. Your users will differ. Your conversion counts will differ. None of this is a bug you can configure away. Draw a line at the migration date, treat everything before it as a separate historical archive, and compare GA4 to GA4 from there on.
What Actually Went Away And whether you can get it back
Views. Gone entirely.
This is the loss that hurts real practitioners most and gets the least sympathy from Google. In UA you had a property containing multiple views, each with its own filters — an unfiltered raw view, a filtered production view, a test view, one per subdomain, one excluding internal traffic. It was the standard professional setup and it was free.
GA4 has no views. Standard properties get data filters, which handle internal traffic and developer traffic and not much else. Subproperties and roll-up properties, the nearest structural equivalent, are a 360 feature at enterprise pricing. If you need multiple filtered perspectives on the same data, your options are comparisons in the reporting interface (temporary, per-report) or exporting to BigQuery and filtering in SQL. Neither is a view. I’ve stopped pretending otherwise to clients.
Bounce rate. Sort of gone, then quietly returned.
GA4 launched without bounce rate and with engagement rate instead. An engaged session is one that lasts longer than ten seconds, or fires a key event, or includes at least two pageviews. Bounce rate was later added back as, literally, the inverse of engagement rate.
So the metric exists, but it means something different. UA bounce rate said “one pageview and left.” GA4 bounce rate says “not engaged by any of three definitions.” A blog post where readers spend four minutes and leave was a 100% bounce in UA and is highly engaged in GA4. That’s a genuine improvement in accuracy and a genuine break in your historical trend line.
Goals. Renamed twice.
UA goals became GA4 conversions, and on 21 March 2024 GA4 conversions became key events. The rename was platform-wide and permanent — every admin toggle, report column and API field. “Conversions” in GA4 now refers specifically to the advertising sense of the word. There’s no setting to revert, and any tutorial written before that date will send you looking for menu items that no longer exist under those names.
The full attribution model set. Genuinely gone.
Google removed first-click, linear, time-decay and position-based attribution from GA4 during 2023. Three models remain: data-driven attribution (the property default), paid and organic last click, and Google paid channels last click. The same removal has now worked through Google Ads — selectability for those four models ended in mid-July 2026, and by September any conversion action still using one is force-migrated to data-driven attribution, with no opt-out.
If you need first-touch attribution for demand-generation reporting, GA4 will not give it to you. You can reconstruct it from the BigQuery export, which is the answer to a surprising number of questions in this article.
The Limits Nobody Warns You About Where the numbers quietly stop being true
GA4’s interface will show you a number in almost any circumstance. It won’t always tell you the number is approximate. Four mechanisms are responsible.
Sampling. Explorations start sampling on standard properties once a query crosses roughly ten million events, or when high-cardinality dimensions are involved. Google does not publish a precise threshold and it varies by report type and date range. Sampled reports carry an indicator in the corner that is easy to miss and rarely noticed by whoever receives the screenshot.
The (other) row. When a report exceeds GA4’s cardinality limit, everything past the ceiling gets swept into a single row labelled “(other).” This is the one that produces genuinely misleading conclusions, because a landing page report where a third of traffic sits in “(other)” looks complete. High-cardinality dimensions — page paths with query strings, client IDs, product SKUs — are the usual culprits. Strip query parameters where you can.
Thresholding. When Google Signals is enabled and a report could identify individuals from small cohorts, GA4 withholds the data entirely. Demographic and interest reports on low-traffic sites often show almost nothing for this reason. If a report is mysteriously empty, thresholding is the first thing to check — and turning Google Signals off can, counterintuitively, make more data visible.
Explorations row cap. Explorations top out at 100,000 rows per report. For most sites this is irrelevant; for large ones it silently truncates.
“GA4 will always show you a number. It will not always tell you whether that number was sampled, truncated, or withheld — and the screenshot certainly won’t.”
BigQuery: The Escape Hatch, and It’s Free The single highest-value thing you can do
The GA4 to BigQuery export is free to enable, and it solves nearly every problem above. No sampling. No (other) row. No thresholding. No fourteen-month retention ceiling — data persists as long as the table does. Every event parameter is available whether or not you registered it as a custom dimension, which is worth understanding on its own: in the interface, an unregistered parameter is invisible forever, while in BigQuery it’s just a field.
Two constraints matter. Standard properties are capped at one million events per day on the daily batch export, and if you consistently exceed it Google pauses the export rather than queueing the overflow — you lose the data outright. You can exclude specific events or data streams from the export to stay under the ceiling, and streaming export has no event limit if you’d rather go that way.
The second constraint is the important one: there is no historical backfill. The export captures data from the moment you switch it on and not one day earlier. Which makes this the cheapest insurance in analytics — enable it today even if nobody on your team writes SQL, because in eighteen months when somebody asks for a two-year trend, you’ll either have the data or you won’t.
Query costs come from BigQuery itself and are modest for most sites, provided you don’t write queries that scan entire tables repeatedly. Partition-aware queries and a bit of discipline keep most small and mid-sized properties inside the free tier.
Rebuilding the Reports You Miss
| What you had in UA | Where it is now | Difficulty |
|---|---|---|
| Landing Pages report | Reports > Engagement > Landing page. Exists, less detailed | Easy |
| Behaviour Flow | Explore > Path exploration. Different, arguably better | Easy |
| Goal Flow / funnel visualisation | Explore > Funnel exploration. Genuinely improved — open funnels, retroactive steps | Easy |
| Multiple filtered views | No equivalent on standard properties. Comparisons, or BigQuery | Not possible |
| First-touch attribution | Removed. Rebuild from BigQuery export | Hard |
| Site Search report | Enable in Enhanced Measurement, then report on view_search_results |
Medium |
| Custom Alerts | Admin > Custom insights. Fewer conditions available | Medium |
| Users Flow by segment | Explore > Path exploration with segments applied | Medium |
| Unsampled historical exports | BigQuery export, from the day you enable it | Medium |
| Pre-July-2023 UA data | Deleted by Google. Gone permanently | Not possible |
A Practical Setup Sequence About two hours, once
If you inherited a GA4 property somebody configured badly, or set one up in a hurry and never went back, this is the order I’d work in.
Set data retention to fourteen months. First, always. Not retroactive, so every day you delay is a day you lose.
Enable the BigQuery export. Second, for the same reason. Choose the data location carefully — it cannot be changed after linking.
Audit your key events. Check what’s marked as a key event and whether the counting method makes sense. Events created natively in GA4 default to counting once per event; those migrated from UA goals default to once per session. That difference is per-event, not per-property, so an inherited property needs checking event by event. It’s a common source of “why did our conversion count double.”
Register the custom dimensions you need. Event parameters are invisible in the interface until registered, and registration is not retroactive in reports. If you’re sending an author or category parameter and not seeing it, this is why.
Filter internal traffic. Admin, Data Streams, Configure tag settings, Define internal traffic. Then activate the filter in Data Settings — it defaults to Testing mode and does nothing until you switch it to Active. This trips up nearly everyone.
Strip query parameters from page paths. Unless you need them, they inflate cardinality and push real data into the (other) row.
Check your cross-domain configuration if you have one, and confirm your unwanted referrals list excludes payment processors. A Stripe or PayPal redirect that isn’t excluded will attribute a meaningful share of your revenue to “stripe.com / referral,” which is both wrong and demoralising.
The Six Problems Everyone Hits And what’s actually causing them
These come up so consistently that I now check them before anything else on an inherited property.
“My traffic doubled overnight and nothing changed.” Almost always double-tagging — the GA4 tag installed both through Google Tag Manager and hardcoded in the theme, or a plugin adding it alongside a manual implementation. Use the Google Tag Assistant or check the network tab for two collect requests per pageview.
“Direct traffic is enormous.” Some direct is genuine, but a share above roughly 25% usually means lost referrer data. Common causes: HTTPS-to-HTTP redirects stripping the referrer, missing UTM parameters on email and paid campaigns, cross-domain tracking not configured, and app-to-web traffic. GA4 also assigns traffic to direct when a session’s source can’t be determined and no prior campaign is within the lookback window.
“Revenue in GA4 doesn’t match the store.” It never will exactly, and a 5–10% gap is normal. Larger gaps usually mean the purchase event isn’t firing on some payment paths, the thank-you page is skipped on certain checkout flows, or a payment processor is being treated as a referral and cutting the session. Check the unwanted referrals list first.
“Conversion counts jumped when nothing changed.” Check the counting method on that key event. Once per event versus once per session produces very different numbers for anything a user can do more than once in a visit.
“A custom dimension shows (not set) for older dates.” Registration isn’t retroactive. The parameter was collected but not surfaced in reports until you registered it. The data is in BigQuery regardless, which is one more argument for the export.
“Real-time works but reports are empty.” Standard reports lag, typically by 24 to 48 hours for full processing. Judging a new implementation on the same day is a reliable way to conclude, wrongly, that it’s broken.
Should You Just Leave? A fair look at the alternatives
Plenty of people have, and it’s a more reasonable position than the Google ecosystem admits.
The privacy-focused analytics tools — Plausible, Fathom, Simple Analytics, Matomo — share a philosophy: cookieless by default, no consent banner required in many jurisdictions, dramatically simpler interface, and a single dashboard that loads in under a second and tells you what you needed to know. For a content site, a blog, or a business where analytics answers “how much traffic and where from,” they are straightforwardly better products. They cost roughly $9 to $20 a month at small scale, and the honest sales pitch is that you’ll actually open them.
What you lose is the Google integration, and that’s the whole argument. GA4 talks natively to Google Ads for conversion import and audience building, to Search Console, to BigQuery. If you spend meaningfully on Google Ads, leaving GA4 costs you optimisation signal that no independent tool replaces. Matomo is the middle path — feature-comparable to old UA, self-hostable, with an actual view equivalent — at the price of running infrastructure.
My rule of thumb: if Google Ads is a material channel for you, stay on GA4 and put the effort into BigQuery. If it isn’t, a lightweight tool alongside Search Console will serve you better than a GA4 property you never open. And nothing stops you running both — the marginal cost of a second script tag is small, and the cross-check is genuinely useful.
Three years in, I’ve made a rough peace with it. The interface remains slower and less intuitive than what it replaced, the removal of views was an unforced error, and deleting everyone’s historical data on a fixed deadline was worse. But the event model is right, the funnel and path explorations are better than UA’s ever were, and the free BigQuery export is a genuinely remarkable thing to hand people at no charge.
Enable the export. Set retention to fourteen months. Stop comparing to UA. Most of the pain is in those three sentences.
GA4 limits, retention settings and BigQuery export behaviour verified August 2026 against Google’s current Analytics Help documentation; attribution model changes verified against Google’s published announcements. This article contains no affiliate links.