The goal is fewer ambiguous rows, not longer links
A UTM naming convention is a shared rule for labeling incoming campaign links. Its job is to make next month’s report understandable without asking whoever wrote last month’s tweet. If newsletter, Newsletter and email-blast all mean the same source in your system, you have created cleanup work rather than useful detail.
For a small SaaS, start with a short controlled vocabulary and a link register. You do not need a separate campaign for every sentence you publish. You need enough detail to answer an actual decision: which channel brought qualified visitors, which placement earned attention, and which recorded visits could later be associated with paid customers?
Separate where, how and why
Google’s campaign documentation distinguishes source, medium and campaign; content can distinguish creative or link placements. A useful team convention turns those separate meanings into a predictable sentence. Source answers where the link was distributed. Medium describes the distribution method. Campaign groups related activity. Content identifies a meaningful variation.
For example, a product launch can use the same campaign across an email and a community post while preserving different sources and media. Do not put the channel in every field. If all four fields say newsletter, you have four copies of one answer.
Choose lowercase values, one separator and a stable source vocabulary. These are proposed editorial rules, not universal technical requirements. Your analytics tool’s channel definitions may require specific medium values. Verify those definitions before adopting a custom label.
- source: founder-newsletter, reddit, linkedin
- medium: email, community, organic-social
- campaign: launch-2026-11
- content: hero-button, footer-link, demo-post
A synthetic link register
The example below is invented to demonstrate the structure, not a real campaign or a performance claim. Keep a register with destination, complete tagged URL, owner, distribution date and purpose. The owner field belongs in the register, not necessarily in a public query string.
Two links in the same newsletter share source, medium and campaign. Their content values differ because the team wants to compare the main demonstration link with the footer link. If no decision depends on that distinction, omit the extra detail rather than maintaining it forever.
SYNTHETIC CAMPAIGN: November launch
Placement Source Medium Campaign Content
Email hero founder-newsletter email launch-2026-11 hero-button
Email footer founder-newsletter email launch-2026-11 footer-link
Community post reddit community launch-2026-11 demo-post
https://example.com/demo?utm_source=founder-newsletter
&utm_medium=email&utm_campaign=launch-2026-11&utm_content=hero-button
(The displayed line breaks are for readability; send one complete URL.)Tag distribution, not every movement inside your website
Use this system for links you control outside the site: newsletter calls to action, partner placements, social bios and campaigns. For movement from your own homepage to pricing, measure a navigation or click event instead. Reusing acquisition tags inside the site can create misleading campaign signals in tools that interpret them as a new touch.
Do not fill every blank with a guess. An untagged visit is not automatically a campaign failure, and an unknown source should not be retroactively assigned to your most recent post. Keep the distinction between a recorded Direct visit and a payment without an attributable visit; the related guide explains why those are different problems.
Keep identity and secrets out of public links
A campaign label should describe a group or placement, not identify a person. Do not include customer email addresses, access tokens, invoice identifiers or private account names in tags. Query strings can be copied, logged and exposed in places you did not intend. A random-looking string is not automatically harmless if your application can use it to identify someone.
Build URLs using a URL library or a verified builder rather than manually concatenating text. Check that an existing query string remains valid and that special characters are encoded. A perfectly named campaign that sends people to the wrong page is still a broken campaign.
Test the link after every redirect
Open the exact distributed link in a fresh test session. Inspect the final address after any shortener or redirect. With the relevant collection permission granted, inspect the outgoing event and the resulting report. The expected source must survive the entire path, not merely appear in a spreadsheet.
Repeat with permission denied. Missing analytics in that case may be correct behavior, not an installation bug. Also test mobile in-app navigation if that is where your audience clicks. Record what was observed rather than claiming every browser behaves identically.
- Destination loads and retains intended campaign parameters.
- One visit is recorded under the expected naming convention.
- No personal information is included in the request.
- Checkout still works; attribution is tested separately from link collection.
Review naming once, then review outcomes
After the first campaign, look for unexpected variants and fix the source of new links. Preserve raw historical values; if you group aliases for reporting, document the mapping and when it was applied. Silently rewriting old labels makes comparisons difficult to audit.
UTMs label a journey; they do not prove a channel caused a sale. To evaluate revenue, join eligible visits to authoritative payment records, state the attribution window, and keep missing associations visible. The useful output is a reliable question you can answer—not a promise that every customer’s path is knowable.