Tracking basics

UTM naming conventions: a simple system a small team will actually follow

Most tracking problems are not technical. They are naming problems. One person writes Facebook, another writes fb, a third writes facebook.com, and six months later nobody can add the numbers up. This guide gives you a naming system short enough to fit on one page and simple enough that people actually use it.

Why naming systems usually fail

Big organisations write long naming documents with dozens of rules. Small teams copy them, nobody reads them, and the old habits return within a month. A system for a small team has to survive three things:

So the aim is not a perfect taxonomy. It is a handful of rules that cover most links, written down in one place.

The five rules

1. Lower case, always

Analytics tools treat Email and email as different values, so they show up as separate rows that you have to add together by hand. Lower case everywhere removes that problem completely, and nobody has to remember which words get a capital.

2. Hyphens between words, no spaces

Spaces turn into %20 or + in links, which is ugly and easy to get wrong when someone retypes a value. Use hyphens: winter-appeal, not winter appeal or winter_appeal. Pick one separator and use it everywhere; hyphens are the easiest to read.

3. Source and medium come from a fixed list

These are the two values people improvise most, and the two that matter most for how GA4 groups your traffic. Do not let anyone invent them on the spot. Keep a short list of approved values and add to it deliberately, not by accident.

4. Campaign names follow one pattern

A pattern makes campaigns sort neatly and tells you roughly when something ran. A pattern that works well for small teams:

year-month-campaign-name-audience

For example 2026-11-winter-appeal-donors or 2026-03-open-day-families. The date at the front means your reports list campaigns in order, and the audience at the end is optional; leave it off if you only have one.

5. One campaign value across every channel

This is the rule people break most often. The newsletter link, the Instagram post and the poster QR code for the same appeal should all use the same campaign value. The differences between them belong in source, medium and content. If each channel gets its own campaign name, you can no longer see the appeal's total in one row.

Your one-page naming sheet

Write the rules and approved values on a single page, in a shared document everyone can open. Here is a starting version you can copy and adapt.

ParameterRuleApproved values or pattern
utm_sourceThe platform or senderfacebook, instagram, linkedin, tiktok, youtube, newsletter, whatsapp, partner-name
utm_mediumThe type of channelsocial, paid_social, email, cpc, referral, sms, qr
utm_campaignSame value on every channelyear-month-name, optional -audience
utm_contentWhich version or placementShort description: header-button, story, poster-a3, video-30s
utm_termPaid search keyword onlyLeave empty unless you tag paid search by hand

Underneath the table, add two lines: who looks after the list, and how to ask for a new value. That is the whole document.

A worked example

A small arts organisation is promoting a November exhibition. Using the sheet, their links look like this:

https://example.org/exhibition?utm_source=newsletter&utm_medium=email&utm_campaign=2026-11-winter-exhibition&utm_content=main-button

https://example.org/exhibition?utm_source=instagram&utm_medium=social&utm_campaign=2026-11-winter-exhibition&utm_content=story

https://example.org/exhibition?utm_source=poster&utm_medium=qr&utm_campaign=2026-11-winter-exhibition&utm_content=library-noticeboard

In GA4 they can filter on the campaign 2026-11-winter-exhibition and see every visit in one place. Switching to source and medium shows which channel did the work, and content shows that the library poster outperformed the one in the café, or did not.

What about the old mess?

You do not need to fix historic data. Start the new rules from a clear date, note that date in your naming sheet, and compare like with like from then on. Trying to rename the past usually costs more time than it saves.

Content and term: the optional extras

utm_content is the most useful optional parameter for small teams. Use it whenever one campaign has several links in the same channel: two buttons in a newsletter, a story and a post on the same day, posters in different places. Keep the values short and descriptive. You are writing a label for your future self, not a code.

utm_term was designed for paid search keywords. If you run Google Ads with auto-tagging switched on, you usually do not need it at all. Leave it empty rather than filling it with something else, so it keeps its meaning.

Making it stick

A naming sheet only works if building a link the right way is easier than building it the wrong way. A few habits help:

Quick checklist

  1. Everything lower case, hyphens between words.
  2. Source and medium only from the approved list.
  3. Campaign follows the pattern and stays the same across channels.
  4. Content describes the version or placement when there is more than one.
  5. Every link checked and logged before it goes out.

If you follow those five lines, your reports will stay readable even as people come and go. For common ways these rules get broken and how each one shows up in GA4, read Common UTM mistakes.