Why Duplicate Events Are Hard to Detect
Duplicate conversion events are insidious because your website is working correctly — orders complete, forms submit. What is broken is that each action gets recorded twice (or more) in analytics. Your reports show inflated conversion counts and revenue, which can look like a positive trend until you notice the discrepancy with backend data.
Common Sources of Duplicates
1. Multiple GA4 Configuration Tags
If two GA4 Configuration tags exist in GTM — both with the "All Pages" trigger — every event fires twice: once for each configuration. This happens when a GA4 tag is added to a container that already had one, or when an old Universal Analytics setup was converted to GA4 without removing the original.
Diagnosis: GTM → Tags → filter by "Google Analytics" — should show only one GA4 Configuration tag. In GTM Preview, check whether GA4 events appear twice in the network requests.
Fix: remove or pause the duplicate configuration tag. Ensure only one GA4 Configuration tag exists with the correct Measurement ID.
2. Hardcoded GA4 Tag + GTM Tag
A common scenario: the developer added a GA4 snippet directly in the website's HTML (in a script tag), AND GTM also has a GA4 Configuration tag. Every page view and event sends twice.
Fix: choose one tracking method — either the inline snippet OR GTM, not both. Remove the inline snippet if GTM is the chosen method.
3. SPA Route Changes Firing Events
On single-page applications, each "virtual page view" push to the data layer can trigger a history change AND a custom event trigger simultaneously, firing the page view event twice.
Fix: use only one trigger type for SPA page views — either History Change OR Custom Event (virtual_page_view), not both.
4. Page Refresh on Confirmation Page
Users refreshing the order confirmation page trigger the purchase event again. If the conversion tag fires on every page load of the confirmation URL, each refresh records a new conversion.
Fix: use a transaction ID-based deduplication cookie. Before firing the purchase event, check if a cookie with that transaction ID exists. If it does, suppress the tag fire. Set the cookie on first fire.
GTM Deduplication Pattern
In GTM, add a trigger exception to your purchase tag:
- Create a 1st Party Cookie variable: "Cookie - Purchase Dedup" reading the cookie "ga4_purchase_fired"
- Add a trigger exception to the purchase tag: "Cookie - Purchase Dedup" equals "1"
- Add a Custom HTML tag that fires on the same trigger (after the purchase tag) to set the cookie:
document.cookie = "ga4_purchase_fired=1; max-age=3600; path=/"
This ensures the purchase tag only fires once per hour per browser session on the confirmation page, even if the page is refreshed.
Summary
Duplicate GA4 events most commonly come from multiple GA4 Configuration tags, hardcoded snippets alongside GTM, SPA page views double-triggered, or confirmation page refreshes. Diagnose by checking how many GA4 configuration tags exist and watching network requests in GTM Preview (each purchase should generate exactly one GA4 collect request per platform). Fix with deduplication cookies for confirmation page scenarios.
See our Conversion Tracking Fix service for deduplication implementation.
Need duplicate conversion events fixed? Contact Adslytics.
Need expert tracking setup?
Our Google Tag Manager experts have delivered 500+ tracking setups with a 98% success rate.
Get a Free Consultation →