Contact me

How I Build UTM Naming Conventions That Don’t Fall Apart

by Kevin Bekker | Aug 14, 2026

A client asked me last month why their "Email" channel showed almost no traffic in GA4, even though they'd sent four campaigns that quarter. The traffic wasn't missing. It was just scattered across six different labels: Email, email, Email-Newsletter, e-mail, Newsletter, and one campaign that never got tagged at all. Six versions of the same channel, each treated as a separate source by GA4, each one too small on its own to show up as anything meaningful in a report.

This is not a rare problem. It's the default outcome of tagging campaigns without a system, and I see some version of it in almost every new account I audit. The fix isn't complicated, but it does require deciding on a convention before you tag the first link, not after you've already got a year of fragmented data to clean up.

Why this breaks so easily

UTM parameters are just plain text. GA4 and every other analytics platform treat them as exact strings, not concepts. "Newsletter" and "newsletter" are not the same source to GA4, even though they're the same channel to you. Neither are "email" and "Email-Blast." Every inconsistency creates a new row in your reports instead of adding to an existing one, and because each row on its own looks small, the problem is easy to miss until someone asks a simple question — like "how did our email campaigns do this quarter" — and the honest answer is scattered across half a dozen fragments nobody thought to group together.

The tagging itself isn't the hard part. Anyone can add three parameters to a URL. The hard part is doing it the same way every time, across every person on a team who touches a campaign link, for months or years without drifting. That's a system problem, not a technical one.

The naming convention I use with clients

I keep this simpler than most guides make it look, because a convention nobody can remember is a convention nobody follows. Here's the structure I default to.

  1. Lowercase everything, always. No exceptions for brand names, campaign names, or anything else. This single rule prevents the most common fragmentation I see — "Newsletter" vs. "newsletter" — before it can happen.
  2. Underscores instead of spaces. Spaces in a UTM value get URL-encoded into %20 or a plus sign depending on the platform, which renders inconsistently and looks broken in reports. summer_sale stays readable everywhere. summer sale does not.
  3. A fixed, short list of sources. Don't let "source" become a free-text field. Decide up front on the actual list — google, facebook, linkedin, newsletter, partner_name — and only use values from that list. If a new source shows up, add it to the list deliberately instead of typing whatever feels natural in the moment.
  4. A fixed, short list of mediums. Same logic. cpc, email, social, referral, affiliate. The medium answers "what kind of channel is this," not "which specific platform," so it should stay broad and stable even as your source list grows.
  5. Campaign names that describe the initiative, not the date. summer_sale tells you what the campaign was. campaign_july_14 tells you when someone made it, which is already sitting in your date range filter and doesn't need repeating. If you run the same promotion annually, add the year — summer_sale_2026 — so you can compare year over year without the campaigns colliding.
  6. utm_content reserved specifically for variant testing. This is the parameter people misuse most, either skipping it entirely or stuffing unrelated information into it. Use it only to distinguish two links that already share the same source, medium, and campaign — a header CTA versus a footer CTA in the same email, for example.

None of this is complicated in isolation. What makes it work is writing it down somewhere the whole team can see, and treating it as a hard rule rather than a suggestion. I keep a one-page reference doc with every client — literally just the source list, the medium list, and two or three example URLs — and it's saved more fragmented reporting than any tool I've used.

A reference list of standard source and medium values

If you're building your list from scratch, start from values GA4 already recognizes rather than inventing your own. GA4's default channel grouping logic looks for specific medium values to sort traffic into channels like Paid Search, Email, and Organic Social — using a medium it doesn't recognize means that traffic often lands in "Unassigned" instead of a proper channel, even if the tagging itself is technically consistent.

Common utm_source values

SourceUse for
googleGoogle Ads campaigns
facebookFacebook posts and ads
instagramInstagram posts and ads
linkedinLinkedIn posts and ads
newsletterYour own email newsletter
partner_nameCo-marketing or partner links (use their actual name)
youtubeYouTube video descriptions and cards
smsText message campaigns

Common utm_medium values (GA4-recognized)

MediumUse for
cpcPaid search ads (Google Ads, Microsoft Ads)
emailAny email campaign, newsletter or automated
socialOrganic social posts
paid_socialPaid social ads (helps separate from organic social)
referralPartner or co-marketing links
affiliateAffiliate program links
displayBanner or programmatic display ads
smsText message campaigns

Stick to this list, or a short extension of it, before reaching for a custom medium value. The narrower this list stays, the more your channel-level reports (not just campaign-level) stay accurate too — that's a layer of reporting most people don't realize UTM tagging affects until it's already muddled.

What this looks like in practice

Before — same campaign, tagged two different ways:

example.com/sale?utm_source=Newsletter&utm_medium=Email-Blast&utm_campaign=SummerSale2026
example.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=summer_sale

After — one convention, every time:

example.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=summer_sale

The second version is the only one that reports cleanly, whether you're looking at this week's data or comparing it to the same campaign next year. That consistency is the entire point — a naming convention isn't really about the individual link, it's about making sure a hundred individual links roll up into one coherent picture.

Where this connects back to direct traffic

I wrote recently about why direct traffic keeps growing in most GA4 accounts, and untagged or inconsistently tagged links are one of the biggest contributors to that bucket. Every campaign link that skips UTM tagging, or gets tagged differently than the last one, is traffic that GA4 can't confidently attribute — so it falls back to Direct, or worse, quietly fragments into a source label nobody's watching. A naming convention doesn't just make your reports tidier. It's one of the more effective ways to shrink a bloated Direct traffic number without touching a single line of tracking code.

Building the habit

The naming convention only holds if tagging a link is as easy as not tagging one. I built a free UTM builder for exactly this reason — it has the source and medium presets built in, so the same lowercase, underscore-separated values get reused automatically instead of retyped from memory each time. If you're setting up a convention for the first time, start there: decide on your source and medium lists today, save them as presets, and every link your team creates from that point on stays consistent by default instead of by luck.

Frequently asked questions

Does it matter if I've already got a year of inconsistent UTM data?

It matters less than most people assume. You can't retroactively fix historical data, but you can start the convention today and stop the bleeding immediately. Going forward, clean data outweighs a messy history — and if you need to compare against last year, GA4's Session campaign dimension will just show the old fragmented labels alongside your new clean ones, which is annoying but not something a naming convention fixes after the fact.

Should everyone on my team have access to create tagged links, or just one person?

Either works, as long as everyone uses the same reference list. I've seen small teams centralize link creation with one person and larger teams spread it across several, and the deciding factor isn't team size — it's whether there's a shared, written convention everyone actually checks before typing a new link.

What about UTM parameters Google Ads or Meta Ads generate automatically?

Auto-tagging features (like Google Ads' gclid) are separate from manual UTM parameters and generally shouldn't be replaced by them — they often carry more precise data than a manually typed UTM ever could. Manual UTM conventions matter most for the channels that don't have native auto-tagging: email, social posts, partner links, and anywhere else you're building the link yourself.

How many source and medium values should be on my list?

Fewer than feels natural at first. Most small businesses need five to eight sources and four or five mediums to cover everything they actually do. If your list is creeping past fifteen or twenty, it's usually a sign that near-duplicate values have crept back in — a good moment to review and consolidate rather than keep adding.


If your campaign reporting feels more fragmented than it should, that's usually a fifteen-minute fix once someone looks at the actual naming pattern instead of just the traffic numbers. That's the kind of thing I dig into with new clients first.

Kevin Bekker

Kevin Bekker

Digital Marketing Leader

Kevin Bekker has spent more than 20 years leading digital marketing programs across enterprise brands, agencies, and independent businesses. Based in Portland, Oregon, he now takes on a limited number of consulting engagements in SEO, paid media, analytics, and fractional CMO advisory. See Kevin's full experience →