Fixing Duplicate Conversion Events in Google Analytics | Adslytics | Adslytics

Conversion Fix How-To Guide

Fixing Duplicate Conversion Events in Google Analytics

By Muhammad Farooq · March 30, 2026 · 5 min read
Fixing Duplicate Conversion Events in Google Analytics

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:

  1. Create a 1st Party Cookie variable: "Cookie - Purchase Dedup" reading the cookie "ga4_purchase_fired"
  2. Add a trigger exception to the purchase tag: "Cookie - Purchase Dedup" equals "1"
  3. 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 →
← Back to Blog
Muhammad Farooq

Author

Muhammad Farooq GTM & Analytics Expert · Adslytics Founder

Tracking specialist with 10+ years of experience in Google Tag Manager, GA4, Server-Side Tracking, and Google Ads. Founder of Adslytics — a dedicated analytics agency with a 98% success rate across 232+ projects on Upwork.

Top Rated Plus LinkedIn Visit the author's profile →