Web Analytics with Google Analytics 4Campaign tracking, consent and privacy · Lesson 10 of 20

UTM discipline and channel groupings

Article · 11 min · 8 min lecture

Video lecture

UTM discipline and channel groupings

15 chapters · about 8 min · full transcript

Coming soon

Chapter 1 of 15

UTM discipline

  • How UTMs label links
  • Medium decides channel
  • Build and enforce a taxonomy
  • When not to use UTMs
  • Find leaks automatically

The narrated lecture is in production

Every chapter is scripted and ready. Browse the chapters and read the full transcript now — the video will appear here when it’s published.

Chapters

Why UTMs matter

When someone clicks a link in an email, a WhatsApp broadcast, an influencer's bio or a paid social ad, GA4 needs to know where they came from. Some sources are detected automatically (search engines, referrals, Google Ads with auto-tagging). Many are not — and untagged clicks often end up in Direct or as meaningless referrals. UTM parameters solve this by labeling the link itself.

The parameters

ParameterMeaningExample
utm_sourceWho sent the traffic (the platform or publisher)instagram, newsletter, partner_blog
utm_mediumThe type of channelpaid_social, email, affiliate, cpc
utm_campaignThe campaign nameramadan_sale_2026
utm_contentWhich creative or link variantcarousel_v2, header_button
utm_termKeyword (mainly paid search)running_shoes
utm_idCampaign ID, useful for cost data importscmp_1042

GA4 also recognizes utm_source_platform, utm_creative_format and utm_marketing_tactic for more detailed classification.

How GA4 classifies channels

GA4's default channel group assigns sessions to channels such as Organic Search, Paid Search, Paid Social, Organic Social, Email, Affiliates, Referral, Display, Organic Video and Direct, using rules based mainly on source and medium values (and whether a campaign name suggests shopping or other patterns). For example, a medium of email maps to Email, and paid mediums such as cpc combined with a recognized social source map to Paid Social.

This means your medium values decide your channel reports. If one person uses medium=Email, another medium=e-mail and a third medium=newsletter, only some will map to the Email channel; the rest end up as Unassigned. Check Google's current default channel group definitions and align your taxonomy to them. You can also create custom channel groups for your own reporting needs.

Build a UTM taxonomy

A taxonomy is a short, enforced list of allowed values:

utm_source (platform):   google, meta, instagram, facebook, tiktok, linkedin, youtube,
                         snapchat, x, newsletter, whatsapp, partner_<name>
utm_medium (channel):    cpc, paid_social, organic_social, email, sms, affiliate,
                         influencer, display, referral, qr
utm_campaign:            <objective>_<offer>_<yyyymm>     e.g. leads_freeaudit_202603
utm_content:             <format>_<variant>              e.g. reel_hookA, story_v2
Rules: lowercase only, underscores not spaces, no personal data, no dates in source/medium

Publish it in a shared UTM builder sheet with dropdowns so nobody types values freehand. The sheet generates the final URL and logs who created it and when.

When not to use UTMs

  • Internal links on your own site. UTMs on internal links start a new session and overwrite the original source. Use event parameters to track internal promotions instead.
  • Google Ads with auto-tagging enabled. The gclid parameter handles attribution; adding manual UTMs can conflict unless you know how your setup handles both. Follow current Google Ads guidance for your account.
  • Organic search results. You do not control those links.

Special cases

  • QR codes on packaging or event banners: tag with utm_medium=qr and a descriptive source (for example packaging or expo_booth). Otherwise scans appear as Direct.
  • WhatsApp and messaging apps often strip referrers, so tagged links are the only way to attribute them.
  • Influencer and creator links: give each creator a unique utm_content or utm_source value, plus a discount code for cross-checking.
  • Link shorteners and redirects: test that UTMs survive every redirect hop.

Worked example: cleaning a messy report

An education start-up in Lahore finds a large "Unassigned" channel and dozens of mediums such as Facebook, FB, social, paid, Paid-Social. The fix:

  1. Export source/medium pairs for the last 90 days.
  2. Map each messy pair to the new taxonomy in a sheet.
  3. Launch the UTM builder with dropdowns; retire freehand links.
  4. Create a custom channel group to reclassify historical messy values where rules allow, so trend reports are usable.
  5. Review Unassigned traffic monthly and fix the source of each leak.

Hands-on: a builder sheet that refuses bad values

In Google Sheets, put allowed values on a "lists" tab and use data validation dropdowns for source and medium. Then build the URL with a formula that lowercases and cleans the free-text parts:

A: landing URL   B: utm_source (dropdown)   C: utm_medium (dropdown)
D: campaign (free text)   E: content (free text)   F: final URL

F2 =A2 & IF(REGEXMATCH(A2,"\?"),"&","?")
      & "utm_source=" & B2
      & "&utm_medium=" & C2
      & "&utm_campaign=" & LOWER(REGEXREPLACE(TRIM(D2),"[^a-zA-Z0-9]+","_"))
      & IF(E2="","","&utm_content=" & LOWER(REGEXREPLACE(TRIM(E2),"[^a-zA-Z0-9]+","_")))

Add a "created by" and "date" column, and protect the lists tab so only the taxonomy owner can edit it.

Hands-on: find messy values in the BigQuery export

The collected_traffic_source record holds the UTM values collected on each event. This query lists source/medium pairs from the last 30 days that are not in your approved list:

WITH seen AS (
  SELECT LOWER(collected_traffic_source.manual_source) AS src,
         LOWER(collected_traffic_source.manual_medium) AS med,
         COUNT(*) AS events
  FROM `my-project.analytics_123456789.events_*`
  WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
    AND collected_traffic_source.manual_medium IS NOT NULL
  GROUP BY 1, 2
)
SELECT * FROM seen
WHERE med NOT IN ('cpc','paid_social','organic_social','email','sms','affiliate',
                  'influencer','display','referral','qr')
ORDER BY events DESC;

Each row is a leak to trace back to a person, agency or tool, and fix at the source.

Second worked example: a Dubai events company and QR codes

An events company prints QR codes on banners, flyers and badges at an expo. Each placement gets utm_medium=qr and a distinct utm_source (expo_banner_hall3, flyer_booth, badge_back), with utm_campaign=expo_leads_202611. After the event, a single exploration shows which placement drove registrations. Printed codes are tested on three phones before printing, because a typo on 5,000 flyers cannot be fixed with a redirect later unless the code points to a short link you control.

Common mistakes

  • Mixed case (Instagram vs instagram) creating separate rows.
  • Using utm_source for the campaign and utm_campaign for the platform.
  • UTMs on internal banners.
  • Forgetting UTMs on email signatures, bios and printed QR codes.
  • No owner for the taxonomy, so it drifts within months.

UTM governance checklist

Key takeaways

  • UTMs label links so GA4 can attribute traffic that would otherwise be Direct or misclassified.
  • Medium and source values decide GA4's default channel grouping.
  • Enforce a lowercase taxonomy with a shared builder; never type freehand.
  • Never put UTMs on internal links.

Check your understanding

Quick questions to lock in the lesson. They don’t count towards your certificate.

  1. A marketer adds UTM parameters to a homepage banner linking to another page on the same site. What happens?
  2. Emails are tagged with medium values 'Email', 'e-mail' and 'newsletter'. What is the reporting consequence?
  3. Which UTM parameter is best for distinguishing two creatives within the same campaign?

Put it into practice

Build a UTM taxonomy and a builder sheet with dropdowns for your organization or a client, then tag five real upcoming links with it.

Enrol for free to save your progress

Reading is always free. Enrol to keep your place, take the final assessment and earn a verifiable certificate.