tracking infrastructure4 min readBy Phloz team

A UTM naming convention that survives a whole agency

Inconsistent UTMs are why GA4 splits 'Facebook / facebook / FB' into three lines and dumps traffic into Unassigned. The naming convention, the recognized medium values, and how to enforce it across a team.

TL;DR

UTMs break reporting in two ways, both fixable with a convention: inconsistency (Facebook vs facebook vs FB become three separate rows because GA4 is case-sensitive) and non-standard mediums (a utm_medium GA4 doesn't recognize dumps the traffic into Unassigned). The fix is a one-page standard everyone follows: lowercase everything, use GA4's recognized medium values, pick source names from a fixed list, follow one campaign-name pattern, no spaces, never hand-type. Enforce it with a shared builder and a periodic UTM audit. Below: the rules, the recognized values, a template, and how to make a team actually stick to it.


Open any agency's GA4 that's had more than one person tagging links and you'll see it: email and Email and e-mail as three channels, facebook and fb and Facebook splitting one source into three, and a fat Unassigned bucket where the bespoke mediums went to die. None of it is a GA4 bug — it's the absence of a UTM convention, and it quietly makes every channel report wrong. The fix costs one page and a little enforcement.

The two failure modes a convention prevents

  1. Case + spelling fragmentation. GA4 treats source/medium/campaign as case-sensitive, exact strings. Newsletternewsletternews. Each variant is a separate row, so your "email" performance is scattered across three lines and never adds up.
  2. Unrecognized mediums → Unassigned. GA4's default channel grouping keys almost entirely off utm_medium, and it expects specific values. A creative medium=blast or medium=fb matches no channel rule and the session falls into Unassigned — invisible.

A convention kills both: one spelling, one case, recognized values.

The rules (the whole standard)

  • Lowercase everything. Always. No exceptions. (This single rule prevents most fragmentation.)
  • No spaces. Use hyphens: spring-sale, not Spring Sale.
  • utm_medium must be a GA4-recognized value (see the table). This is non-negotiable — it's what keeps traffic out of Unassigned.
  • utm_source comes from a fixed list. Decide the canonical name for each platform once (facebook, not fb/meta/facebook.com) and never deviate.
  • utm_campaign follows one pattern. Pick a structure and reuse it, e.g. yyyy-mm_offer2026-06_summer-sale. Consistency beats cleverness.
  • utm_term / utm_content for keyword and creative/variant — optional, but same lowercase/no-space rules.
  • Never tag internal links. UTM-ing a link within your own site restarts the session and overwrites the real source — a self-inflicted attribution wipe.

The utm_medium values GA4 actually recognizes

Use these so traffic files into a named channel instead of Unassigned:

Channel you wantUse utm_medium =
Paid Searchcpc, ppc, or paidsearch
Paid Socialpaid-social (or social with a paid source)
Organic Socialsocial, social-network, social-media
Emailemail (exactly — not newsletter/e-mail)
Displaydisplay, banner, cpm
Affiliateaffiliate
Referralreferral

Anything genuinely bespoke (a QR code, an offline campaign) either maps to one of these or needs a custom channel group defined in GA4 — otherwise it's Unassigned by design.

A template

Standardize one row per channel and hand it to everyone:

Channelsourcemediumcampaign pattern
Google Adsgooglecpc2026-06_brand-search
Meta paidfacebookpaid-social2026-06_retargeting
LinkedIn paidlinkedinpaid-social2026-06_abm-q3
Email newslettermailchimpemail2026-06_monthly
Partner/referralpartnernamereferral2026_partner-co

How to make a team actually follow it

A convention nobody enforces is a document, not a standard. Three moves:

  1. One shared builder. A locked Google Sheet or a UTM-builder tool that constructs the URL from dropdowns — so nobody hand-types a medium. Hand-typing is where every inconsistency is born.
  2. One source of truth per client. The canonical source/medium/campaign values live somewhere attached to the client, not in five people's memories.
  3. Audit on a cadence. Run a UTM audit on the property periodically to catch the non-standard mediums and case variants that crept in — they always do — before they pollute a quarter of reporting.

Where this fits

UTM hygiene is the cheap half of clean attribution (the other half is the conversion tracking itself). It's also exactly the kind of standard that's invisible until it's broken and a client asks why half their traffic is "Unassigned" or "Direct." Bake it into the measurement plan you build per client, and keep the canonical values where the rest of the client's tracking lives.

That's what Phloz is for: each client's tracking — UTMs, channels, pixels, conversions — modeled and health-checked as part of the tracking-infrastructure map, so "are this client's UTMs consistent, or are they leaking into Unassigned?" is a thing you can see across the book. The CRM for PPC agencies and pricing pages cover the workflow — but the convention above costs one page; write it down, share the builder, and stop hand-typing UTMs.