What are UTM parameters?

UTM parameters are the five named query-string values that describe a campaign link: utm_source, utm_medium, utm_campaign, utm_term and utm_content. Source, medium and campaign are the ones every report groups by. Term and content are optional detail for paid keywords and creative variants.

One paid social campaign with two creatives, tagged consistently.

utm_sourcelinkedin
utm_mediumpaid-social
utm_campaign2026-q3-cookieless
utm_contentvideo-a
Second creative differs only inutm_content=static-b

Both creatives roll up into one campaign, and can still be compared against each other utm_content is what lets you A/B test creative without fragmenting the campaign into two unrelated rows. Changing utm_campaign per creative is the mistake that makes the comparison impossible.

The five parameters Source, medium and campaign are the working set. If you only ever fill in three, fill in these three, in this order of importance.

ParameterAnswersRequiredExample values
utm_sourceWhich specific site or property sent the clickYesnewsletter, linkedin, partner-blog
utm_mediumWhat kind of channel it wasYesemail, cpc, paid-social, referral
utm_campaignWhich initiative it belongs toYes2026-q3-cookieless, black-friday
utm_termThe paid keyword that triggered the adNocookieless analytics
utm_contentWhich creative, placement or link within the pageNovideo-a, footer-cta, header-link

Google Ads also uses gclid and Microsoft uses msclkid, which are click identifiers rather than descriptive tags. They work in their own platforms and are not a substitute for UTMs in your analytics.

Source versus medium, the distinction people get wrong

Medium is the category. Source is the specific property inside that category. Get this backwards and every channel report becomes unreadable.

  • Correct: utm_source=linkedin, utm_medium=paid-social. The medium groups all paid social together; the source separates LinkedIn from the rest.
  • Wrong: utm_source=paid, utm_medium=linkedin. Now there is a medium called linkedin sitting next to a medium called email, and no way to total paid spend.

A quick test: could two different sources share this medium? Newsletter and partner-newsletter can both be email. Nothing else can be linkedin. That tells you which slot each value belongs in.

Keep the medium vocabulary short and closed. Six to ten values, written down, applied by everyone. The moment mediums are invented ad hoc, channel reporting stops totalling correctly and no amount of cleanup fixes the historical rows.

The free UTM builder enforces the mechanical half of this for you: it lowercases values, hyphenates them, and hands back a finished link, so the only thing left to get right is which value goes in which slot.

A naming convention that survives a marketing team

  1. 1

    Lowercase, always

    Every parameter value is case sensitive in every analytics tool. Email and email are two rows. Lowercase everything at the point the link is created, not afterwards.

  2. 2

    Hyphens between words

    Spaces become %20 and underscores read badly in reports. Pick hyphens and never mix. black-friday, not black_friday or Black Friday.

  3. 3

    Date the campaign

    Prefix with the period: 2026-q3-cookieless. A year later you will have three campaigns called launch, and no way to tell them apart.

  4. 4

    Keep one shared list

    A single sheet with the allowed source and medium values, plus the campaign register. Attribution quality is an operations problem, not a technical one.

See it on real data. The live demo is a fully populated dashboard on demo traffic, with no signup and no card.

Open the live demo

Mistakes that ruin the data

  • Tagging internal links

    A UTM on a link between your own pages restarts campaign attribution mid-visit and overwrites the real source with your own. Nothing recovers that data afterwards.

  • Personal data in utm_content

    Email addresses and customer ids inside UTMs leak into browser history, shared links, referrer headers and server logs. Use an opaque code if you need per-recipient detail.

  • A new campaign name per creative

    That is what utm_content is for. Splitting utm_campaign per asset makes the campaign total impossible to reconstruct.

  • Trusting the values

    Anyone can edit a UTM in the address bar, so they arrive as untrusted input. Treat them as text to be escaped, never as a fact about where the visitor came from.

How mrkr handles them

mrkr reads all five parameters at ingest, normalises them, and keeps source, medium and campaign on the session so that any goal or purchase later in the visit carries the campaign that produced it.

Values are stored as text and escaped on render, because they are attacker-controlled by construction. Campaign reporting works in the default cookieless mode, since reading a query string stores nothing on the visitor's device.

What cookieless mode cannot do is connect a campaign click today to a purchase next week. That needs identity across sessions, which is what the optional per-site cookie mode provides, with the consent requirement that comes with it.

Which UTM parameters are required?

utm_source, utm_medium and utm_campaign in practice. Most tools will record a link with only utm_source, but a campaign without a medium cannot be grouped into a channel report, which is usually the reason you tagged it.

Are UTM parameters case sensitive?

Yes, in every major analytics tool. Email, email and EMAIL become three separate rows that cannot be merged retroactively. Lowercase every value as a rule.

What is the difference between utm_term and utm_content?

utm_term records the paid search keyword that triggered the ad. utm_content distinguishes variants of the same campaign, such as two creatives or two links in the same email, so you can compare them without splitting the campaign.

Start with one line of HTML.Your first visitors show up within a minute.