If your Add to Cart event shows up twice in Meta Events Manager for a single click, your numbers are wrong, and Meta optimizes on them. Duplicate events are one of the most common tracking problems on Shopify and WooCommerce stores, and they are easy to miss because the ads still run. This post shows how to confirm it, the usual causes, and how to fix them.
How to confirm an event fires twice
- Install a tag debugger such as the Meta Pixel Helper browser extension, and open your store in a fresh window.
- Add a product to the cart once. Count how many AddToCart events the extension lists.
- In Meta Events Manager, open Test Events and repeat the same action. Compare the count with what you saw in the browser.
- In Google Tag Manager, use Preview mode and check how many tags fire on the same event.
One action should produce one event. If you see two, or one event listed twice with the same parameters, you have a duplicate.
The usual causes
| Cause | What happens | What you see |
|---|---|---|
| Plugin plus GTM | A Meta or Facebook plugin sends events, and a GTM tag sends the same ones | Two identical AddToCart or Purchase events per action |
| Theme plus plugin | The theme ships its own pixel code and an app adds another | Duplicate PageView on every page |
| Two containers | An old GTM container or hard-coded snippet is still on the site | Every tag in it fires twice |
| Trigger too broad | A click trigger matches the button and its parent elements | One click sends several events |
| Page reload | The order confirmation page fires Purchase again on refresh | Purchase counted more than once for one order |
| Browser plus server | CAPI added with no shared event ID | Meta sees the same event from two paths |
How to fix it
- Choose one source for each event. Decide whether the plugin, the theme or GTM is responsible, and turn the others off for that event.
- Remove old code. Search the theme files, plugins and footer scripts for leftover pixel snippets and old container IDs.
- Narrow the trigger. Fire the tag from the specific button or data layer event, not from any click on a broad element.
- Fire Purchase once per order. Add a check so a refresh of the confirmation page does not send it again.
- Deduplicate server events. If you use the Conversions API, send the same event name and event ID from the browser and the server.
After each change, run the same test again and confirm one action gives one event.
Where an audit helps
Duplicates often sit next to other problems, like missing events or empty values, so it is worth checking everything at once. Our free tracking audit looks for missing, duplicate and misattributed events across GA4, Meta, Google Ads and TikTok on your store.