The Anatomy of a UTM Tag: What Each Parameter Actually Does

Count the UTM parameters you use. Five, probably. Now count the ones GA4 will actually read: nine.
That gap cost me four months of unusable spend data in 2024. I was tagging everything correctly by the standard advice, and my paid campaigns still would not reconcile against the ad platform invoices. The tags were fine. I just did not understand what each parameter was doing on the other side.
So this is not another “utm_source means the source” article. Every UTM tag creator on the market, mine included, hands you a form with five to nine boxes. What nobody explains is what happens to those values after the click. Which GA4 dimension each one becomes. Which one silently decides your channel grouping. Which two do nothing at all right now.
A UTM tag is a data structure, not a label. Once you see it that way, most tracking problems stop being mysterious.
What Are the Parts of a UTM Tag Called?
A UTM tag is the set of utm_ key-value pairs inside a URL’s query string. The query string is everything after the first ?. Each pair has a key (utm_source), an =, and a value (linkedin). An & separates one pair from the next.
Here is a complete tag with the parts named:
https://linkutm.com/pricing?utm_source=linkedin&utm_medium=cpc&utm_campaign=q4-launch
└──── base URL ────────────┘└─┬─┘└──── key-value pair ────┘└┬┘└─ next pair ─┘
? &
Three things follow from that structure, and they explain a surprising number of support tickets.
The tag is part of the URL, not part of the page. The server can ignore it entirely and the page still loads. That is why a tagged link never breaks a landing page, and also why a redirect can quietly drop the whole thing without any visible error.
The tag has no fixed order. utm_source first or utm_campaign first makes no difference to GA4. Order matters only to humans reading the link, which is a real reason to pick one order and stay with it.
The keys are fixed vocabulary. GA4 looks for exactly these nine strings. utm_Source with a capital S is not one of them, and neither is utm_soure. There is no error message for a misspelled key. The value simply never arrives.
Honest limitation: none of this is enforced by anything. A URL will happily carry utm_medum=cpc forever. The only protection is a tool or a person checking before the link ships.
How Many Parameters Can a UTM Tag Creator Write?
Nine. That is the answer to “how many UTM parameters are there”, and it is not the five you were told. Google’s own documentation on collecting campaign data with custom URLs lists nine utm_ parameters that GA4 recognizes. Almost every article you have read says five, because five is what Google’s Campaign URL Builder shows by default and five is what the original Urchin spec had.
| Parameter | Required | Becomes this GA4 dimension | Who reads it |
|---|---|---|---|
utm_source |
Yes | Session source | GA4 |
utm_medium |
Yes | Session medium | GA4, and the channel grouping engine |
utm_campaign |
Yes | Session campaign | GA4 |
utm_id |
No | Session campaign ID | GA4, and cost-data imports |
utm_term |
No | Session manual term | GA4 |
utm_content |
No | Session manual ad content | GA4 |
utm_source_platform |
No | Session source platform | GA4 |
utm_creative_format |
No | Nothing yet | Nobody |
utm_marketing_tactic |
No | Nothing yet | Nobody |
Google names three as the ones you should always use: source, medium, and campaign. Those three carry the attribution. The rest are refinement.

The last two deserve the blunt version. Google’s documentation states plainly that utm_creative_format and utm_marketing_tactic are “not currently reported in Google Analytics properties.” You can tag them. The values travel. Nothing displays them. I still write them on programmatic campaigns because I expect reporting to arrive eventually and backfilling tags is impossible, but that is a bet, not a best practice. If you skip both, you lose nothing today.
Most UTM tag creator tools expose only the classic five. That is worth checking before you standardise on one, because adding a tenth field to your convention later means re-tagging live links.
What Does Each UTM Parameter Actually Do in GA4?
Each parameter populates one specific dimension, and that dimension is what your reports group by. This is the part the definition articles skip.
utm_source becomes Session source. It answers “which property sent this person”. GA4 also pairs it with medium into the combined Session source/medium dimension, which is the row you actually stare at in the Traffic acquisition report. A source value on its own does almost nothing. It gets its meaning from the medium next to it.
utm_medium becomes Session medium, and then it decides your channel group. This is the highest-consequence parameter in the whole tag and it gets the least respect. More on it in the next section, because it deserves its own.
utm_campaign becomes Session campaign. It is the grouping key for everything you want to report as one effort. My rule: if two links should ever appear on the same row of a report, they share a campaign value. That is the entire decision.
utm_term becomes Session manual term. Built for paid search keywords. If you run Google Ads with auto-tagging on, the GCLID already carries keyword data and this parameter is redundant. It stays useful on Bing, on affiliate placements, and anywhere you are buying keywords outside a platform that auto-tags.
utm_content becomes Session manual ad content. The variant slot. Two links, same campaign, different creative. We have a full breakdown of the utm_content parameter with real examples, so I will not repeat it here.
utm_source_platform becomes Session source platform. This one confuses people because it sounds like a duplicate of utm_source. It is not. Source is where the ad was seen. Source platform is the system that bought or managed it. A LinkedIn ad bought through a DSP has utm_source=linkedin and utm_source_platform naming the DSP. If you buy everything directly, this parameter has nothing to tell you.
How Does utm_medium Decide Your Channel Group?
GA4 reads the literal string in utm_medium and matches it against fixed rules to assign a Default Channel Group. The Default Channel Group is the bucket your traffic lands in: Paid Search, Email, Organic Social, and so on. You cannot edit these rules.
Here is what Google’s default channel group documentation actually specifies, translated out of regex:
| Your utm_medium value | Channel it produces | Condition |
|---|---|---|
cpc, ppc, retargeting, paid*, or anything containing “cp” |
Paid Search | Source must also be a known search site |
organic |
Organic Search | Source must be a known search site |
email, e-mail, e_mail, e mail |
Source or medium matches | |
affiliate |
Affiliates | Exact match, nothing else works |
referral, app, link |
Referral | Any of the three |
social, social-network, social-media, sm, social network, social media |
Organic Social | Source in the social list also qualifies |
cpc with a social source |
Paid Social | Social source plus the paid regex |
| Anything else | Unassigned | No rule matched |
Two consequences that took me embarrassingly long to notice.
The paid rule matches on “cp”, not “cpc”. The actual regex is ^(.*cp.*|ppc|retargeting|paid.*)$. That .*cp.* means any medium containing the letters “cp” anywhere lands in a paid bucket. cpc qualifies. So does cpm, cpv, cpa, and a typo like cpc-test. This is why a misspelled medium sometimes still reports correctly and you never notice the error. It also means a medium like discount-cpn for a coupon campaign will be classified as paid traffic, which is not what anyone intended.
Affiliate is unforgiving in the opposite direction. Medium must equal affiliate exactly. affiliates with an s falls straight through to Unassigned. One character.
If your GA4 has a fat Unassigned bucket, the cause is almost always a medium value that matches no rule. We covered the full diagnostic in fixing unassigned traffic in GA4.
Honest limitation: these rules describe Default Channel Groups only. If your organisation has built custom channel groups, your buckets follow your own definitions and the table above stops predicting your reports.
Are UTM Parameters Case Sensitive?
Half yes, and the half matters. Google’s documentation states that channel definitions “aren’t case-sensitive”. So Email, EMAIL, and email all land in the Email channel. The channel grouping does not care.
Dimension values are a different system. GA4 stores what you sent, byte for byte. Email and email become two separate rows in every report that groups by Session medium. Your channel total stays correct while your medium breakdown splits in two.
That is why “always use lowercase” is good advice given for a slightly wrong reason. Lowercase does not fix your channel grouping, because grouping was never broken. It keeps your dimension rows from fragmenting. The UTM naming conventions post covers the full rulebook, and enforcing it at creation time with naming rules is more reliable than remembering.
What Is utm_id Actually For?
utm_id is a join key. Every other parameter describes the traffic. This one gives the campaign a stable identifier so GA4 can match your sessions to a separate table of cost data you import.
That is the real function, and it is why the parameter feels pointless until the moment you need it. Without utm_id, GA4 knows you got 4,000 sessions from a campaign. It has no idea you spent 90,000 rupees getting them. Import your spend keyed on the same ID and GA4 can put cost, sessions, and revenue on the same row.
Three practical notes from using it:
- The ID must be stable across every link in the campaign. If it changes, the join breaks and cost lands against a campaign with no sessions.
- It should mean something in your ad platform, not just in GA4. I use the platform’s own campaign ID so reconciliation is a lookup, not a guess.
- It does not replace
utm_campaign. The ID is machine-facing, the campaign name is human-facing, and reports read much better with both.
This is the parameter that solved my 2024 reconciliation problem. Not better naming. A join key.

Where a UTM Tag Creator’s Control Ends
A tag can be perfect at creation and still arrive empty. These are the five failure points I see most, in rough order of frequency.
A redirect eats the query string. The most common one by far. A link shortener, a consent gate, or an internal vanity URL forwards the visitor without carrying the parameters. The page loads, the visitor converts, and GA4 files them as Direct.
The platform strips or rewrites it. Some email clients and social apps rewrite outbound URLs. What you tagged is not always what gets clicked.
A trailing character sneaks into the value. A copied link with a stray comma produces utm_campaign=q4-launch, and that comma becomes part of the value. New row, one session, looks like a separate campaign forever.
The value collides with an existing parameter. If the destination URL already uses a parameter your tag also uses, one of them wins. Rare, but it happens on sites with their own tracking layer.
Nobody checked. No error is thrown for any of the above. A wrong tag looks exactly like a right tag.
The limitation worth stating: none of these are creator problems. A UTM tag creator controls the string it produces and nothing that happens afterwards. Validation after the fact, by clicking the live link and reading the URL that lands, is the only way to catch failures three through five.
What a UTM Tag Creator Actually Automates
A UTM tag creator assembles the query string, encodes the values, and enforces your vocabulary before the link exists. That is the honest scope. It is a correctness tool, not an attribution tool.
Concretely, the work it removes:
- Picking the right delimiter,
?for the first parameter and&for every one after - Percent-encoding values so a space does not break the link
- Offering the same source and medium options every time, so
linkedinnever becomesLinkedInnext Tuesday - Exposing the parameters beyond the classic five, which most builders do not
What it cannot do is decide whether cpc or paid-social is right for a given placement. That is a naming decision, and it belongs to your convention. If you are choosing a tool rather than learning the anatomy, the five features that separate a real UTM creator from a form that concatenates strings is the more useful read. Google’s own Campaign URL Builder remains a perfectly good free option for one-off links, and I still use it when I am away from my own tooling.
Frequently Asked Questions
How many UTM parameters does GA4 actually support?
Nine. They are utm_source, utm_medium, utm_campaign, utm_id, utm_term, utm_content, utm_source_platform, utm_creative_format, and utm_marketing_tactic. Google names source, medium, and campaign as the three you should always use. Most articles say there are five because that is what the original Urchin specification defined and what Google’s Campaign URL Builder shows by default.
What GA4 dimension does each UTM parameter become?
Each parameter maps to one dimension: utm_source to Session source, utm_medium to Session medium, utm_campaign to Session campaign, utm_id to Session campaign ID, utm_term to Session manual term, utm_content to Session manual ad content, and utm_source_platform to Session source platform. GA4 also combines source and medium into Session source/medium, which is the dimension most Traffic acquisition reports group by. The remaining two parameters populate no dimension yet.
Does utm_medium have to be an exact value?
For some channels, yes. Affiliates requires utm_medium to equal “affiliate” exactly, so “affiliates” with an s falls through to Unassigned. Others are looser: the paid rule matches the regex ^(.*cp.*|ppc|retargeting|paid.*)$, which accepts anything containing the letters “cp” anywhere in the value. Referral accepts referral, app, or link. Any medium matching no rule sends the traffic to Unassigned.
Are UTM parameters case sensitive in GA4?
It depends which system you mean. GA4’s channel definitions are not case-sensitive, so Email and email land in the same channel. Dimension values are case-sensitive, so those two spellings appear as separate rows in any report grouped by Session medium. Your channel totals stay right while your medium breakdown fragments, which is the more common and more confusing failure.
What is the difference between utm_id and utm_campaign?
utm_campaign is the human-readable name you group reports by. utm_id is a machine-readable identifier used to join your GA4 sessions to imported cost data. Only utm_id can connect spend to sessions, so a campaign with a name but no ID will show traffic and conversions with no cost attached. Use both: the ID for the join, the name for readability.
Do utm_creative_format and utm_marketing_tactic do anything yet?
Not in reporting. Google’s documentation states both are “not currently reported in Google Analytics properties.” The values are accepted and travel with the URL, but no GA4 dimension displays them today. Tag them only if you want the historical data in place should reporting arrive later, since tags cannot be backfilled onto links that have already been clicked.
Start With the Structure, Not the Form
Most UTM problems are not tagging problems. They are structure problems: a medium string that matches no channel rule, a missing join key, a value that fragmented into two rows because someone capitalised it.
Learn what the nine parameters become on the other side and the form fills itself in. Build your next tagged link with the free UTM tag creator at linkutm, then click it and read the URL that actually lands. That one habit catches more broken tracking than any checklist.