E.g. text, that is Doughnut Labs’ filled-in answer. Delete it and write your own.
Agree on the core values
Add the optional parameters you actually use
Set your ID policy
Say where the values get stored
Publish and enforce
A. Source standard (utm_source)
List every approved value for utm_source, and the one spelling each must always use. Add a rule for who can add a new source.
Concept review: Source standard
Concept review: Source standard
utm_source records where the click came from: the platform, site, or property that sent the visitor. The value of the field comes almost entirely from everyone spelling each source the same way every time. To an analytics platform, facebook, Facebook, fb, and meta are four different sources, so one campaign can splinter into four rows that no longer add up.A fixed list is what prevents that. Teams differ on how granular the list should be: some fold Facebook and Instagram into one meta source and separate them by campaign or content, others keep them apart at the source level. Both work as long as the choice is written down and applied the same way by everyone. The failure mode is letting people invent new spellings on the fly.B. Medium standard (utm_medium)
List your approved utm_medium values. These are channel types, not platforms. Fix one spelling for each.
Concept review: Medium standard
Concept review: Medium standard
utm_medium records the type of channel, which is a different question from utm_source. Source is the specific platform (meta, google); medium is the category of marketing (paid_social, email). A common mix-up is putting a platform name in the medium field, which collapses the distinction the two fields exist to keep separate.Medium is also the field most analytics platforms use to sort traffic into channel groups. When a medium value does not match the vocabulary the platform expects, that traffic often lands in an “unassigned” or “other” bucket and drops out of your channel reports. That is why medium tends to be the most tightly controlled of the parameters: a small fixed list, matched to how your analytics tool groups channels, does more work here than anywhere else.C. Campaign standard (utm_campaign)
utm_campaign carries the campaign name you built in Campaign naming conventions. You do not invent a separate pattern here; you reuse the one you already defined at the campaign level.
Confirm which value goes in utm_campaign, and show one filled-in example.
Channels with no platform campaign
Email and organic social have no ad platform campaign object, so there is no platform name to match.utm_campaign there carries the marketing campaign identifier instead, and that is the one place the rule above bends.
Record what these channels use, so the exception is deliberate rather than assumed:
Concept review: Campaign standard
Concept review: Campaign standard
utm_campaign ties a set of links back to a single promotion, launch, or initiative so you can measure it as one thing across every channel that carried it. Reusing your campaign naming convention here, rather than inventing a second pattern, is what keeps the UTM value and the campaign in your ad platform pointing at the same thing. If the two drift apart, a report built on UTMs no longer lines up with a report built in the ad platform.The campaign name is a real choice with tradeoffs, which is why the naming convention exists as its own document. A self-describing name like Meta-Instagram-Awareness-CBO-TOFU is easy to read in a report, but it also reveals strategy to anyone who inspects the link, and it breaks reporting the moment someone renames the campaign. That tension between readability and both privacy and stability is exactly what section F is for: use the readable name where a name is fine, and switch to an ID where it is not.D. Content and term standard (utm_content, utm_term)
These two parameters carry the names you built in the other two naming-convention documents. utm_content carries the ad set / ad group / variant name; utm_term carries the ad (creative) name. Reuse those names rather than inventing new values here.
Confirm which value goes in each parameter as your default.
Concept review: Content and term standard
Concept review: Content and term standard
utm_content and utm_term add detail below the campaign level, and the cleanest way to fill them is to reuse the names you already built one level down. utm_content takes the ad set / ad group / variant name, so the customer profile layer of the click is captured; utm_term takes the ad name, so the exact creative is captured. Reusing those names keeps your UTM reports lined up with the structure inside the ad platform instead of describing it a second, slightly different way.utm_term is worth documenting per platform, because the field does not mean the same thing everywhere. Its original use was the paid search keyword, and on Google Search that is still the natural fit. On Meta there is no keyword, so many teams repurpose utm_term for the ad name instead. Both are valid; what causes trouble is using it for the ad name on one platform and the keyword on another without writing that down, so a mixed report becomes impossible to read.On Google Search the two uses collide, and there is no arrangement that gets both. Teams tend to discover this months in, when someone tries to compare two responsive search ads in a dashboard and finds every row grouped by keyword instead. The choice itself is unremarkable; the cost is entirely in making it by accident. Recording which value the field carries, and what that leaves unavailable, is what turns it back into a decision someone can revisit.E. Custom parameters
List each custom parameter you use, what it carries, and where its value also lives so you are protected if it gets stripped.Concept review: Custom parameters
Concept review: Custom parameters
utm_ parameters while dropping your custom ones. When that happens the value disappears before your site ever sees it, with no error and no warning. This is why the backup-location column matters: a custom parameter is a fine place to pass a value, but a risky place to store the only copy of one. Teams that rely on custom parameters tend to pair each with a second capture method so a stripped parameter costs them nothing.F. ID versus name policy
Decide, per parameter, whether the link carries a readable name or a platform ID. Note the dynamic field you use to insert each ID.Concept review: ID versus name policy
Concept review: ID versus name policy
{{campaign.id}}, and the platform fills in the real ID when the ad serves. The link then carries the ID instead of a name you typed. Choosing between a name and an ID comes down to two things: what the value reveals, and whether it can change.Readable names reveal strategy. A campaign named us_doughnutpro_launch_2026 tells anyone who inspects the link the region, product, promotion, and timing, and a name like purchasedlist_enterprise would tell them how the customer profile was sourced. Anyone who inspects the link, including the visitor and any competitor, sees it. An ID reveals none of it. Readable names also change: a person can rename a campaign or ad set at any time, sometimes by accident, and the moment a name changes, historical reports keyed on it split in two. A platform ID stays fixed for the life of the campaign, so the data stitches together even when someone edits a label.The cost of IDs is readability, since a raw ID means nothing to a human reading a report. That is why teams that tag with IDs usually map them back to friendly names inside the reporting tool, keeping stable values in the link and readable labels on the dashboard. Where a value is already a fixed, public category, like source and medium, a name carries no strategy and cannot drift, so there is often little to gain from an ID. Where you land on each parameter is yours to set here.G. Where the values get stored
A tagged link only pays off if the values survive the visit. On a same-session purchase, analytics holds them and nothing more is needed. On a deal that closes four months later, the link between the click and the deal exists only if the values were written onto the record at the moment of conversion, and are still there when the deal closes. Name the field each parameter lands in, and whether it holds the first or last touch.Concept review: Where the values get stored
Concept review: Where the values get stored
Build order recap
Fix source and medium as short, fixed lists
Set the campaign pattern, then the ID policy
Add content, term, and custom fields only where you use them
Move the finished standards into one builder