Every marketing team has a report somewhere with Newsletter, newsletter, news-letter and Newsletter as four separate sources. The data is fine. The naming is not. UTM parameters are free text, and free text drifts unless something holds it still.
The fix is a scheme, written down, applied at the point where links are made.
Five parameters, three you actually need
utm_source is where the click came from: newsletter, x, linkedin, partner-acme. utm_medium is the channel type: email, social, paid, qr. utm_campaign is the thing you are running: spring-launch, webinar-2026-09. That is enough for nearly every report you will ever build.
utm_content and utm_term are for splitting inside a campaign, like two button variants in the same email, or the keyword in a paid ad. Use them when you have a question they answer, not by habit.
The rules
- Lowercase, always. Analytics tools are case-sensitive.
Emailandemailare two rows. - Hyphens, not spaces or underscores. Spaces get encoded as
%20and look broken in reports. Pick hyphens and never change your mind. - Source is a place, medium is a type. If you can say "I clicked it on ___", that is the source. If you can say "it was a ___ link", that is the medium.
- Campaign names carry a date.
spring-launchis ambiguous in year three.spring-launch-2026is not. - No personal data. A recipient's email address in a UTM value is a privacy problem and a support ticket.
Put the scheme on the link, not in a doc
A naming guide in a wiki gets read once. The place to enforce it is where links are created.
In the dashboard, campaign tags on a link are picked from a list, and the list is the scheme. New values can be added, but only deliberately, so newsletter stays one thing. Bulk imports run the same validation, which is where most drift used to sneak in: a CSV with a hundred rows and three spellings.
The API accepts the same values and rejects the same mistakes, so links generated by your own tools follow the rules without anyone checking.
What a clean campaign looks like
For a September product launch announced by email, on X, on LinkedIn, and on a printed handout at an event:
| Placement | source | medium | campaign |
|---|---|---|---|
| Newsletter | newsletter | launch-2026-09 | |
| X post | x | social | launch-2026-09 |
| LinkedIn post | social | launch-2026-09 | |
| Event handout QR | event-nyc | qr | launch-2026-09 |
Four links, one campaign, and the report groups itself.
Retrofitting an old mess
You will not fix historical data, and you do not need to. Draw a line, adopt the scheme from the next campaign, and let the old rows age out of your reporting window. Six months later the mess is gone and nobody had to clean it.