Upgrowly.
Blog

A UTM naming convention that survives contact with reality

Campaign reports rarely break because of the analytics tool. They break because Newsletter, newsletter and news-letter are three different rows, and nobody agreed which one to use.

The rules

  1. Lowercase everything. UTM values are case-sensitive. This single rule prevents most duplicate rows.
  2. Underscores, never spaces. Spaces become %20 and make links ugly and easy to truncate.
  3. Source is the platform, medium is the channel type. linkedin / social, not linkedin / linkedin.
  4. Campaign names carry a date or quarter. spring_launch_2026q2 still means something in nine months; launch does not.
  5. Use utm_content for the placement, so you can tell a hero CTA from a footer link inside the same campaign.

Why the tool normalises by default

The UTM Builder lowercases values and converts whitespace to underscores unless you turn that off. It is not being precious: it is enforcing rules 1 and 2 so your future self can group the report without a spreadsheet full of IFERROR(LOWER(...)).

A convention only works if the easiest path follows it.

A worked example

A quarterly launch email, linking to the pricing page:

  • utm_source=newsletter
  • utm_medium=email
  • utm_campaign=spring_launch_2026q2
  • utm_content=hero_cta

Six months from now, that row still explains itself — which is the whole point.