Campaign links get tagged in a hurry by four different people and the report comes out unreadable. Here is what each parameter is for, the failure modes that split one campaign into nine rows, and the convention worth agreeing before anything goes out.
By Rehan Idrisi · · 7 min read
Part of: Marketing
The campaign runs for six weeks. Then someone opens the report and finds one campaign spread across nine rows, three of them spelled differently, one of them crediting your own homepage as the traffic source. Nothing looked broken while it was live. The tagging was inconsistent from the very first link, and no amount of reporting fixes that after the money is spent.
UTM parameters are plain text stuck on the end of a URL. There is no validation, no autocorrect, and no warning when you get one wrong.
Five parameters exist. Three of them do almost all of the work.
Analytics tools read these differently. GA4 derives its default channel grouping from source and medium together, so a utm_medium value outside the set it recognises lands your paid traffic in a bucket you did not intend. Ad platforms and email platforms usually report on their own click data and ignore your UTMs completely. Two dashboards disagreeing about the same campaign normally means each one is counting a different event, not that one of them is broken.
Analytics treats Newsletter, newsletter and NEWSLETTER as three separate values. Nothing warns you. Clicks keep arriving, the campaign keeps running, and the total you wanted sits fragmented across rows that each look too small to bother with. Mixed separators make it worse, because diwali_sale, diwali-sale and diwali%20sale are three more distinct values stacked on top of the capitalisation problem.
A convention living in one person's head survives until the second person builds a link. The agency, the freelancer, whoever schedules the newsletter and whoever runs the paid account are all producing tagged URLs, often in the same week. Left to themselves, each will invent a perfectly reasonable convention of their own, and none of them will match.
This one catches experienced teams. A UTM on a link from your own homepage to your own product page tells analytics that a brand new campaign just delivered a visit, so the tool ends the current session and opens a fresh one attributed to whatever you typed. Whatever really brought that person to the site is gone from that point onward.
The damage compounds. Sessions inflate, because a single visit is now counted as two. Conversions get credited to an internal banner instead of the paid click or the organic search that earned them. Plenty of setups also throw a self-referral, where your own domain turns up in the source report sitting next to real traffic sources, which makes the whole table harder to read.
Track internal navigation with events. If you need to know a homepage banner drove product views, fire an event on the click or use a parameter your analytics does not treat as campaign data. Keep UTMs for links arriving from somewhere you do not own.
A UTM survives a redirect only when the redirect carries the query string forward. Plenty do not. A vanity URL rule written to send /sale to /collections/sale will strip everything after the question mark unless it was written to preserve it, and the visitor lands on exactly the right page with no campaign attached to the visit. Link shorteners vary too: some forward parameters untouched, some append their own, some drop them. Test the short link itself, not the long URL you pasted into the shortener.
Offline links need the same discipline. A QR code on a flyer, an insert card in a parcel or a sticker in a shop window is a measurable traffic source, and it stays invisible unless the URL it encodes carries its own tags. Tag first, generate second. Our QR code generator encodes whatever URL you hand it, parameters included, so the tagging decision happens before the code exists and not after five thousand flyers come back from the printer.
Filtered collection pages, search results and some product URLs already carry a query string. The first parameter on a URL needs a question mark and every parameter after it needs an ampersand. Get that wrong and you produce a URL with two question marks, where everything after the second one gets read as part of a value. Your campaign data disappears into a filter parameter, and some servers reject the request outright.
Spaces are the other trap. A campaign name typed with a space in it gets percent-encoded by one tool, passed through untouched by another and turned into a plus sign by a third. Choose the separator, keep spaces out, and the question stops coming up.
Every unusable campaign report we have been handed failed for the same reason. Nobody agreed how to spell things before the links went out.
Auditing a campaign that already shipped is mechanical work. Pull every link out of the email HTML or the ad export, drop them into one column, and read the tags as a set instead of one at a time. Our text extractor lifts every URL out of a pasted block, and the inconsistencies become obvious the moment they sit next to each other.
Usually the links were tagged inconsistently, or tagged internally. Different capitalisation and mixed separators split one campaign across several rows. A UTM on a link between two of your own pages ends the visitor's session and starts a new one, replacing the real original source with whatever that internal link happened to say.
Build tagged campaign URLs and catch what splits your reporting: duplicate UTM parameters, capital letters and stray spaces. Runs in your browser.
Convert URLs or plain text into downloadable high-quality QR codes with color customization.
Pull every email address or URL out of a block of pasted text, deduplicated and listed one per line or comma-separated.