Home/ Guides/ utm_source vs utm_medium vs utm_campaign

Guide · Campaigns

utm_source vs medium vs campaign — what goes where.

The single most-confused distinction in campaign tracking, in plain English: source is where the click came from, medium is how it arrived, and campaign is which initiative it belongs to. Here's the breakdown, with worked examples and the mistakes that quietly scramble your reports.

Updated June 3, 2026 · by slsh.me

The short answer

utm_source = where. utm_medium = how. utm_campaign = which.

source · where twitter, newsletter medium · how social, email, cpc campaign · which spring-launch

Read it as one sentence: a click came from twitter (source) via social (medium) as part of the spring-launch (campaign). utm_source names the specific place; utm_medium names the broad channel type it falls under; utm_campaign ties the link to one marketing push so its numbers add up in one row.

Rather not memorize which field is which? The free slsh.me UTM builder labels every field with the question it answers and encodes the values for you — then shortening the result on slsh.me keeps the tagged URL tidy while you watch the clicks roll in.

Each parameter, and the question it answers.

Five parameters can ride on a link. The first three carry the attribution; utm_term and utm_content are optional extra detail you add only when you need it.

Parameter Question it answers Example values Required?
utm_sourceWhere did the click come from? The specific site, app or sender.twitter, newsletter, googleYes
utm_mediumHow did it arrive? The broad channel type.social, email, cpcYes
utm_campaignWhich initiative or promotion is this?spring-launch, q2-webinarYes
utm_termWhat keyword? The paid-search term you bid on.link-shortenerNo
utm_contentWhich version? Tells two links to the same page apart.hero-cta, footer-linkNo

Source vs medium: the one that trips everyone.

utm_source answers "which exact place sent this click?": a named site, app or sender like twitter, linkedin, or spring-newsletter. utm_medium answers the broader "what kind of channel is that?": a bucket like social, email or cpc. Source is the specific thing, medium is the category above it, and many sources roll up into one medium (twitter and linkedin are both social).

The reason both fields exist is that one source can use different mediums. A link posted to your Twitter feed is source=twitter, medium=social; the same link in a paid Twitter ad is source=twitter, medium=cpc. Same place, different channel type, and you almost always want to separate organic from paid in the report. That separation is the entire reason medium is its own field.

Quick test: if the value names a brand or site (Twitter, Mailchimp, that one newsletter), it's a source. If it names a way of reaching people you'd reuse across many sites (email, social, paid search), it's a medium. Still unsure? Ask whether two completely different sites would ever share the value. If yes, it's a medium.

What goes where, in three real links.

The same destination, tagged for three different places it's being shared. Watch how source and medium move while the campaign stays put.

A tweet announcing the launch

slsh.me/launch?utm_source=twitter&utm_medium=social&utm_campaign=spring-launch
source twitter: the specific place the post lives. medium social: the channel type (an organic post, not an ad). campaign spring-launch: the initiative it's part of.

A link in your weekly newsletter

slsh.me/launch?utm_source=weekly-newsletter&utm_medium=email&utm_campaign=spring-launch
source weekly-newsletter: the specific sender / list. medium email: it arrived in an inbox. campaign spring-launch: same initiative, so it merges with the tweet in your campaign total.

A paid ad on the same network

slsh.me/launch?utm_source=twitter&utm_medium=cpc&utm_campaign=spring-launch&utm_content=video-a
source twitter: same site as the organic tweet… medium cpc: …but this one's paid, so the medium changes. This is the line item that separates ad spend from your free posts. content video-a: optional, naming which creative so you can A/B two ads.

Notice every value is lowercase with hyphens — that's deliberate. Keeping a consistent scheme is its own topic: see the UTM naming convention guide for the rules that stop one campaign splitting into five rows.

Common mistakes.

These four scramble the report most often — and each is a one-line fix once you know the rule.

Swapping source and medium

Putting utm_source=email and utm_medium=newsletter is backwards: email is the channel type (medium) and newsletter is the specific sender (source). Reversed values quietly land in the wrong report grouping.

Fix: source = the named place, medium = the broad channel type. source=newsletter, medium=email.

Stuffing the channel into the campaign

utm_campaign=facebook-ads jams the channel into the campaign field, so you can't compare the same campaign across channels. The campaign should name the initiative, not the platform.

Fix: campaign=spring-launch, and let source=facebook, medium=cpc carry the channel.

Inconsistent casing splitting rows

Values are case-sensitive, so Twitter and twitter are two different sources. One stray capital and a single channel gets scattered across multiple lines, each with a smaller total.

Fix: lowercase everything, always — pick the one casing nobody fat-fingers.

Setting a source with no medium

utm_source=facebook on its own leaves the medium blank, so analytics can't bucket it — it often falls into "(not set)" or an "unassigned" channel and disappears from your social numbers.

Fix: always pair them — at minimum source and medium on every tagged link.

Build one without second-guessing.

The surest way to put each value in the right field is to fill in a form that already labels them (where, how, which) and encodes the result for you. Then shorten the tagged URL so the link you actually share stays clean.

The free slsh.me UTM builder lays out utm_source through utm_content as labelled fields, lowercases and encodes every value, and hands you a ready-to-share URL — no signup needed.

Build a tagged URL with the free UTM builder

Then shorten it on slsh.me — short links keep your UTMs tidy and out of sight, and add live click analytics on every channel, free.

Questions

What's the difference between utm_source and utm_medium? +
utm_source names where the click came from — the specific site, app or sender, like twitter, newsletter or google. utm_medium names how it reached you — the broad channel type, like social, email or cpc. One source can ride on different mediums (a twitter link can be organic social or a paid cpc ad), which is exactly why both fields exist.
What should utm_medium be? +
A broad channel type from a short, fixed list — not the name of a site. The common values are email, social (or organic-social), cpc (or paid-social) for paid ads, referral, affiliate, sponsorship and qr. Pick one menu of medium values and reuse it everywhere so your channel grouping stays clean.
Are utm_term and utm_content required? +
No. Only utm_source, utm_medium and utm_campaign do the core attribution work. utm_term holds a paid-search keyword and utm_content distinguishes two links to the same destination (for A/B tests or a header-vs-footer placement). Add them only when you actually need that extra detail.
Why is one campaign split across multiple rows in GA4? +
Because UTM values are matched as exact, case-sensitive strings. Twitter and twitter, or spring-sale and spring_sale, or a value with a stray trailing space, each become their own row — so a single campaign gets scattered across several lines and its real total looks smaller than it is. Lock every value to lowercase with one separator (see the naming convention guide) and the rows merge back into one.

Tag it right, track it clean.

Shorten any tagged URL with slsh.me. The clutter of UTM parameters hides behind a tidy short link, and you get live click analytics per channel — free.

Create a link with slsh.me

Free forever · see pricing