UTM Conventions: Clean Campaign Data Starts at the Link
Inconsistent UTM parameters shatter reports into fragments. What a naming convention looks like that everyone still follows six months later.
When a campaign report is unusable, it is rarely the analytics tool's fault. Usually it is because the same campaign sits in the system under four names: Newsletter, newsletter, Newsletter_Q3 and nl-q3-final.
GA4 treats UTM values as case-sensitive. Four spellings are four rows in the report. Adding them back together afterwards takes manual work — or is not possible at all.
The real problem is timing
UTM parameters come into existence the moment somebody builds a link. That happens all over the place: at the agency, in marketing, in sales, inside a newsletter tool, in a social post that had to go out quickly. Every one of those moments is an opportunity for a new spelling.
Repairing it later barely works. The parameters are baked into the click data, the clicks are over, and GA4 filters do not change historical data retroactively. That makes the convention a process question rather than a documentation task: the link has to be correct when it is created.
A convention that holds
Four rules cover most setups:
Always lowercase. Not because it looks nicer, but because it is the one rule everybody can follow without thinking. Facebook and facebook are two different sources to GA4.
Fixed values for source and medium. These two fields drive channel grouping. A short list of permitted values — google/cpc, facebook/paid_social, newsletter/email, linkedin/social — stops "paid social" from landing under paid-social here, paidsocial there and social somewhere else.
Underscores instead of spaces, no accented characters. Spaces become %20 and accented characters turn into unreadable sequences. Neither survives redirects and link shorteners reliably. We recommend _ as the word separator throughout, so you never end up with paid_social in one place and paid-social in another.
A fixed pattern for campaign. For example year_quarter_topic: 2026_q3_leadgen. It sorts chronologically and still makes sense a year later.
Our UTM builder checks exactly these points as you type: uppercase, spaces and special characters are flagged, common source/medium typos get a hint, and the finished URL is emitted lowercased. It runs entirely in the browser; the values you type never reach a server.
Two mistakes that cost real money
Putting UTM parameters on internal links. This happens often with on-site banners. The effect: the running session ends and a new one starts with a new source. The original campaign loses the conversion to the internal link. Internal links should carry no UTMs at all.
Tagging Google Ads manually while auto-tagging is on. Auto-tagging (gclid) carries far more detail than UTMs and is the basis for data exchange between Ads and GA4. Adding manual tags overwrites part of that data with your own, coarser version. Rule: auto-tagging on, manual UTMs for everything except Google Ads.
Frequently asked questions
Are term and content needed at all?
source, medium and campaign are enough for channel attribution. content is useful for A/B variants of the same creative; term is practically only relevant for manually tagged search. Leave empty parameters out — they lengthen the URL without adding anything.
What about URL length?
It is rarely a hard limit, but long UTM chains look untrustworthy in shared links and invite truncation. Use short, meaningful values instead of full campaign descriptions.
Can I normalise UTM parameters retroactively?
Not inside GA4. In BigQuery or a BI tool you can normalise on read. That is treating the symptom — the convention at the source remains the actual fix.
Who should own the list?
One person, one document, linked wherever links get built. As soon as two lists exist, effectively none does.
What you can do today
- Open the "Traffic acquisition" report in GA4 and group by session source / medium.
- Look for duplicates that differ only in spelling — that is your error list.
- Agree a short list of permitted values for
sourceandmedium. Five to ten lines is enough. - Build every new link through the UTM builder from now on.
- Check whether any internal links carry UTM parameters — and strip them.
If that review shows the events underneath are inconsistent too, that is a bigger topic than link building. How we clean up tracking setups is described under tracking & analytics — or in a first call.
