UTM parameters are the one piece of tracking anybody can edit without permission, which is exactly why they decay. Six months into a campaign there are nine spellings of the same source, a medium nobody recognises, and a growing block of traffic the reports refuse to attribute to anything. None of this breaks. It just makes the numbers progressively less able to answer the question they exist for.
Most advice on this subject is a list of conventions with no explanation of the mechanism, which is why it never sticks. So start with two facts, both from Google’s own documentation, that look contradictory and are not.
- The URL builder documentation states that parameter values are case sensitive, and gives the example that utm_source=google is different from utm_source=Google.
- The default channel group documentation states that channel definitions are not case sensitive, and cannot be edited.
Both hold at once because they describe different layers. The value you send is stored as you sent it, so your source and medium reports split into separate rows for every variant spelling. The channel rules then evaluate those values without caring about case, so all your variants still land in the same channel. Your channel report looks fine while your source report is a mess.
That is why this problem is so durable. The executive summary view is unaffected, so nobody escalates, while anybody trying to do real analysis has to manually group twelve rows that are the same thing.
The failures that actually cost you
A missing parameter turns into (not set)
Google’s guidance is direct: always use utm_source, utm_medium and utm_campaign, and missing parameters will result in (not set) values appearing in your reporting. The three are not interchangeable, and the medium is the one most often dropped, because a link with only a source and a campaign still looks complete to the person building it.
Drop the medium and you have not merely lost one dimension. You have removed the input the channel rules depend on most, which pushes the traffic toward Unassigned, the value used when no other channel rule matches the event data. Unassigned is not a channel. It is the absence of one, and once a meaningful share of your traffic lives there, channel reporting stops being usable for budget decisions. If you are already fighting this, our post on why GA4 shows (not set) for source and medium covers the other causes.
A medium outside the pattern lands in the wrong channel
This is the one that surprises people, and it follows directly from how the rules are written. For manual tagging, the Paid Search channel requires two things together: the source has to match a list of known search sites, and the medium has to match the pattern Google publishes, which is a regular expression matching mediums containing cp, or equal to ppc, retargeting, or anything starting with paid.
So the medium you invent decides the channel, and sensible-looking choices fail. Tag a paid social campaign with utm_medium=social and the medium does not match any paid pattern, so the traffic is not treated as paid. Tag it utm_medium=paid_social or utm_medium=cpc and it is. The word you typed in a spreadsheet six months ago is now the reason your paid social spend appears in an organic bucket, and the client is asking why social looks free.
The same shape applies elsewhere. The Email channel matches when either the source or the medium is email, e-mail, e_mail or email with a space. A campaign tagged utm_medium=newsletter satisfies none of those, so your email programme reports as something else entirely.
Tagging your own internal links
Somebody tags the links in a site banner or an internal navigation element to measure clicks on it. Every click now overwrites the visitor’s acquisition data with your internal campaign, and the ad click that actually brought them in loses the credit. The rule is simple and absolute: UTMs go on links that bring people to your site from elsewhere, never on links between pages you own. Measure internal clicks with an event.
UTMs on paid Google links, fighting auto-tagging
Adding manual UTMs to Google Ads destination URLs while auto-tagging is on is a reliable way to produce two accounts of the same traffic that disagree. Auto-tagging appends a click identifier that carries far more detail than UTMs can, and it is what offline conversion imports and the Google Ads to Analytics link depend on. If you are unsure which state your account is in, our post on auto-tagging being switched off covers how to check and what it costs you.
A convention that survives contact with other people
The goal is not elegance. It is that six people tagging links independently produce identical values. That means the rules have to be short enough to remember and specific enough to leave no judgement calls.
- Lowercase everything, always. Since values are case sensitive, this single rule eliminates the most common cause of duplicate rows. No exceptions for brand names.
- Hyphens or underscores, pick one, never spaces. Spaces get encoded and show up as %20 in your reports.
- Source is the platform, medium is the type of traffic. Source answers where from, medium answers what kind. The commonest mistake is putting the platform in both, which wastes a dimension.
- Keep a closed list of mediums. This is the highest-value rule in the set, because the medium determines the channel. Write down the handful you allow, check each against the published channel rules once, and treat the list as fixed. New mediums get added deliberately, not invented in the moment.
- Campaign names carry a date or a quarter. Future you will need to tell this spring sale from the last one.
- Use utm_id for the campaign ID where you have one, and utm_source_platform where it applies. Google explicitly recommends setting all relevant parameters, and specifically calls out those two. Note that utm_creative_format and utm_marketing_tactic are documented but not currently reported in Analytics properties, so do not build anything on them.
- One builder, one source of truth. A shared sheet with dropdowns, or any URL builder that constrains the values. Free text is how the drift starts, every time.
Fixing a mess you inherited
You cannot retroactively clean the data, and that is the constraint that decides the plan. Historical rows keep whatever they were tagged with, so the aim is to stop the bleeding and make the discontinuity legible rather than to pretend it did not happen.
- Inventory first. Pull the last ninety days of source and medium values and sort by sessions. You will usually find the top ten account for most traffic and the long tail is spelling variants.
- Fix the live links in priority order. Anything currently spending money first, then email, then everything else. Do not try to fix every historical link.
- Pick a switchover date and write it down. Put it in the client file and in the report, so that the moment where the numbers change shape has an explanation attached to it forever.
- Group the old variants in the reporting layer rather than in the data, if the tool allows it. Keep the raw values intact.
- Expect channel mix to shift once mediums are corrected, particularly if paid social has been sitting in an organic bucket. That is attribution moving to where it belonged, and it is worth warning the client before the report lands rather than after.
Where the parameters get stripped before they arrive
A separate class of failure is worth checking for, because it produces identical symptoms to bad conventions and has nothing to do with them. The link was tagged correctly and the parameters never reached the page.
- Redirects that drop the query string. The most common offender by a distance. A rule that sends a non-trailing-slash URL to a trailing-slash one, or an old path to a new one, has to be written to preserve the query string, and plenty are not. Your ad points at a tagged URL, the redirect discards everything after the question mark, and the visitor lands with no campaign data at all.
- Vanity URLs and QR codes. Both normally resolve through a redirect, so they inherit the problem above. A printed campaign that reports as direct traffic is usually this.
- Shorteners and intermediaries. Most forward the query string intact, but not all do, and some add their own parameters. Test the actual short link rather than assuming.
- A landing page that redirects by geography or device. The second hop is where the parameters die, and it only affects the segment that gets redirected, which makes the data loss look like an audience characteristic.
The test takes a minute per campaign and is worth building into launch: open the exact destination URL you gave the platform, let every redirect resolve, and read the address bar on the page that finally loads. If the parameters are not still there, nothing downstream can save you. Do it for each landing page before launch rather than after the first reporting cycle, because this is one of the few tracking problems that is unrecoverable: the data for those sessions does not exist and cannot be reconstructed.
Why this is worth an hour of your week
Because UTM hygiene is the cheapest tracking work there is. It needs no developer, no deployment, no platform access beyond the tools you already use, and no risk: a wrong UTM costs you a row in a report, not a conversion. Almost every other item on a tracking audit requires somebody else to do something. This one you can finish today.
It is also the piece most likely to be judged. Clients do not read your container. They read the channel report, and a channel report with 18 percent of traffic in Unassigned invites exactly one question, which you then have to answer in a meeting.
Our free tracking scan reads the public source and the published container in about thirty seconds and tells you what analytics and tagging is installed on a site. It is honest about the limit here: UTMs live on your outbound links and in your campaign setups, not on the website, so the inventory above is still done inside your analytics property.
What a scan cannot do either is tell you tomorrow. Taglert rechecks every connected account every thirty minutes and emails you when tracking changes, which covers the half of this problem that happens while nobody is looking.
What is installed on the site, as opposed to what is on your links, is the subject of pixel monitoring software.
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
