UTM Naming Convention Template
Four documents and five sheets that check every tag you already use against Google's published channel rules, then repair what landed in the wrong channel.
Free download · No account needed
Migration Note
What changed when the rules were read
Fourteen months of tagged traffic for a fictional outdoor gear brand, Ferngate.
| Channel | Before | After | Why it moved |
|---|---|---|---|
| 74,200 | 221,200 | 44 sends carried a medium of newsletter | |
| Organic Social | 96,300 | 0 | Never posted organically. All paid |
| Paid Social | 214,800 | 311,100 | $214,000 of Meta spend, recovered |
| Organic Video | 21,700 | 0 | The same trap, on a medium of video |
| Paid Video | 6,400 | 28,100 | $38,600 of YouTube spend |
| Unassigned | 166,040 | 0 | Four mediums matching no rule at all |
| Affiliates | 0 | 34,900 | A medium of partner, split by source |
| Cross-network | 4,200 | 0 | The campaign name decided it |
Organic Social was the third largest channel at a company that has never published an organic Facebook post. It read that way for fourteen months, and every budget argument built on it was wrong in the same direction.
306,840 of 1,204,000 tagged sessions, just over a quarter, sat in a channel nobody intended. Every misrouted medium was already lowercase.
Ferngate Outdoor spent fourteen months reporting Organic Social as its third largest channel. Nobody at Ferngate has ever posted organically on Facebook. Every one of those 96,300 sessions was a paid ad tagged utm_medium=social, and $214,000 of Meta spend sat in a row labelled organic, in the report the next quarter's budget was argued from. Across the whole account, 306,840 tagged sessions, just over a quarter of them, were filed in a channel nobody intended.
None of that is a tracking bug. Google's default channel group definitions require the medium to match a specific expression before Paid Social will claim a session, and social matches none of it, while Organic Social accepts social outright. The same trap runs on video, through a wider pattern. A medium of newsletter matches no rule at all and lands in Unassigned. And a campaign name carrying shop after a hyphen is Shopping, whatever the source and medium say.
So the pack reads the values already in your data before it writes a single line of standard, and every approved value it does write carries the published rule that makes it safe. Then it repairs the history, against a documented ceiling of fifty custom channel group rules. It installs into the marketing workspace, beside the multi-channel paid report, the Google Ads account audit and the rest of the template library. Send River your values, or take the files blank.
What's in the pack
Existing Value Audit
One row per distinct source, medium and campaign combination that actually occurred, carrying the channel it landed in beside the channel it was tagged for, the rule that decided, and the sessions behind it.
Channel Rule Reference
All nineteen rules for manually tagged traffic, restated as a lookup you can read a value against, with the four traps that fall out of reading them properly.
Convention by Channel
The approved source and medium for every channel, each one carrying the published rule that puts it there, plus the wrong value people reach for and what that wrong value actually does.
Rule Budget
The retroactive repair, allocated and ordered against a documented ceiling of fifty channels per group, with the cost of each rule in channels and the sessions it moves.
Correction Queue
Every live surface still producing a wrong value, sorted by whether you can change it now, only at the redirect, or never, with the monthly accrual that decides the order.
Builder Reference
The exact parameter set per surface, including which values the platform sets dynamically. Google's keyword insertion parameter returns blank on Performance Max, so the term column is empty for that spend and the sheet says so. The search term review picks up from there.
Repair Mechanics and Migration Note
What each of the five fix mechanisms reaches and what it leaves broken, then a full worked account: the audit, the repair, and the four things the repair did not touch.
How to use it
- 1
Open in River, or take it blank
Open the pack in River and send the values you already have, or download the Word documents and CSV sheets and fill them in yourself.
- 2
Send the values, not the convention
Source, medium and campaign with sessions behind them, over the widest window you can pull, plus the tracking templates from the ad platforms and the email tool.
- 3
Read the misrouted share first
The tagged sessions sitting in a channel nobody intended, split into Unassigned, paid filed as organic, and campaign name override, with the spend behind the paid rows.
- 4
Correct, then repair, then publish
Fix the live templates so the defect stops accruing. Allocate the retroactive rules against the ceiling. Publish the standard last, with the rule beside every approved value.
Frequently asked questions
Is this template free?
Yes. The download is Word documents and CSV sheets, with no account and no card. Edit with AI is the optional half: the agent runs your own values against the rules and fills the audit. Every pack sits in the template library.
Will lowercasing all our UTMs fix this?
No, and this is the important answer. Google states that channel definitions are not case sensitive, so case has never been able to move a session between channels. Lowercase merges duplicate report rows inside a channel, which is real and much cheaper. In the worked account it moves zero misrouted sessions.
Can historic reporting actually be fixed, or only future tagging?
Both, by different mechanisms. Custom channel groups apply to reports retroactively, which is what makes the history salvageable. That is the only retroactive lever, it reads seven fields, and it has a hard ceiling. The primary channel group looks identical and populates forward only.
What actually lands in Unassigned?
Any value matching none of the rules. In practice that means a medium naming a surface rather than a channel type: newsletter, partner, qr, print, event and webinar all land there. It is the commonest reason a large email programme reports almost no Email sessions.
Our reporting runs on the BigQuery export. Does the repair reach it?
No, and knowing that before you build the repair rather than after is the point of asking. Custom channel groups are absent from the export schema, so anything built on it keeps the original classification. The pack writes the equivalent logic for the query instead, with an owner named.
Which parameters are worth setting at all?
Source, medium, campaign, id, term and content. Two of the documented ones are not worth writing: Google's own URL builder reference notes that marketing tactic and creative format are not currently reported in Analytics properties, so they lengthen the link and produce no column.
What does Edit with AI actually do?
It signs you up, installs this pack as a private workspace, and puts the agent in front of an empty audit. Then you send what you have: a channel export, a screenshot of an acquisition report, the tracking template somebody pasted into a document two years ago.
Find out which channel your tags actually reach
Take the Word documents and CSV sheets blank, or open this exact pack in River and send it the source, medium and campaign values you already have.
Edit with AI