Skip to content

UTM Parameters Explained: The 5 Tags and Naming Rules

IB
InBio Team
Updated
7 min read

To an analytics tool, Email and email are two completely different channels. Tag one newsletter with utm_medium=Email and the next with utm_medium=email, and a single channel quietly splinters into two rows that never add up. That one fact — UTM parameters are case-sensitive and taken literally — is behind most of the messy analytics reports you have ever seen.

The good news: the rules that keep them clean are few and easy. This guide covers what a UTM parameter is, what each of the five does, the naming conventions that stop the splintering, how they behave in Google Analytics 4, and how to build and shorten tagged links without hand-editing a single &.

What is a UTM parameter?

A UTM parameter is a short tag you add to the end of a URL to tell your analytics where a click came from. When someone clicks a tagged link, your analytics reads the tags and files the visit under the right source, channel, and campaign — instead of dropping it into the anonymous "direct" pile where most untagged traffic ends up. (UTM stands for "Urchin Tracking Module," after the analytics company Google bought to build Google Analytics. The history does not matter; the tags do.)

You append them after a ?, joined by &. Here is a fully tagged URL with every part labelled:

https://in.bio/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=july-launch
Part of the URLExampleWhat it does
Base URLhttps://in.bio/pricingThe page the link actually opens
Question mark?Marks where the parameters begin
Sourceutm_source=newsletterWhere the click came from
Ampersand&Separates one tag from the next
Mediumutm_medium=emailThe type of channel
Campaignutm_campaign=july-launchThe campaign the link belongs to

The page itself does not change — /pricing loads exactly the same with or without the tags. They are read only by analytics tools, and the visitor never needs to see them. Ideally they never do, because you will shorten the link before sharing it — more on that below.

The five UTM parameters

There are five in total. You will use the first three on almost every link and the last two only occasionally.

ParameterWhat it capturesExampleWhen to use it
utm_sourceWhere the traffic comes from — a specific placenewsletter, instagram, googleAlways
utm_mediumThe type of channel, not the placeemail, cpc, social, qrAlways
utm_campaignThe marketing push the link belongs tojuly-launch, black-friday-2026Always
utm_termThe paid-search keyword you bid onrunning-shoesPaid search
utm_contentTells apart links that share one campaigncta-top vs cta-footerA/B tests

The distinction people trip on most is source vs. medium. A rule that always works: if you can visit it, it is a source; if it describes the kind of channel, it is a medium. facebook is a source; social (or paid-social) is a medium. Get these two consistent and most of your report is already clean.

UTM best practices

Almost everything that goes wrong with UTMs is a naming problem, and every naming problem is preventable. These are the rules that keep a year of campaign data comparable:

  1. Never tag internal links. This is the most damaging mistake and the one most guides skip. If you put UTMs on a link between two pages of your own site, the click overwrites the visitor's original source — the newsletter or ad that actually brought them in is erased and replaced with your internal campaign. Tag only links that point to your site from outside it.
  2. Lowercase everything, always. Newsletter and newsletter are two separate rows forever. Pick lowercase and never deviate.
  3. Hyphens, not underscores, and never spaces. Spaces become %20 and look broken; underscores blur into the utm_ prefix. spring-sale is the safe choice.
  4. Decide source vs. medium once, and write it down. The single most common way teams splinter a channel is disagreeing on whether facebook is a source or a medium.
  5. One campaign, one name, spelled identically everywhere. july-launch in email and july_launch in ads are two campaigns as far as your report is concerned.
  6. Date long-running campaigns. spring-sale-2026 keeps this year from merging into last year's numbers.
  7. Do not double-tag what your email platform already tags. Many ESPs add their own utm_source and utm_medium automatically; adding your own on top produces conflicting values. Check before you tag.
  8. Keep a shared list of approved values. If your whole team draws source and medium words from the same short list, the report means something. If everyone invents their own, the data is fiction.
  9. Build with a tool, not by hand. Hand-typing ?utm_source=...&utm_medium=... is exactly how casing slips and separators drift. A UTM builder gives you guided fields and a live preview so every link comes out consistent.
  10. Shorten before sharing. A tagged URL is long and ugly; a short link hides it while passing every tag through — covered in full below.

Common mistakes that quietly ruin reports

The rules above are the fixes. Here is what breaking them looks like when you open your analytics, so you can recognise the symptom and trace it back:

  • One channel, several rows. Email, email, and e-mail each get their own line. Cause: inconsistent casing or separators.
  • Traffic that should be attributed shows as "direct" or "(not set)." Cause: a missing parameter, or a shortener that stripped the tags on redirect.
  • Your acquisition source keeps changing to your own site. Cause: internal links carrying UTMs, overwriting the real source mid-session.
  • A tidy channel report with a giant "Unassigned" bucket. Cause: a medium value GA4 does not recognise — see the next section.

UTM parameters in Google Analytics 4

In GA4, your UTM values surface in the Traffic acquisition and User acquisition reports, and you can add Session source, Session medium, and Session campaign as dimensions almost anywhere. So far, so predictable. The part that catches people out is Default channel groupings.

GA4 sorts every visit into a channel — "Organic Social," "Email," "Paid Search," and so on — by pattern-matching your utm_medium (and sometimes utm_source) against a fixed set of expected values. email maps to Email; cpc, ppc, or paid map to Paid Search; social and paid-social map to the social channels. But invent a medium GA4 does not recognise — newsletter as a medium, say, or facebook where GA4 expected social — and that traffic lands silently in Unassigned, so your channel report understates the very campaigns you are tagging.

The fix is entirely upstream: use medium values GA4 expects (email, cpc, social, referral, affiliate) and keep the specific place in utm_source. Your "shared list of approved values" from the best-practices section should be exactly that list.

A fully tagged URL is long, ugly, and fragile. Pasted into an Instagram bio, a printed flyer, or a podcast script, it is an eyesore that eats your character budget and invites typos. The fix is to wrap it in a short link: in.bio/july-promo carries all five parameters invisibly, passes them to the destination on click, and gives you a per-link click count on top of whatever your analytics reports. New to it? Start with the step-by-step guide to shortening a URL.

One warning no other UTM guide can make with evidence: not every shortener forwards your tags. When we benchmarked eight URL shorteners, several stripped utm_* parameters (or dropped click IDs like gclid) on the redirect — which means the tags you carefully set never reach your analytics at all. Before you route a campaign through a shortener, confirm it passes parameters through. INBIO forwards every one and records it per click, so a single short link still yields per-ad, per-placement detail.

This matters most where links are seen and space is tight — social bios and captions. If you are tagging campaigns for a specific platform, our platform guides cover the quirks: Instagram and TikTok both re-wrap or restrict links in ways that change how your tags survive.

A UTM naming convention you can copy

Steal this. It uses medium values GA4 recognises, lowercase-and-hyphen throughout, and one shared campaign name across every channel of a single push:

Channelutm_sourceutm_mediumutm_campaignutm_content
Email newsletternewsletteremailjuly-launchheader-cta
Paid social (Meta)facebookpaid-socialjuly-launchvideo-a
Organic social (IG)instagramsocialjuly-launchbio-link
Print QR codeflyerqrjuly-launchstore-window
Podcast readthe-daily-podaudiojuly-launchmid-roll
Affiliatepartner-nameaffiliatejuly-launchbanner-300x250

Notice the campaign name never changes across the rows — that is what lets you compare channels against each other for one push. The tagging on print and QR ties offline placements back to online clicks; if that is your world, our guide on offline-to-online attribution goes deeper. And because tagged links attract automated clicks too, it is worth filtering bot traffic so your campaign numbers reflect real people.

A note for anyone running ads

Ad platforms like Meta and Google append their own parameters to your URL — dynamic UTM values plus click IDs like fbclid and gclid. If you shorten an ad link, your shortener has to forward those parameters to the destination, or your conversion tracking breaks. As the benchmark above showed, not all of them do. INBIO passes every parameter through and records it per click, so one short link in a paid campaign still yields per-ad detail.

The takeaway

UTMs are five simple tags, but their value lives entirely in consistency: never tag internal links, lowercase everything, one separator, sources as places and mediums as types (using values GA4 recognises), dated campaigns, and a shared list of approved values. Build them with a tool instead of by hand, shorten the result so the tags ride along invisibly, and your reports will finally tell you which channel actually works.

Build a clean campaign URL — free, with a live color-coded preview and one-click shortening.

Frequently asked questions

Supercharge your link management.

See why teams use in.bio to create, manage, track, and scale links across campaigns, products, and workspaces.