Campaign Tracking 6 min read

UTM Taxonomy: A Tiny Dictionary Your Team Will Actually Follow

Anna Novak
December 25, 2025

If your campaign reports feel “off,” UTMs are rarely the problem. Messy naming is.

One person tags links with Facebook, another uses facebook, a third writes paid-social, and suddenly your analytics tool sees three different things. Your charts don’t lie — your naming does.

A UTM taxonomy is just a shared agreement: a small dictionary of allowed values + a few rules that stop chaos before it reaches your reports.

If you want the official baseline on what UTMs are and how they’re used, start here: URL builders: Collect campaign data with custom URLs.

What UTMs are (in plain English)

UTMs are small labels you add to a link. When someone clicks that link, your analytics tool reads those labels and can group traffic correctly.

Most teams only need three parameters:

  • utm_source = who sent the click (platform/partner)
  • utm_medium = how it was sent (channel type)
  • utm_campaign = your internal initiative name
UTM link anatomy diagram

Google’s documentation uses these same core campaign parameters when explaining how custom URLs collect campaign data.

The mindset: one concept = one value

Your goal is boring consistency.

  • If you mean paid social, don’t alternate between paid_social, social_paid, paid-social, paid, and “whatever the ads platform calls it.”
  • If your source is Facebook, don’t switch between Facebook, facebook.com, fb, and meta.

Once you standardize, two great things happen:

  1. reports stop splitting into duplicates
  2. it becomes easier to compare campaigns without guesswork

The Tiny Dictionary (copy this into your team doc)

This is the core of the article: the “allowed values” list.

Allowed utm_medium values (keep it boring)

utm_mediummeaninggood fordon’t use
emailclicks from emailnewsletters, lifecycle emailsEmail, e-mail, newsletter
paid_socialpaid social adsMeta/LinkedIn/TikTok adssocial_paid, paid, p_social
organic_socialnon-paid postsregular posts, bio linkssocial, organic, insta
cpcpaid search clickssearch adsppc, paid_search, sem
displaybanner/display adsprogrammatic, bannersbanner, gdn (if unclear)
affiliateaffiliate network trafficaffiliate programsaff, partners
referrallinks from other sitesPR mentions, blog linkswebsite, link
partnerdirect partner collabsco-marketing linkscollaboration, partnership
qrQR scansflyers, posters, offlineoffline
smstext message linksSMS campaignstext, message
Source vs medium explained visually

Rule: if your team needs a new medium, add it to the dictionary first. Otherwise, you’ll slowly rebuild chaos.

Allowed utm_source values (platform or partner name)

Source answers: “Where exactly did this click come from?”

utm_sourcewhen to useexample pair (source + medium)don’t use
facebooktraffic from Facebookfacebook + paid_socialFacebook, fb.com, Meta
instagramtraffic from Instagraminstagram + organic_socialInsta, IG
linkedintraffic from LinkedInlinkedin + paid_socialLinkedInAds
googletraffic from Google ads/searchgoogle + cpcgoogleads, g_ads
youtubetraffic from YouTubeyoutube + referralyt
newsletteryou don’t care which ESP sent itnewsletter + emailweekly_newsletter_may
mailchimpyou do care which ESP sent itmailchimp + emailmc
partner_acmea specific partnerpartner_acme + partneracme_partner (mixed order)
communityyour own community hubcommunity + referralforum, discord (pick one)

Shortcut to remember:

  • utm_source = who
  • utm_medium = how

utm_campaign naming recipe (simple and scalable)

Campaign should be your internal label — not a channel name.

Campaign naming recipe (good vs bad)

Use a predictable pattern like:

goal_product_geo_time

  • goal: trial / signup / demo / purchase
  • product: widget / pro_plan / course
  • geo: us / uk / eu (optional)
  • time: pick one format and stick to it (example: 2026q1)

Good:

  • trial_widget_uk_2026q1
  • signup_pro_plan_eu_2026q2
  • demo_course_2026q1

Bad:

  • facebook_ads_january (channel info belongs in source/medium)
  • Campaign 1 (meaningless + spaces)
  • SPRING-SALE!!! (not sortable, not stable)

Rules that prevent 90% of UTM mistakes

Copy/paste these into your “UTM rules” doc:

  1. lowercase only (always)
  2. use _ as a separator (no spaces)
  3. no synonyms (cpc or ppc, never both)
  4. source = who, medium = how (don’t flip them)
  5. campaign is not a channel name
  6. choose one date format (2026q1 or 2026-01) and never mix
  7. avoid punctuation and emojis in values
  8. don’t put personal data in UTMs (names, emails, phone numbers)
  9. if a value doesn’t exist in the dictionary, add it first — then use it
  10. test-click one tagged link before launch
UTM rules checklist diagram

That “no personal data” rule is not optional. Google explicitly recommends keeping URLs and URL parameters free of personally identifiable information (PII). See: Best practices to avoid sending Personally Identifiable Information to Google. support.google.com

When utm_content and utm_term are actually useful

These are optional. Use them only when you have a clear reason.

Use utm_content when you need to compare variations

Think: “Same campaign, but different creative/placement.”

Examples:

  • same email, two CTAs: cta_top vs cta_bottom
  • same campaign, two ad creatives: video_15s vs static_1
  • same page, two placements: header_banner vs footer_banner

A good mental rule: if you can’t explain what you’ll do with this field, don’t fill it.

Use utm_term only when you store keyword-level detail

If you already have keywords tracked in an ad platform, copying them into UTMs often creates noise and inconsistency. Only use utm_term if your team has a stable convention for it.

If your team isn’t ready to maintain these fields, leave them blank.

10 examples your team can steal today

UTM examples by scenario

Notice: we list fields, not full URLs — that’s easier to audit.

scenarioutm_sourceutm_mediumutm_campaignoptional content/term
newsletternewsletteremailsignup_pro_plan_2026q1content: cta_top
paid social adfacebookpaid_socialtrial_widget_uk_2026q1content: video_15s
organic postinstagramorganic_socialdemo_course_2026q1content: link_in_bio
influencerpartner_acmepartnerpurchase_widget_2026q1content: influencer_a
QR flyerqrqrsignup_pro_plan_2026q1content: flyer_a
partner mentionpartner_acmereferraltrial_widget_2026q1
display bannergoogledisplaytrial_widget_eu_2026q2content: banner_blue
SMSsmssmssignup_pro_plan_2026q1content: shortlink_1
YouTube descriptionyoutubereferraldemo_course_2026q1content: desc_link
community postcommunityreferraltrial_widget_2026q1content: post_42

A simple UTM spreadsheet template (so nobody improvises)

If you don’t want people improvising UTMs in Slack messages, give them one place to generate and store tagged links.

Recommended columns:

  • destination_url
  • utm_source
  • utm_medium
  • utm_campaign
  • utm_content
  • utm_term
  • notes
  • owner
  • date
  • status (draft/approved/live)
UTM taxonomy workflow diagram showing team collaboration process

Three tiny “quality gates” that save your data:

  • dropdowns for utm_source and utm_medium (only allowed values)
  • an auto-lowercase check (or a “LOWER()” helper column)
  • a quick review step before links go live

Where to see UTMs in GA4 (quick, no deep dive)

In GA4, UTM values show up in acquisition reporting, especially the Traffic acquisition report. Official doc: [GA4] Traffic acquisition report. support.google.com

Beginner approach:

  • open Traffic acquisition
  • use dimensions like source/medium and campaign to compare initiatives
  • if data looks weird, suspect split naming (case, typos, synonyms) first

How to build tagged links fast (without inventing formats)

  1. Start with the final destination URL.
  2. Fill source/medium/campaign using your dictionary + recipe.
  3. Sanity check: lowercase, underscores, no “new” values.
  4. Test-click once.

If you want a safe starter tool, Google’s official builder is straightforward: Campaign URL Builder. ga-dev-tools.google
And for the “what does this do?” explanation, use: URL builders: Collect campaign data with custom URLs. support.google.com

Final checklist (print this)

☐ all values are lowercase
_ used instead of spaces
☐ source is “who”, medium is “how”
☐ medium is one of the allowed dictionary values
☐ no synonyms (no mixing cpc/ppc, paid_social/social_paid, etc.)
☐ campaign matches the recipe (and is not a channel name)
☐ date format is consistent
☐ content/term only used when there’s a real comparison need
☐ no personal data in UTMs
☐ test-clicked and logged in the spreadsheet

AN

Anna Novak

Marketing Strategist & Web Analyst

View Profile

12+ years helping marketing teams make better decisions with better data. Founder of CleverUtils — free tools that simplify the complex.

Analytics SEO Campaign Tracking Conversion Optimization

Related Articles

A/B testing dashboard showing Version A vs Version B with statistical significance
Conversion Optimization Feb 12, 2026 · 12 min read

A/B Testing: The Data-Driven Guide to Better Conversions

Every week, marketing teams ship landing pages, email campaigns, and product changes based on intuition. Most of those decisions cost money. A/B testing replaces guesswork...