The Dead Tags Still Loading on Your Site Every Single Day

By Jackson Kolinski · October 20, 2026 · 8 min read
The Dead Tags Still Loading on Your Site Every Single Day

Tags are easy to add and nobody is responsible for removing them. The result, on most sites that have been running for more than a couple of years, is a layer of tracking code that does nothing at all: it loads, it fires, it sends a request to a service that was switched off, and it does that on every page view by every visitor, forever.

This is not the most expensive tracking problem you can have. A conversion tag reporting every visitor as a sale costs you far more. But dead tags are the most common, the easiest to confirm, and the only category where the fix carries essentially no risk, which makes them the right place to start on an unfamiliar site.

The two big ones

Universal Analytics

Google stopped processing new data in standard Universal Analytics properties on 1 July 2023, and shut off access to the remaining data and the API during 2024. A Universal Analytics tag on a site today is sending hits to an endpoint that discards them.

You can recognise them by the measurement ID format. Universal Analytics IDs look like UA-12345678-1. GA4 measurement IDs look like G-XXXXXXXXXX. If you see the UA- prefix anywhere in a container or in the page source, it is dead code.

These survive for a specific reason: the migration to GA4 was usually done by adding the new tag rather than replacing the old one, because running both in parallel was the sensible way to migrate. Parallel running was supposed to be temporary. For a lot of sites nobody ever came back to finish the job.

Google Optimize

Optimize and Optimize 360 were retired on 30 September 2023. The tag has a more interesting failure mode than Universal Analytics, because it does not simply waste a request.

Optimize shipped with an anti-flicker snippet, whose job was to hide the page briefly while the experiment variant loaded, so visitors did not see the original content flash before the test version replaced it. The snippet hides your page and then waits. With the service gone, it waits for the timeout and then reveals the page.

The practical effect is a short deliberate delay on first paint for every visitor, in exchange for nothing. On a slow connection it is the difference between a page that feels instant and one that feels broken.

The quieter ones worth looking for

  • Pixels from platforms the client no longer uses. A TikTok pixel from a campaign that ran for one quarter in 2023. A LinkedIn Insight tag from a product launch. Not dead exactly, but collecting data for an account nobody logs into.
  • Previous agency conversion tracking. A second Google Ads conversion ID, still firing, still reporting conversions into an account that is no longer yours. This one is not harmless, because it means somebody else can see your conversion volume.
  • Chat widgets and heatmap tools from trials that ended. These are usually the heaviest scripts on the page by a wide margin.
  • Hardcoded snippets superseded by container tags. The old Meta pixel left in the theme after tracking moved into the tag manager. This one actively double counts rather than doing nothing, and it is covered in fixing duplicate events.
  • Paused tags. Configured, never fire. Mostly fine, except when one of them turns out to be the conversion tag somebody disabled while debugging and forgot.

What they actually cost

It is worth being precise here rather than reaching for a dramatic number, because the honest cost is small per visitor and real at scale.

  1. Page weight and request count. Each tag is at minimum a DNS lookup, a connection, and a script download. Tag manager containers grow in proportion to the number of tags in them, and every visitor downloads the whole container.
  2. Main thread time. Scripts execute. Core Web Vitals, specifically Interaction to Next Paint, are sensitive to work happening on the main thread during page load, and tags are main thread work.
  3. Deliberate render delay in the specific case of the Optimize anti-flicker snippet.
  4. Audit cost. The real expense is human. Every future investigation into this container now has to establish what forty tags do before it can get to the question it was actually asked.
  5. Risk surface. Custom HTML tags are arbitrary JavaScript running on every page. A forgotten one from a vendor who has since been acquired or breached is a genuine problem, not a theoretical one.

How to find them

Three ways, in increasing order of effort.

Read the published container from outside

A published GTM container is public by necessity, because the browser has to download it in order to run it. That means you can read the full tag list without any access to the account. Our free tracking scan does this and names the dead ones specifically: it flags Universal Analytics tags and Google Optimize tags as separate findings, lists every other tag with its real ID, and tells you how many are paused. No login, about thirty seconds.

Search the page source

View source on a few pages and search for UA-, optimize.js, and googleoptimize. This catches hardcoded tags that are not in any container, which the container audit will miss entirely.

Open the container

In GTM, the tag list sorted by type will group these immediately. Check the version history too: a tag added three years ago by somebody no longer at the company is a strong signal on its own.

How to remove them safely

Dead tags are the lowest risk change in tracking, but low risk is not no risk, and the failure mode is deleting something that turned out to be load bearing.

  1. Confirm it is genuinely dead rather than merely old. A UA- ID is provably dead. A TikTok pixel is only dead if the client confirms they have stopped advertising there.
  2. Pause before you delete. In GTM, pause the tag, publish, and wait a week. If nothing breaks and nobody complains, delete it in the next cycle. The pause is reversible in one click, the delete is not.
  3. Remove the anti-flicker snippet properly. For Optimize, the tag and the snippet are two separate things, and the snippet is usually hardcoded in the theme rather than in the container. Removing only the tag leaves the delay in place.
  4. Change one category at a time, and publish with a description. If something does break, you want to know which batch did it.
  5. Re-check the live site afterwards. Confirm the tags you meant to keep are still firing. The most common mistake in a cleanup is removing a trigger that two tags shared.

Telling dead apart from dormant

These are different problems with different answers, and conflating them is how a cleanup turns into an incident. A dead tag points at a service that no longer exists. A dormant tag points at a service that works fine and simply is not being used at the moment.

  • Provably dead. Universal Analytics, Google Optimize, Facebook Analytics, which Meta discontinued in June 2021. The receiving end is gone. You can remove these without asking anybody, though it is still worth telling somebody.
  • Dormant but functional. A TikTok pixel on a client who has paused TikTok spend. The pixel works, it is building an audience, and deleting it means that audience stops growing and the historical data loses continuity. Ask before touching it.
  • Looks dormant, is load bearing. A conversion tag that has not recorded anything for sixty days. That might mean nobody converts, or it might mean the tag broke in August and nobody noticed. Those two look identical in a tag list and require opposite responses. Google Ads will mark a conversion action inactive after a period with no recorded conversions, which is a symptom rather than a cause and is worth reading about in what “unverified” and “inactive” actually mean.

The rule we use is simple. If you can name the service that has been switched off, the tag is dead and can go. If you can only say that it does not seem to be doing anything, it is dormant and needs a conversation first.

What the cleanup is actually worth

It is worth being honest that removing dead tags will not transform anybody's performance. Nobody has ever doubled their conversion rate by deleting a Universal Analytics tag. The returns are real but they are indirect.

  1. Faster diagnosis next time. The next urgent question about this account gets answered in ten minutes instead of an hour, because there are twelve tags to reason about rather than forty.
  2. Fewer false leads. Half the time somebody investigates a tracking discrepancy, they spend the first hour on a tag that turns out to be irrelevant.
  3. A smaller container payload, which every visitor downloads on every page, on every device, including the slow ones.
  4. A defensible answer when a client asks what is running on their website, which is a question that gets asked more often now that privacy reviews are routine.

Why this keeps happening

Because nobody owns removal. Adding a tag has an obvious requester and an obvious deadline. Removing one has neither, and carries a small perceived risk with no visible reward, so it sits at the bottom of every list forever.

The structural fix is to make tracking state something that gets looked at on a schedule rather than when somebody suspects a problem. If you run several accounts, a written routine beats remembering, and we sketched one in building a tracking health SOP.

Taglert handles the monitoring half of that automatically. It checks every connected account every thirty minutes and tells you when conversion tracking changes, so the difference between a container you cleaned up last quarter and one you merely remember cleaning up stops being a matter of faith.

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

Related reading