Skip to content
100% in your browser. Nothing you paste is uploaded — all processing runs locally. Read more →

UTM parameters explained — campaign, source, medium, and when to use them

On this page
  1. What UTMs are (and what they aren’t)
  2. The five standard fields (source, medium, campaign, term, content)
  3. Naming rules that keep Analytics clean
  4. Common mistakes (case, spaces, over-tagging internal links)
  5. Build a tagged URL in the browser

A UTM parameter is a label you add to a URL so analytics can credit the click. That is the whole job.

utm_source, utm_medium, and utm_campaign tell GA4, Mixpanel, Amplitude, or PostHog which newsletter, which channel, which launch sent the visit. They are not a login. Anyone who can see the link can see the labels.

This guide covers the five standard fields, naming rules that keep reports mergeable, and the mistakes that split your data. Tag a URL in the UTM builder — it runs in your browser, nothing is uploaded, and there is no account.

What UTMs are (and what they aren’t)

UTM stands for Urchin Tracking Module — a leftover name from the analytics product Google bought in 2005. The mechanism is simpler than the name: extra query parameters on a destination URL.

https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring_launch

When someone clicks that link, the analytics script on the destination page reads those keys and attributes the session to the campaign you named. Without UTMs, the tool falls back to the HTTP Referer header. Referrer is fragile — in-app browsers drop it, some privacy modes strip it, and many email clients never send it.

UTMs survive those gaps because they live in the URL itself. That is also why they are public. Treat every tagged link as something a recipient can forward, screenshot, or paste into Slack.

What they are: campaign attribution labels. Source, medium, and campaign answer “where, through what channel, for which push.”

What they aren’t:

If you need to know which email, which social post, which partner page sent traffic, use a UTM. If you need to know which person, that is a different problem — and it does not belong in the query string.

The five standard fields (source, medium, campaign, term, content)

Every major analytics tool reads the same five keys. Source, medium, and campaign are the ones that actually populate campaign reports. Term and content are optional.

ParameterRoleTypical values
utm_sourceWhere the click originatednewsletter, linkedin, google
utm_mediumThe channel typeemail, social, cpc, referral
utm_campaignThe named pushspring_launch_2026, q2_product_update
utm_termPaid-search keywordutm_builder, campaign_tracking
utm_contentCreative or placement variantheader_cta, footer_cta, video_ad_1

Source is the property. Medium is the channel. linkedin + social is a LinkedIn organic post. linkedin + cpc is a LinkedIn ad. Mixing those two into one bucket (utm_source=social) makes it impossible to compare paid vs organic later.

Campaign is the story you will filter on six months from now. Name the launch, the quarter, the offer — not a sentence. spring_launch_2026 is filterable. Check out our new pricing page!!! is not.

Use term only when you are paying for a keyword and want that keyword in the report. Use content when two links in the same campaign need to be told apart — header vs footer in a newsletter, image vs video on a social post.

You do not need all five. Empty optional fields are better than invented ones.

Naming rules that keep Analytics clean

Analytics tools treat UTM values as case-sensitive strings. Email, email, and EMAIL are three sources. spring-launch and spring_launch are two campaigns. The cleanup is always manual.

Pick a convention once and write it down. The one this site recommends:

  1. Lowercase everything. No title case, no screaming caps.
  2. Use underscores, not spaces. Spaces become %20 in the real URL. Underscores stay readable in both the link and the report. If your team already standardized on hyphens, keep hyphens — do not mix.
  3. Never put PII in a UTM. No email, no full name, no customer ID, no sales-rep name that identifies a person. Campaign names describe the push, not the recipient.
  4. Spell the channel the same way every time. email not e-mail not e_mail. cpc not paid one week and ppc the next unless you mean different things.
  5. Keep source and medium short and stable. newsletter beats march_2026_customer_newsletter_html. Put the uniqueness in utm_campaign.

A small table you can paste into a team doc:

FieldRuleYesNo
sourceproperty, lowercasenewsletterNewsletter, nl
mediumchannel typeemailEmail Blast
campaignsnake_case name + yearspring_launch_2026Spring Launch 2026

Future-you filtering GA4 by utm_campaign=spring_launch_2026 is the person this convention protects.

Case drift. One person types LinkedIn, another types linkedin. Reports split. Lowercase at the builder, not at the spreadsheet cleanup.

Spaces and punctuation. spring launch encodes to spring%20launch. Quotes, ampersands, and em-dashes do the same kind of damage. Underscores (or hyphens) keep the visible URL and the report value aligned.

Over-tagging internal links. This is the expensive one. If every in-site CTA carries a fresh UTM, the original campaign is overwritten on the next click. A visitor who arrived from the newsletter, then clicked “Pricing” in your nav, shows up as an internal campaign instead of newsletter / email. Leave internal links clean. Tag the entry URL — emails, social posts, partner pages, QR codes on a poster.

Using campaign as a description. Long sentences, unique IDs per send, or a recipient’s email in utm_content all create a new row per click. You cannot roll those up. If you need a finer split, use utm_content or a documented suffix — spring_launch_2026_a / spring_launch_2026_b.

Build a tagged URL in the browser

You can assemble these by hand. A builder is faster and harder to typo.

The UTM builder on this site fills the five standard fields, encodes the URL in your browser, and lets you copy the result. The form also lives in the page hash so you can bookmark a template and share it with a teammate. Nothing is uploaded. There is no signup.

Typical flow: paste the destination URL; set source, medium, and campaign in lowercase with underscores; add term or content only if you will report on them; copy the tagged URL into the email, social post, or partner page.

https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring_launch_2026&utm_content=header_cta

Build the next one when you have a real campaign to attribute — not for every internal click.

Open the UTM builder →