GA4 fires before the consent banner loads
The problem
If your GA4 tag fires on All Pages with no consent check, it sends pageview data to Google before the user has had a chance to accept or decline. Under GDPR this is a violation - analytics_storage requires consent before any data is transmitted for EU users.
How to find it
In GTM Preview, load the page with cookies cleared. Watch the tag firing sequence. If your GA4 Configuration tag fires before any CMP consent event, this is the issue.
The fix
Add a Consent Initialisation trigger to your GA4 tag. Set gtag consent defaults to denied for analytics_storage and ad_storage. Configure your CMP to push a consent_update to the dataLayer when the user accepts. The GA4 tag should fire (or refire) only after the consent update.
Duplicate GA4 measurement IDs from the UA migration
The problem
When migrating from Universal Analytics, many sites added a GA4 tag in GTM but forgot to remove the hardcoded GA4 snippet already in the site template. Result: two page_views fire per page load, doubling session counts and inflating all metrics.
How to find it
Open DevTools Network tab, filter for "g/collect". If you see two requests to the same measurement ID (G-XXXXXXXX) per page load, you have a duplicate.
The fix
Decide where GA4 should be managed - GTM or hardcoded snippet, not both. Remove whichever one is redundant. If using GTM, remove the hardcoded snippet from your site template and let GTM own all GA4 firing.
Enhanced Measurement events clashing with custom events
The problem
GA4 Enhanced Measurement auto-fires scroll, click, video, search, and file download events. If you also have custom GTM tags firing the same events with different parameters, GA4 receives duplicates. Scroll depth is the most common: Enhanced Measurement fires a scroll event at 90%, while a custom tag fires at 25%, 50%, 75%, 100%.
How to find it
In GA4 DebugView, load a page and scroll. If you see multiple scroll events per scroll action, Enhanced Measurement and custom tags are both firing.
The fix
Turn off the specific Enhanced Measurement events that overlap with your custom tracking. Keep the ones you are not tracking manually. Go to Admin - Data Streams - your web stream - Enhanced Measurement toggle - edit the individual events.
purchase event never marked as key event
The problem
GA4 renamed "conversions" to "key events" in early 2024. If you set up your purchase tracking before this change, the event may be firing correctly but not appearing in your conversions report - because it was never toggled on as a key event in the new interface.
How to find it
Go to Admin - Events. Find your purchase event. Check if the Key Event column is toggled on. Also check Advertising - Conversions to see which events are flowing to Google Ads.
The fix
Toggle the purchase event as a Key Event in Admin - Events. If you use Google Ads, also re-link it in Google Ads - Tools - Conversions - import from GA4 to make sure the renamed event flows through.
Consent Mode v2 missing ad_user_data and ad_personalization
The problem
Consent Mode v2 (required since March 2024 for EU advertisers) added two new signal types: ad_user_data and ad_personalization. Many sites updated their gtag consent defaults for analytics_storage and ad_storage but missed these two. Without them, Google Ads Smart Bidding and remarketing audiences are restricted for EU traffic.
How to find it
In GTM Preview, check the dataLayer for your consent_default event. It should contain all four: analytics_storage, ad_storage, ad_user_data, ad_personalization. If the last two are missing or undefined, this is the issue.
The fix
Update your Consent Initialisation tag to include all four signals in the default state. Also update your CMP integration to pass all four signals in the consent_update event when the user accepts marketing cookies.
Cross-domain tracking breaking checkout attribution
The problem
If your checkout, booking, or sign-up flow is on a subdomain or different domain (e.g. checkout.brand.com or brand.checkoutprovider.com), GA4 treats it as a new session by default. Users land on checkout as Direct traffic, losing the original acquisition source.
How to find it
In GA4 Explore, build a funnel from your homepage to your checkout thank-you page. If a large share of checkout sessions show Direct as source, cross-domain is broken. Also check if checkout URLs contain a _gl parameter - they should if cross-domain is working.
The fix
In Admin - Data Streams - Configure tag settings - Configure your domains, add all domains and subdomains in the same session. If using GTM, make sure the GA4 Configuration tag has linker settings enabled. Test by clicking a checkout link and verifying the _gl parameter is appended.
Data retention set to 2 months (the default)
The problem
GA4's default event data retention is 2 months. After that, raw event data is deleted and you can no longer build Explore reports for older date ranges. Most sites forget to change this because the setting is buried deep in Admin and there is no warning when data starts being deleted.
How to find it
Go to Admin - Data Settings - Data Retention. Check the Event data retention setting. If it says 2 months, change it now.
The fix
Change Event data retention to 14 months. This is the maximum available in GA4 free tier. Go to Admin - Data Settings - Data Retention - Event data retention - 14 months - Save. Note: this only affects data going forward, not already-deleted historical data.
Check your site for all 7 issues at once
GetInlytics runs a server-side scan of your URL and checks GA4 measurement ID, Consent Mode v2 signals, GTM container health, pre-consent tracking, and GDPR compliance. Results in under 60 seconds. No login required.