Available for projects & agency overflow · Quick reply, from the person who does the work

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.

Describe my issue Send a message

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.

Go further

Describe your need in one minute

A few targeted questions so I can reply with an estimate rather than another questionnaire.

outil
api
sens
frequence (facultatif)
Please provide an email or a phone number so I can get back to you.

Please provide an email or a phone number so I can get back to you.

Frequently asked questions

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.