Controlled vocabulary standard

UTM taxonomy design for marketing teams

Build one approved vocabulary for sources, mediums, and supporting fields so teams stop inventing synonyms that fracture rollups, break comparisons, and make reporting drift impossible to control.

Lock one approved dictionary for the values your team is allowed to use, keep alias cleanup separate from the live list, and make every build, template, and QA step pull from the same taxonomy.

One approved dictionary

Source, medium, and supporting field values should come from a governed list, not whoever happened to launch the last campaign.

One alias policy

Legacy variants need a clear mapping so reports stay comparable while the approved vocabulary takes over.

One drift review

Unknown values need a scheduled review so the live dictionary stays stable while cleanup keeps moving.

Approved vocabulary model

A taxonomy is the approved dictionary behind your naming system. It decides which values are allowed, which are deprecated, and which aliases stay in cleanup instead of leaking back into live traffic.

Taxonomy owns allowed values

Choose one approved vocabulary for each field before anyone starts launching links.

Aliases belong in cleanup

Legacy abbreviations and duplicate labels should map back to approved values, not stay available in the live list.

Versioning keeps rollups stable

Changes need an owner, a change log, and a review rhythm so reporting stays comparable quarter to quarter.

approved versioned mapped auditable
Approved source list

Keep one stable vocabulary for origin so reports do not split across duplicate labels.

google / newsletter / affiliate_partner / youtube
Approved medium list

Use medium only for traffic class so campaign comparisons stay readable.

paid_social / organic_social / email / affiliate
Alias map only

Legacy and duplicate values belong in a cleanup table, not in the live dictionary.

fb → facebook · ig → instagram · edm → email

Taxonomy vs naming

These layers solve different problems. Taxonomy decides what values are allowed. Naming decides how approved values are written into campaign rows and URLs.

Taxonomy sets the dictionary

It controls approved labels, field meaning, alias handling, and deprecations.

Naming applies the pattern

It controls separators, casing, order, and the readable structure used once the approved values are known.

QA catches drift

Checks should flag values that are not approved, not just badly formatted.

Where each field should carry meaning

Each field needs one stable job. That is what keeps your taxonomy readable across channels, teams, and quarters.

utm_source

Origin of the traffic. Keep it to publisher, platform, partner, or property.

google · newsletter · affiliate_partner · youtube
utm_medium

Traffic class only. Do not bury platform or campaign intent here.

paid_social · email · affiliate · organic_social
utm_campaign

Campaign identity. Use it for the initiative or offer being measured, not channel class.

spring_sale · q2_retention · creator_launch
utm_content

Optional asset detail such as placement, creative, or send variation.

hero_banner · version_b · footer_cta
utm_term

Only use it when search-term or audience detail genuinely belongs there.

brand_exact · retargeting_segment_a

Start with the taxonomy problem

Go deeper in taxonomy control