Troubleshoot and fix the 12 most common GA4 tracking issues including revenue mismatches, duplicate events, cross-domain problems, and iOS conversion tracking.
AI Summary
Quick Overview
Troubleshoot and fix the 12 most common GA4 tracking issues including revenue mismatches, duplicate events, cross-domain problems, and iOS conversion tracking.
How do I test GA4 tracking without affecting production data?
GA4 tracking issues can silently destroy your data quality, leading to incorrect business decisions and wasted ad spend. From revenue mismatches to missing events, these problems are more common than you think. This troubleshooting guide covers the 12 most common GA4 tracking issues and exactly how to fix them.
Issue #1: Revenue Mismatch Between GA4 and Your Ecommerce Platform
Your ecommerce platform (Shopify, WooCommerce, Magento) shows $100K in revenue, but GA4 only shows $85K. This 15% discrepancy is usually caused by missing purchase events, duplicate transactions, or incorrect ecommerce parameter mapping.
Root Causes
- Purchase event fires on order confirmation page, but users close browser before reaching it
- Payment processor redirects break the session before purchase event fires
- Incomplete ecommerce implementation missing required parameters
- Event fires multiple times for same transaction
- Currency conversion issues
The Fix: Server-Side Purchase Tracking
Implement server-side purchase tracking via your ecommerce platform webhooks. When an order is confirmed in your database, send the purchase event to GA4 via Measurement Protocol. This guarantees 100% capture regardless of browser behavior.
Issue #2: Duplicate Events Inflating Metrics
You see 2-3x more purchase or signup events than your database shows. This typically happens when multiple tracking implementations fire simultaneously (gtag.js + Google Tag Manager, or legacy Universal Analytics code still running alongside GA4).
How to Diagnose Duplicates
- Open GA4 DebugView and trigger a test purchase
- Watch the event stream - purchase should appear exactly once
- If you see multiple purchase events from one action, you have duplicates
- Check page source for multiple gtag.js or GTM containers
- Search for both gtag('config', 'G-... and GTM snippets
The Fix
Audit all tracking implementations. Remove hardcoded gtag.js if using Google Tag Manager. Ensure only ONE GA4 Configuration tag exists in GTM. Remove any Universal Analytics code (analytics.js or ga.js). Run everything through GTM exclusively for centralized control.
Issue #3: Cross-Domain Tracking Breaks Attribution
Users navigating from yoursite.com to checkout.stripe.com and back appear as new sessions. Conversions get attributed to "direct" traffic instead of the original source. This destroys your attribution data and makes campaigns appear ineffective.
The Fix: Configure Linker Parameter
Critical: Deploy this configuration on ALL domains in the linker array. Each domain must have the same Measurement ID and linker config.
Issue #4: iOS Conversions Not Tracked (ITP Problem)
Since iOS 14 and Safari Intelligent Tracking Prevention (ITP), client-side cookies are restricted to 7 days. Users who convert 8+ days after first visit lose attribution. For businesses with 14-30 day sales cycles, this destroys iOS attribution entirely.
The Fix: Server-Side Tracking
Implement server-side tracking to set first-party cookies with 1+ year lifetime. This bypasses Safari ITP restrictions and recovers 20-30% more conversions on iOS traffic.
Issue #5: Enhanced Measurement Events Missing
GA4 Enhanced Measurement auto-tracks scrolls, outbound clicks, site search, video engagement, and file downloads. If these events aren't appearing, the feature is disabled or blocked.
- Go to GA4 Admin > Data Streams > Enhanced Measurement
- Toggle ON all event types you want to track
- Verify your consent management platform isn't blocking GA4 before user consent
- Check ad blockers aren't removing gtag.js (use server-side to bypass)
Issue #6: Ecommerce Items Array Empty
Your purchase events show revenue but the items array is empty. This breaks product performance reports, merchandising analysis, and item-level attribution. You can't see which products drive revenue.
Issue #7: User ID Not Persisting After Login
You set User ID when users log in, but sessions before and after login aren't connected. This breaks cross-device tracking and logged-in/logged-out user journeys.
The fix: Set User ID on every page after login, not just the login page. Store user ID in a cookie or session and call gtag('config') with user_id parameter on each page load.
Issue #8: Consent Mode Blocking All Data
Google Consent Mode v2 is required for EU traffic as of March 2024. If implemented incorrectly, GA4 collects no data until users accept cookies (60-70% never do). Consent Mode allows cookieless pings that preserve modeled attribution without storing cookies.
Issue #9: Data Thresholding Hiding Metrics
GA4 applies data thresholding when user counts are low to protect privacy. You'll see a threshold icon and some data will be hidden. Solutions: increase traffic volume, remove User ID if not critical, or export to BigQuery where thresholding doesn't apply.
Issue #10: "(not set)" Appearing in Reports
(not set) appears when a dimension has no value. Common causes: missing UTM parameters, empty dataLayer variables, events firing before gtag config loads. Fix: implement a proper data layer with default values and ensure gtag config loads before any events fire.
How do I test GA4 tracking without affecting production data?
What is the fastest way to validate ecommerce tracking?
Stay ahead of the curve
Get the latest insights on AI, web development, and design — delivered weekly. No spam, ever.
Join 1,000+ readers. Unsubscribe anytime.