← Back to blog

UTM Link Rot: Auditing Years of Broken Campaign Tags Before You Trust Another Report

13 October 2026·5 min read
Quick answer: UTM link rot is what happens when years of campaign tags get applied inconsistently — different casing, different naming, auto-tagging clashing with manual tags — until your "paid social" row in GA4 is quietly missing a chunk of its own traffic. The fix is a proper audit: export your source/medium/campaign data, hunt for near-duplicate variants, spot-check destination URLs, and lock future tagging to one shared convention. You can't fix the historical data, but you can stop the bleeding. 📈

Every attribution report is only as good as the tags feeding it, and most businesses have never actually looked under the hood. 💖 We've opened GA4 accounts where "Facebook," "facebook," "FB," and "fb_ads" are all sitting as separate rows in the same source column — meaning the real paid social number is split four ways and looks far weaker than it actually is. Nobody lied to anyone; it just accumulated, one hastily built campaign link at a time, over several years and several different people touching the account.

What most businesses get wrong

The core problem is that nobody owns the UTM taxonomy. A marketing coordinator tags one way, an agency tags another, a well-meaning staff member builds a link by hand in five minutes without checking the convention, and a platform's auto-tagging (like Google's gclid or Meta's fbclid) sometimes clashes with manual UTMs on the same link. None of this breaks anything visibly — GA4 still happily logs the session — it just fragments your data so quietly that most businesses never notice until someone asks "which channel actually drives the most bookings?" and the honest answer is "we can't tell, because it's split across eleven near-identical campaign names."

The UTM audit workflow:
  • 1. Export the data. In GA4, go to Reports → Acquisition → Traffic acquisition, group by Session source/medium, and pull a 24-month lookback into a spreadsheet (use Explore for more granular campaign-level breakdowns).
  • 2. Hunt for near-duplicates. Sort alphabetically and look for casing variants (Email/email), spelling variants (newsletter/news-letter), and delimiter inconsistencies (paid_social vs paid-social vs paidsocial).
  • 3. Check for tagging gaps. Look at spikes in "(not set)" or "(none)" around specific campaign launches — often a sign a batch of links went out untagged.
  • 4. Spot-check destination URLs. Pull your top 20 historical campaign links and check each one actually resolves (not a 404, not stuck in a redirect chain) using a free bulk URL/HTTP status checker.
  • 5. Check for auto-tagging conflicts. Confirm Google Ads auto-tagging (gclid) isn't being overridden or duplicated by manually added UTMs on the same ad — this causes double-counted or misattributed sessions.
  • 6. Standardise going forward. Write down one naming convention (we like all lowercase, hyphen-separated, e.g. utm_source=facebook&utm_medium=paid-social&utm_campaign=eofy-sale-2026) and build a shared link-builder spreadsheet with dropdowns so nobody free-types a tag again.
A booking-based business whose confirmation emails changed tagging conventions: One year's template used utm_medium=email, the next year's redesign used utm_medium=Email after a new platform migration. The two years of data never roll up together in a report without manual cleanup, making year-on-year email performance comparisons quietly meaningless until someone notices.
A B2B firm with a long sales cycle running paid social for two years: An agency handover meant utm_source=facebook became utm_source=fb halfway through, splitting what should have been one continuous channel into two disconnected rows — making paid social look like it underperformed when summed, when really it was just fragmented.
A local service business with an old seasonal campaign still live in print: A QR code on a two-year-old flyer still sitting in letterboxes points to a landing page URL that's since been redirected twice, losing most of the original UTM parameters along the way — so any of those scans aren't being attributed at all anymore.

How to actually run the audit

Block out a half-day rather than trying to do this in spare five-minute gaps — it's genuinely easier to spot patterns when you're looking at the full 24-month export at once rather than piecemeal. Use a pivot table on source/medium/campaign to surface the near-duplicates fast, and don't be afraid to involve whoever built the original campaigns if they're still around — they'll often remember exactly when and why a convention changed. For the destination URL check, a simple bulk HTTP status checker will flag 404s and redirect chains in minutes rather than clicking through dozens of links by hand. Once the audit's done, the real work is the boring part: get everyone who builds a campaign link — in-house, freelancers, any agency — using the same shared builder sheet, with no exceptions.

💡 Lock UTM creation behind one shared tool. A simple Google Sheet with data-validation dropdowns for source, medium and campaign (rather than free-text fields) stops 90% of future link rot before it starts — it's a five-minute setup that saves hours of cleanup later.

Mistakes to avoid

  • Mixing a platform's auto-tagging (gclid) with manually added UTMs on the same link.
  • Letting every team member or freelancer hand-type tags instead of using one shared builder.
  • Changing your naming convention and assuming it retroactively fixes historical reporting.
  • Auditing once and never again — link rot re-accumulates the moment a new person starts tagging links.
  • Judging a channel's performance from a report without first checking whether its tagging is even consistent.

Frequently asked questions

Can I fix historical data that's already been logged with inconsistent tags?

Not retroactively — once a session is logged in GA4 under a particular source/medium/campaign combination, it stays that way. What you can do is build a saved segment or exploration that manually groups the known variants together for reporting purposes, and fix the tagging going forward so the problem doesn't keep growing.

How often should this audit happen?

A full audit once a year is reasonable for most small businesses, with a lighter quarterly spot-check of recent campaigns — especially after any agency handover, platform migration, or staff change, since those are the moments link rot tends to creep in.

Does this matter if I mostly rely on platform-reported numbers (like Meta Ads Manager) instead of GA4?

It still matters, because discrepancies between what a platform reports and what GA4 shows are often explained by exactly this kind of tagging inconsistency — and most businesses eventually need to reconcile the two when reporting on overall marketing performance.

Is it worth hiring someone to do this audit instead of doing it in-house?

It depends on how tangled the data is and how much time it would take your team — for a straightforward account it's a manageable half-day task, but a multi-year, multi-agency history can genuinely take much longer to untangle than it's worth doing alone.


Keep reading 🤍

Share
Written by
Kate, founder of Chronically Online

I help Gold Coast and Brisbane businesses grow with branding, websites and marketing that actually works.

Work with me ✦