# Duplicates in the statistics: the real causes

> A duplicate (the same order counted twice) almost always has a traceable material cause: a container installed twice, a hard-coded tag alongside the one managed by the tag manager, a purchase event that refires on reload, or on Shopify two pixels coexisting for the same tool.

- Source canonique : [https://allaux.fr/en/services/tracking/doublons-statistiques-causes](https://allaux.fr/en/services/tracking/doublons-statistiques-causes)
- Langue : EN
- Dernière mise à jour : 2026-09-30

## Direct answer

> On the confirmation page, open developer tools (F12), Network tab, and filter on gtm.js, then on collect. Two loads of the same GTM-XXXXXXX container, or two requests carrying the same transaction_id, mean the tag is installed twice: once hard-coded in the theme, once by a module or plugin. Remove the older installation, not both.

## The situations I handle

- Purchases in GA4 clearly exceed the actual number of orders
- Revenue in ecommerce reports is visibly higher than the real figure
- The same Purchase event shows up twice in Meta’s Events Manager
- Duplicates mostly appear when a customer refreshes the confirmation page
- The duplicate appeared after adding an extra tracking module
- On Shopify, the same sale shows via both the official channel and a custom pixel

## How to spot a duplicate concretely

1. **1. Network tab: count the requests** — On the confirmation page, dev tools (F12), Network tab, filter on collect (Google) or tr (Meta). A legitimate event sends one request per tool. Two requests with the same transaction_id or event_id at once: confirmed duplicate, not assumed.
2. **2. Check how many GTM containers load** — Still in Network, filter on gtm.js. If this script appears twice with the same ID (GTM-XXXXXXX), it’s installed twice: once hard-coded in the theme, once via a module that loads it too.
3. **3. GTM preview: a tag firing twice** — For the purchase event, I check if the same tag appears twice in fired tags on one page load. If so, a duplicated trigger, or an identical hard-coded tag running in parallel, outside GTM.
4. **4. Search the page source for a hard-coded tag** — Search (Ctrl+F on ’View page source’) for gtag(, fbq( or the GTM container name. A call found next to a GTM already handling that tag confirms the hard-coded tag as the cause: remove it from the theme.
5. **5. Test reloading the confirmation page** — On the thank-you page, refresh (F5), then go back and revisit the URL. If purchase refires on every reload, there’s no replay protection: the most common cause of duplicates building up over time.
6. **6. On Shopify: app channel vs custom pixels** — Settings > Customer events, list active pixels. If the same tool shows both as an official app and a manual custom pixel, both send in parallel: disable one, not both.

## Once the cause is identified

The fix depends on the cause found, never a general assumption:

Duplicate GTM container: remove the hard-coded point once a module already handles GTM properly.

Hard-coded tag alongside GTM: remove it from the theme, let GTM drive the event alone.

Purchase replay: add protection based on transaction_id (local storage or a dataLayer check).

Duplicate Shopify pixel: keep one active channel per tool, official or custom depending on actual use.

## A duplicate also skews advertising budgets

> A purchase event counted twice feeds campaign optimisation algorithms (Google Ads, Meta Ads) with an inflated conversion value: it isn’t just a clean-reporting issue.

## Go further

- **Installing Google Tag Manager on Shopify** — Placing the container once, accounting for the new checkout. ([/services/tracking/google-tag-manager-shopify](/services/tracking/google-tag-manager-shopify))
- **Meta pixel and Conversions API** — Deduplication via event_id between browser pixel and server-side send. ([/services/tracking/pixel-meta-api-conversions-woocommerce](/services/tracking/pixel-meta-api-conversions-woocommerce))
- **Checking a tag without paid tools** — GTM preview, Tag Assistant, Meta Pixel Helper and the Network tab. ([/services/tracking/verifier-installation-balise-sans-outil-payant](/services/tracking/verifier-installation-balise-sans-outil-payant))
- **My conversions aren’t showing up** — The opposite symptom: nothing firing at all. ([/services/tracking/conversions-ne-remontent-pas](/services/tracking/conversions-ne-remontent-pas))
- **ChatGPT Ads conversion tracking** — OpenAI pixel, Conversions API, oppref and consent: the same pixel-plus-server logic, applied to ChatGPT ads. ([/services/tracking/suivi-conversions-chatgpt-ads](/services/tracking/suivi-conversions-chatgpt-ads))

## FAQ

### How do I know if duplicates come from a reload rather than a duplicated container?

Place a test order: duplicate on the very first visit (container or tag) or only after a manual refresh (event replay).

### Does removing a duplicate tag break existing tracking?

No, as long as the right one is removed, keeping the one properly managed by GTM or the official channel.

### Can the duplicate come from a recently installed module?

Yes: a tracking module added without disabling an existing module or snippet already doing the same job.

### On Shopify, should I keep the custom pixel or the official app channel?

Depends what’s actually used day to day; the key is keeping only one active per tool.

### How do I confirm the duplicate is gone after fixing it?

Place another test order and count network requests: a single purchase request per tool, one unique transaction ID.
