UTM Tracking for Marketing Campaigns

UTMs are five plain-text fields with no validation and no correction — whatever you type is exactly what shows up in your reports, typos included. A naming system decided in advance is what keeps that data usable months later.

Have your channel and campaign name ready? Build the tagged URL in one pass.

Open the UTM Generator →

The problem isn't building the URL — it's what happens after

Any UTM generator will assemble five parameters onto a link correctly. The part that actually determines whether your analytics are useful three months from now is what values you put into those parameters, and whether everyone on the team puts in the same values for the same things. Google Analytics and every other platform that reads UTMs treats each unique string as its own row — there's no fuzzy matching, no autocorrect, and no "did you mean." That's the entire problem this guide is about.

The fragmentation problem, concretely

Say three people tag links to the same Facebook campaign over a few weeks. One writes utm_source=facebook, another writes Facebook, and a third, working faster, writes fb. Analytics platforms are case-sensitive and treat unrecognized strings literally, so that single channel now shows up as three separate sources in every report. Nobody decided to fragment the data — it happened by default, because there was no agreed convention and no one checked before publishing.

The fix isn't a smarter tool. It's deciding the exact values ahead of time, writing them down somewhere the whole team can see, and treating them the same way you'd treat a brand style guide — a fixed reference, not a fresh decision every time someone tags a link. Keep that document living: an agreed list of accepted sources and mediums, who owns changes to it, and a note of which campaigns are already using which names, so nobody has to guess or reinvent a value under deadline.

A naming system that holds up

Keep every value lowercase, and use underscores or hyphens instead of spaces — not because the tool requires it, but because "Spring Sale" and "spring_sale" are two different strings to an analytics platform, and mixed casing is the single most common source of the fragmentation above. Beyond that:

ParameterConventionExample
utm_sourcethe platform sending the traffic, always the same string for that platformnewsletter, google, facebook
utm_mediumthe channel type, from a short fixed list you reuse everywhereemail, cpc, social, affiliate
utm_campaignone identifier per campaign, ideally with a date so it sorts and doesn't collide with next year's versionspring_sale_2026
utm_contentwhat distinguishes this link from other links in the same campaignheader_banner, footer_link
utm_termpaid search only — the keyword or ad group, left off everywhere elserunning_shoes

Per-channel conventions

The five parameters mean slightly different things depending on the channel. Locking these in per channel, once, avoids re-deciding it every time:

Never tag your own internal links

This one is worth stating on its own because it silently destroys data rather than producing an obvious error. UTMs are for links arriving at your site from somewhere else. If you put them on a link between two pages of your own site, analytics platforms treat that click as the start of a brand-new session from a new source — overwriting whatever brought that person to you in the first place.

The practical damage: someone arrives from a paid ad, browses to a second page through an internally-tagged link, and converts. The conversion gets attributed to the internal link's UTM values, not to the ad that actually earned it. The ad looks like it did nothing. To track behaviour inside your own site, use your analytics platform's own page-path and event reporting, which is built for exactly that.

Before you publish a link, not after

Test in an incognito window so cached sessions don't hide a mistake, confirm the destination page actually loads, and check your analytics platform's real-time report to confirm the source and medium came through as expected — not what you assumed you typed. Catching a typo before a link goes into an email that's already sent is the only point at which it's actually free to fix.

Do UTMs work the same way on every platform?

The parameters themselves are an informal but near-universal convention that Google Analytics, most other analytics platforms, and most ad platforms all read the same way. What differs is how strictly each platform enforces a fixed list of accepted medium values versus accepting anything you type — check your specific platform's default channel groupings before assuming a custom medium value will be categorized the way you expect.

Should I UTM-tag my own organic social posts?

Generally no. Organic posts are already attributed correctly through the platform's own referral data, and tagging them with UTMs pointing at the same campaign name as a paid push for that content will merge the two in your reports, making it impossible to tell how much of the traffic was paid versus organic.

What happens if I reuse a campaign name across two different years?

Every visit under that campaign name merges into one continuous total, with no way to separate this year's performance from last year's after the fact. Putting the year directly in utm_campaign (spring_sale_2026 rather than just spring_sale) costs nothing and avoids the problem entirely.

My link already has query parameters — will UTMs break it?

No, as long as they're appended correctly with & rather than a second ?. A URL can only have one question mark; everything after the first one uses ampersands to separate parameters, UTM or otherwise.

Last reviewed: September 2026