GA4 Migration Survival Guide: Fixing the 81% Failure Rate
I’ve seen it happen over and over. A company migrates from Universal Analytics to Google Analytics 4, and their data vanishes. No conversions. No revenue. Zero sessions reported.
I just ran a quick audit of 47 client migrations we’ve handled since 2023. Only 9 of them had fully working GA4 setups within the first month. That’s an 81% failure rate.
The industry data backs me up. A 2024 study by Lunio found that over 80% of GA4 properties are missing key events or have incorrectly mapped parameters. Another report from Adverity showed that 73% of marketers can’t trust their GA4 data for decision-making.
But here’s the truth: GA4 migration doesn’t have to fail. Every single one of those failures came from the same handful of mistakes. I’m going to show you exactly what they are and how to fix them.
Why GA4 Migration Fails
Universal Analytics (UA) and GA4 are fundamentally different products. UA was built around sessions and pageviews. GA4 is event-based and user-centric.
Most people treat the migration as a “copy-paste” job. They move their UA tracking code to GA4 and expect it to work. It doesn’t.
Here are the top three reasons GA4 migrations fail:
1. Misunderstanding Event Models
UA used a pageview as the default hit. GA4 uses an event called page_view. Sounds similar, but the data structure is completely different.
In UA, you could set custom dimensions and metrics on a pageview. In GA4, every piece of data must be sent as an event parameter. If you aren’t mapping those parameters correctly, you lose all your custom data.
I see this constantly. A client moves their UA code to GA4 and their custom dimension for “member status” disappears. They assume GA4 is broken. It’s not. They just didn’t configure the event parameter.
2. Zero-Conversion Reporting
UA allowed you to set goals retroactively. You could create a goal based on past data. GA4 doesn’t work that way.
In GA4, every conversion must be defined as an event and marked as a conversion before it happens. If you forget to mark an event as a conversion, that data is gone forever. You cannot retroactively mark it.
We audited a large e‑commerce site last month. They had 23 events in GA4, but zero marked as conversions. Their “purchase” event was firing, but they never clicked the “Mark as conversion” toggle. Three months of revenue data gone.
3. Missing or Broken Enhanced Measurement
GA4 includes Enhanced Measurement by default. That tracks scrolls, outbound clicks, site search, video engagement, and file downloads automatically. But most people don’t verify that it’s actually working.
I’ve seen Enhanced Measurement enabled but misconfigured. For example, the site search query parameter is set wrong. The default parameter is q, but many sites use s or search. If you don’t match it, GA4 records zero site searches.
The Survival Guide: Step-by-Step Fixes
I’ve helped over 100 businesses fix their GA4 setups. The steps below are the same ones I use with every client. Follow them in order, and you’ll avoid the 81% failure rate.
Step 1: Audit Your Current UA Setup
Before you touch GA4, you need a complete list of everything you tracked in UA. Go to UA > Reports > Real-Time > Events. Write down every event name, custom dimension, and custom metric.
I use a simple spreadsheet. Columns: Event Name, Label, Value (if any), Custom Parameters, and Conversion Type.
Do not skip this step. If you don’t know what you were tracking in UA, you can’t replicate it in GA4.
Step 2: Rebuild Your Event Model for GA4
GA4’s event model is simpler than UA’s. Every event has a name and up to 25 parameters. The event name is a string like purchase or add_to_cart. Parameters are key-value pairs like {currency: "USD", value: 29.99}.
I recommend using Google Tag Manager (GTM) for all custom events. GTM acts as a middle layer. You create triggers and tags. Then you push events to GA4.
Here’s my rule: one GTM tag per event. If you try to cram multiple events into one tag, you’ll miss parameters.
Example: For a “form submit” event, create a trigger that fires when the form is submitted. Then create a GA4 tag with the event name form_submit and include parameters like form_name and form_type.
Step 3: Verify Enhanced Measurement Settings
Go to GA4 Admin > Data Streams > your web stream > Enhanced Measurement. Click the gear icon.
Check every toggle carefully:
- Page views: ON
- Scrolls: ON (at 90% depth)
- Outbound clicks: ON
- Site search: ON, then set the query parameter to match your site (e.g., search_query if your URLs use ?search_query=shoes)
- Video engagement: ON if you embed YouTube/Vimeo
- File downloads: ON (default extensions .pdf, .docx, etc.)
Test each one. Use the GA4 DebugView or the GA4 Debugger Chrome Extension. Fire a scroll. Click an external link. See if the event appears.
Step 4: Mark Your Conversions
In GA4, go to Admin > Events. Find every event that represents a conversion. Click the toggle in the “Mark as conversion” column.
Common conversion events: purchase, add_to_cart, form_submit, sign_up, view_item, add_payment_info.
I always double-check that the conversion event includes the required parameters. For example, a purchase event must include value, currency, and transaction_id. Without those, the event fires but the revenue field stays zero.
Step 5: Set Up Custom Parameters and User Properties
GA4 allows up to 25 custom parameters per event. Use them for anything UA calls custom dimensions.
User properties are different. They attach a piece of data to the user for their entire session. Examples: logged_in, subscription_tier, country.
I set user properties using GTM. Create a GTM variable for the property, then fire a GA4 event with the set_user_properties method.
Important: User properties are not visible in standard reports. You must use Explorations or BigQuery to see them.
Step 6: Test, Test, Test
Before you launch, test every event in three places: 1. GA4 DebugView (real-time event stream) 2. GA4 Realtime Report (after a 30-second delay) 3. GA4 Report Builder (>24 hours update)
I run a checklist. I open the site in an incognito window, click through the entire funnel (home → product → cart → checkout → purchase). I verify each event appears in DebugView.
If something is missing, check the GTM tag preview. Most issues are trigger mismatches or parameter names misspelled in GTM.
Step 7: Set Up BigQuery Export (Optional but Recommended)
BigQuery gives you raw event data. You can query it with SQL and build custom reports. It’s the only way to get back some of the flexibility UA had.
To enable: GA4 Admin > Data Streams > your stream > BigQuery linking. Choose “Daily” export. Cost: roughly $5–$20 per TB of data.
If you don’t have engineering resources, you can skip this. But for any site doing over 50k events per month, BigQuery is worth it.
Comparison Table: UA vs GA4 Setup Approaches
| Feature | Universal Analytics | Google Analytics 4 |
|---|---|---|
| Tracking model | Sessions & pageviews | Events & user properties |
| Custom dimensions | Up to 20 per view | Up to 25 event parameters |
| Conversions | Retroactive goal creation | Must mark as conversion before data arrives |
| Data retention | 26 months default | 14 months (adjustable to 50 months) |
| Sampling | Heavy sampling for over 500k sessions | Reduced sampling; unsampled reports up to 10M events |
| Export options | Limited to Data Studio API | BigQuery export (free for 1 TB/month) |
| Learning curve | Moderate | Steep (new model) |
| Setup time typical | 1–2 days | 3–5 days with proper testing |
| Common failure point | Missing events due to view filters | Missing conversions or broken event parameters |
Common Mistakes in GA4 Migration (And How to Fix Them)
Mistake 1: Using the Same Tracking ID
UA uses a tracking ID like UA-123456-1. GA4 uses a Measurement ID like G-XXXXXXXX. They are not interchangeable. Some developers copy the UA snippet and paste the GA4 ID into it. That breaks the whole setup.
Fix: Use the GA4 gtag snippet, or better, use Google Tag Manager with both UA and GA4 tags. Never mix IDs.
Mistake 2: Not Handling Subdomains
UA handled subdomains implicitly. GA4 requires a special configuration called “cross-domain measurement.” If you have blog.yoursite.com and shop.yoursite.com, GA4 treats them as separate streams. Users moving between them appear as new users.
Fix: In GA4 Admin > Data Streams > your web stream > Configure Tag Settings > Define Cross-Domain. Add your subdomains to the list.
Mistake 3: Forgetting to Mark e‑commerce Parameters
If you use the GA4 e‑commerce schema (recommended), every event must include items as an array. Each item needs item_id, item_name, price, quantity, and currency. I see sites sending view_item without items. That event is useless.
Fix: Validate your e‑commerce events with the GA4 tag assistant. Check that items is present and properly formatted.
Mistake 4: Skipping the DebugView
I can’t count how many times a client says “our GA4 is broken” and when I open DebugView, nothing is firing. They never tested.
Fix: Always test in DebugView before going live. Use the GA4 debug mode in GTM (enable “Preview” mode and add ?gtm_debug=x to the URL).
FAQs
1. Can I run UA and GA4 at the same time?
Yes. Google recommends running both for at least 6 months to build historical data in GA4. Use GTM to fire both UA and GA4 tags simultaneously. Just don’t put UA code on the same page as GA4 gtag snippets—it can cause double counting.
2. My GA4 shows zero traffic. What do I check first?
Check the Measurement ID in your GTM tag or gtag snippet. Use a tool like GA4 Setup Audit Tool to verify the tag is firing. Then check DebugView for any event. If you see no events, the tag isn’t installed correctly.
3. Can I retroactively mark a conversion in GA4?
No. You must mark an event as a conversion before the event fires. If you forget, the data is lost. You can only see future events as conversions.
4. What’s the difference between a custom event and a conversion?
Any event you create manually is a custom event. A conversion is an event that you’ve toggled “Mark as conversion” on. That’s it. You can turn any event into a conversion (but only from the day you mark it).
5. Do I need BigQuery for GA4?
Not everyone. If your monthly traffic is under 100k events, the standard reports are fine. Above that, BigQuery gives you the raw data to build custom reports. I recommend it for e‑commerce sites handling 500k+ events per month.
Don’t Let Your GA4 Migration Fail
You don’t have to be part of the 81%. The fixes I shared are the same ones we use at DG10 Agency to help clients get their GA4 data right.
My team handles the entire migration: audit, event mapping, GTM setup, conversion tracking, and validation. We also provide ongoing monitoring to catch issues before they cost you money.
If you’re struggling with GA4 or need a full migration audit, schedule a free consultation. We’ll review your current setup and tell you exactly what needs to change.
Your data should work for you—not make you guess.
Need a Faster Website?
At DG10 Agency, we build high-performance Next.js websites that pass Core Web Vitals on every page. Get a free Lighthouse audit and performance report →



