Campaign Naming Convention Template
A convention derived from the names you already use, with every medium token checked against the published rules that decide which channel it lands in.
Free download · No account needed
One published rule files a campaign under Shopping based on its name. Six real names, tested.
shopfront-refreshShoppingshop at the start of the nameq1-shop-launchShoppinga hyphen precedes shopeshop-relaunchShoppinge sits outside the excluded letter range2026-shopping-weekShoppingshopping anywhere matchesworkshop-seriesSafek is inside the excluded rangebookshop-partnershipSafesame reason
The first four were email and paid search campaigns. All four reported as Shopping, and nothing raised an error.
Every naming convention template hands you the same two things: a token order and a delimiter. Date, channel, region, campaign, lowercase, joined by underscores. It is reasonable advice and it treats the name as a label. The name is not a label. It is a classification input, the classification rules are published and cannot be edited, and two of them read the campaign name itself. Name a campaign shopfront-refresh and it is filed under Shopping, whatever it was.
The medium token is a controlled vocabulary you do not own. Google's default channel group is a fixed rule set: newsletter matches nothing, so the email rule wants the literal value email. The push rule matches a medium that ends with push, so mobile_push works and push_notification does not. The affiliate rule is an exact match, so partner and affiliates both fall out. Sixteen approved tokens sit on one sheet with the rule each satisfies.
Then the standard gets derived from what you already have rather than invented, because a convention that cannot parse your history splits every report at the changeover date. The register ranks your existing patterns by traffic and adopts the dominant one, delimiter and date format included. Corrections come from the published rules, not from taste, and the mapping from old name to new is what makes a historical rebuild possible. It sits alongside survivorship rules and a field dictionary.
What the pack does that a token order does not
Turns the published rules into typeable tokens
Sixteen approved medium values, each with the channel it lands in, the published rule it satisfies, and the wrong token people reach for instead. The rules cannot be edited, so the token is the only thing that can change, and the sheet is where that gets decided once.
Flags the tokens that land in a real wrong channel
A medium of social-paid against a social source satisfies the organic social rule, so paid budget reports as free traffic. A medium of video does the same to a paid video buy. Those are worse than Unassigned, because the number looks plausible and the total is right.
Tests every campaign name against the rule that reads names
The shopping pattern is precise rather than vague: shopping anywhere triggers it, and shop triggers it at the start of a name or after anything outside the lower-case a-to-d and f-to-z ranges. So shopfront and eshop trigger it and workshop does not.
Derives the standard from your dominant pattern
The register ranks your existing patterns by traffic and adopts the one carrying the most, delimiter and date format included. That is what lets the remaining names be mapped rather than abandoned, and a convention that cannot parse your history puts a step in every chart.
Separates the case rule from the vocabulary rule
Parameter values are case sensitive in reports and channel definitions are not, so a capitalisation mistake never breaks classification and always splits a report into two rows nobody notices. Two problems, two rules, instead of one instruction to be consistent.
Logs what each violation actually broke
An email report showing no email traffic. One campaign's spend divided across two rows. A suppression list sorted into the nurture lists and mailed twice. The recurring column separates a one-off retag from the link builder or validation rule that keeps producing them.
How the pack runs
- 1
Send the names
Campaign names with volumes, the full source and medium report rather than the top rows, and your CRM campaign and list names.
- 2
Parse and rank
River extracts the tokens genuinely present, ranks the patterns by traffic rather than by count, and reports the dominant pattern's share.
- 3
Check against the rules
Every medium value and campaign name is tested against the published channel rules, and the ones landing in the wrong channel are ranked by how dangerous the error is.
- 4
Standard and mapping
The convention lands per object with the enforcement point named, and the register carries the old-name-to-new-name mapping for a historical rebuild.
Frequently asked questions
Is this not just an argument about hyphens and underscores?
No, and the pack rejects that request explicitly. Both delimiters classify identically and fragment identically, so there is no reporting argument either way and one is worth more than two teams' habits. The content is the vocabulary and the two rules that read your campaign name.
What is the shop thing exactly?
One of Google's published channel rules classifies a campaign as Shopping based on the campaign name. The pattern is exact: shopping anywhere matches, and shop matches at the start of a name or after anything outside the lower-case a-to-d and f-to-z ranges. So eshop triggers it and bookshop does not.
Why derive the convention instead of writing a good one?
Because a convention invented from a blank page cannot parse the names you already have, so every report gets a step in it at the changeover date and nobody rebuilds years of history by hand. Adopting your dominant pattern is what makes the other names mappable.
Can we fix the historical data once the names are right?
You can rebuild a report by grouping old names under new ones, and the register's mapping exists for exactly that. You cannot reclassify the channel, because classification happens when the session is recorded. Naming mistakes are cheap forward and impossible backward, which is the argument for doing this now.
Does capitalisation actually matter?
For two different reasons that need two different rules. Parameter values are case sensitive, so utm_source=google differs from utm_source=Google, and one campaign becomes two report rows. Channel definitions ignore case, so nothing looks broken and both rows classify correctly.
Our CRM has its own campaign records. Does this cover those?
Yes, and the join is the point: a CRM campaign name that differs from the analytics campaign name by one character does not error, it simply fails to join and no offline conversion attaches. The pack sets both patterns identically and validates at creation. Stage definitions get the same treatment on the deal side.
What about the naming inside the ad platforms themselves?
Covered as a documented exception. Ad platform names carry an extra objective token that buyers need, and it is dropped from the campaign parameter through dynamic insertion so the two still join. Reporting across platforms afterwards is what a cross-platform paid report handles.
Find out which names are in the wrong channel
Send your campaign names and a full source and medium report, and get the vocabulary, the register and the mapping back.
Get the template