Tracking installed twice is more common than tracking installed wrong, because every path to installing it is still available after you have used one. The theme has a field for a measurement ID. The platform has a native integration. There is an app for it. And there is your container, which is where you put it. Use two of those and the page now carries the same tag twice, with no error, no warning, and a conversion count that is twice what it should be.
Google states the consequence plainly in its tag management documentation: if the same Google tag is configured two or more times on the same page, it may cause duplicate data or mixed settings. That second half is the part people miss. Duplicate data is the obvious symptom. Mixed settings, where two copies disagree about configuration and the one that wins is whichever loaded last, is the reason the behaviour can look inconsistent between pages and between visits.
How a site ends up with two of everything
Nobody installs a tag twice on purpose. It happens through sequence, and the sequence is almost always one of these.
- The predecessor hardcoded it. An agency or developer pasted the snippet into the theme years ago. You arrive, do it properly in a container, and never see the original because you were not looking in the theme files.
- The platform has a field for it. Shopify, Wix, Squarespace, WooCommerce and most site builders have a settings box for a pixel or measurement ID. Somebody at the client pasted it there, helpfully, without mentioning it.
- A plugin or app added it. An SEO plugin, a consent tool, a marketing app or a site kit that includes analytics as a feature. These are the hardest to find because the tag is injected at runtime and does not appear anywhere in the theme.
- Two containers both load. After a redesign or an agency change, the old container is still in the template alongside the new one, and both contain a version of the same tag. This also tends to resurrect tags you thought were decommissioned, which is its own problem covered in the dead tags still loading on your site.
- Someone solved a reporting gap by adding another copy. The most human cause. Data looked wrong, so a second installation was added to make sure, and the first was never removed.
What it looks like from the reports
The signature varies by what got duplicated, which is useful, because the symptom tells you where to look.
- Conversions at roughly double the real count.Rarely exactly double, because one copy may be blocked, load later, or fail on some pages. A ratio of 1.7 or 2.3 against the client’s own records is just as diagnostic as a clean 2.0.
- More conversions than clicks. A campaign reporting more conversions than it had clicks is a strong signal, and duplicate installation is one of the few explanations. We go through the full list in more conversions than clicks in Google Ads.
- Analytics page views doubled with engagement halved. Two page views per actual view inflates the denominator of every rate metric, so engagement, conversion rate and pages per session all look worse while traffic looks better.
- Ecommerce revenue at twice the real figure. The most alarming version, and the one most likely to get noticed, because somebody eventually compares it to the accounts.
- Inconsistent behaviour between page types. If a plugin injects a copy only on certain templates, the doubling is partial, which makes the arithmetic confusing and sends people looking for an attribution explanation instead of an installation one.
Note that the error is always flattering: more conversions, more revenue, more traffic. Nobody opens a support ticket because the numbers improved, which is why this routinely survives for a year or more.
Finding every copy
The trap here is stopping after you find the second one. If a site has accumulated installations over several agency relationships, there can be three. Search exhaustively rather than until the count looks right.
- Search the rendered page source for the ID itself. Not for the word gtag or the container prefix, but for the specific measurement or pixel ID. Count the matches. Do this on the homepage, a product or service page, and the thank you page, because they often differ.
- Watch the network requests. Filter network activity for the collection endpoint and count how many identical hits one page load produces. This catches runtime injection, which a source search misses entirely, and it is the only method that sees a copy added by a script.
- Open every platform integration panel.The native analytics or pixel field in the site builder, the ecommerce platform’s marketing or sales channel settings, and any connected app that mentions tracking. These are the fields nobody thinks to check because they are not where tracking is supposed to live.
- List the installed plugins and apps. Anything describing itself as analytics, SEO, marketing, consent or a site kit is a candidate.
- Check your container for internal duplication. Two tags in the same container with the same ID on overlapping triggers is a self-contained version of this bug, and it is easy to create when a tag gets copied as a template.
Two things that look like duplicates and are not, so you do not spend an afternoon chasing them. Tag Manager’s preview mode adds its own request, which is expected. And on a single page application, a debugging tool can report multiple instances as the app continues to navigate without reloading, which is a reporting artefact rather than a second installation. Verify in a normal browser session with extensions off before concluding anything.
Choosing which copy survives
Deleting the wrong one leaves you with tracking you cannot maintain, so decide on principle rather than on which is easier to reach.
- Keep the container implementation. It is versioned, it has an audit trail, it can be changed without a deployment, and it does not depend on a theme surviving its next update. This is almost always the right survivor.
- Remove the hardcoded snippet second. Record what it was before you delete it, including any configuration parameters it set, because those settings are easy to lose and hard to notice missing.
- Turn off the platform integration rather than deleting the field where you can, so it is obvious to the next person that it was a deliberate choice and not an oversight.
- Keep a platform-native integration only when it does something your container cannot. Some native ecommerce integrations have access to checkout events that are genuinely awkward to reach otherwise. If you keep one, remove the overlapping tags from your container instead, and write down why.
The setting that hides it instead of fixing it
Google provides an option called ignore duplicate instances of on-page configuration, in the manage Google tag section of the admin area. It is enabled automatically when you combine two Google tags, specifically to prevent issues, and Google also warns that combining tags with conflicting on-page configurations can cause later configuration commands to be ignored.
It is a genuinely useful safety net, and it is not a substitute for removing the second copy. Suppressing a duplicate configuration leaves two pieces of code on the page, maintained by two different people, in two places, and the next person to debug the site has to discover both. Use it to stop the bleeding today, then go and delete the duplicate properly.
Duplicate is not the same as deduplicated
One distinction worth keeping straight, because the words overlap. Sending the same event from the browser and from your server on purpose is a design, not a duplicate, and the platforms expect it: Meta’s Pixel reference recommends passing an event ID alongside the event when the Pixel runs together with the Conversions API, so the two reports of one event can be matched and counted once.
That mechanism solves intentional double sending. It does nothing for two copies of the same browser tag, which generate two separate events with different identifiers and are counted as two things that happened. If you are chasing the intentional version, our guide to fixing duplicate events between the Pixel and the Conversions API is the right starting point.
Verifying, and warning people first
After removing a copy, reload with the network panel open and confirm exactly one hit per event, on several page types, not just the one you were testing. Then check the next day’s numbers against the previous week.
And tell the client before you do it, not after. Conversions are about to halve, revenue is about to halve, and traffic is about to drop, all on the day you made a change you described as a fix. Pre-announced with the arithmetic attached, that is a correction and a credibility win. Discovered by the client in a dashboard on Monday, it is a crisis.
Our free tracking scan reads the public source and the published container in about thirty seconds and lists every pixel, tag and container with its real identifier, which is precisely the inventory that makes two copies of one ID visible. The honest limit is that a scan reads what the page declares, so a copy injected later by an app is better caught with the network check above.
Duplicates also arrive without anybody telling you, usually when a client installs an app that helpfully adds tracking. Taglert rechecks every connected account every thirty minutes and emails you when tracking changes, so the day a second copy appears is the day you hear about it.
A second copy usually arrives the day a client installs something helpful, which is what pixel monitoring software notices.
Sources
Stop finding out about broken tracking from your client.
Taglert monitors your pixels and conversion tracking 24/7 and alerts you the moment something breaks.
Start your free trial- First scan in ~5 minutes
- 30-day money-back guarantee
- No credit card
