Have you ever opened a page and found the address bar full of characters that look broken? A question mark, then utm_source, s=46, a gclid that runs for half the line. The page behind them is ordinary. The characters are not the page. They are notes about the visit: who sent it, from what kind of place, which button, which ad click, which share. Teams read that tail two ways. Either it is junk to delete, or it is already a score. Both readings skip the job. Metadata is the raw material of a metric. It is not the metric.
A metric is a count. Sessions. Signups. Purchases. The count becomes a decision only when you can group it, and the group comes from a label that was attached to an event. If that note never lands on an event your own collector records, no number you own will move. That is the whole influence. It is narrower than the diagrams, and it is the part worth learning.
Three jobs in one string
The bar holds three jobs, written with the same characters. Mixing them up is how a cleanup pass deletes the thing you meant to measure, and how a report starts treating a playback hint as a person.
The address is the path. A status id, a product page, a video id. Without it there is no page. It is not a tracker and it is not a metric. It is the thing the visit is about. You can count views of that path. The path itself is still just a name.
An instruction tells the page where to open. A map coordinate. A playlist. On a video host, a start time: t=69 means one minute and nine seconds in, not a tracking code. Delete the instruction and the page still opens. It opens in the wrong place. That is a product decision, the same kind as a deep link into a settings screen. Keep it when you meant the moment.
Visit metadata describes the arrival, not the page. utm_source=newsletter. utm_content=header. gclid= and the other click ids. A share code such as s=46 on X, or si= on a YouTube link. These do not move a playhead and they do not change which screen you see. They change which bucket a later count can use. Strip them and the content is the same. The measurement changes, because the measurement was going to be a count of visits that carried the label.
Why the notes exist
Without metadata every open looks the same. Someone requested a URL. You cannot tell a newsletter from an ad, a header button from a footer button, a paid click from a friend pasting a link. The product questions behind those differences are ordinary. Which effort filled the signup. Which creative is worth repeating. Which click should be joined to a cost. Which surface people use when they share.
The notes exist so those questions can be answered later, by grouping events that already happened. They do not create the visit. The person was going to open the page. The label decides which total that visit is added to. Change the label and you change the report, even when the product behavior is identical.
Five families, and the number each one can move
Ordinary links carry five families. Each one can feed a different number. Confusing the families is how a dashboard answers a question nobody asked.
The address is the path and the ids. It is required. It is what you count views of. It is the object, not the source of the visit.
An instruction is a start time, a playlist, coordinates, a deep link into a screen. It changes what the person sees. It can feed a product metric, such as how often a shared video is opened at a marked moment, only if you record that parameter yourself. It does not say where the person came from.
Campaign labels are the ones you write: utm_source, utm_medium, utm_campaign, utm_content, utm_term, and utm_id. They are readable on purpose. Source is who sent the visit. Medium is the kind of place: email, cpc, social. Campaign is the effort. Content is the creative, so two buttons in one letter can be told apart. Term is the paid keyword. These are the labels that split sessions, signup rate, and channel totals. Put the campaign name in source and again in medium, and the visit becomes hard to file. The sessions still exist. They land on the wrong shelf.
Click ids are written by an ad system. Google writes gclid, gbraid, and wbraid. Meta writes fbclid. The other ad platforms write msclkid, ttclid, and twclid. They are opaque on purpose. They exist so a click can be joined, on the ad platform’s side, to a cost and a later conversion. That join is what makes a return-on-ad-spend number possible. A click is not a session. The platform counts the click when the ad is tapped. Your analytics counts a session when its tag runs. Either one can exist without the other, and the gap between them is itself a metric.
Share stamps are what a product adds when someone copies. On X, s= is a category: which client, which button. People who have watched Copy link read the common values as 19 for Android, 20 for the website, 46 for the iPhone app. X has not published the table, and an update can renumber it. YouTube’s si=, and the t= that sometimes sits beside s= on X, are tokens for one share, not a small menu. A category can be a chart axis on the platform that minted it: shares by surface. A raw token is not an axis. Group by the token and you get one row per share, a list pretending to be a ranking.
One more signal never appears in the address bar. The browser sends a Referer header, the page you came from, when the previous site allows it. Analytics uses it when the URL carried no campaign label and no click id. Direct means the label was missing. It does not mean someone typed the address.
How a label becomes a count
Take a link you own. Metadata on someone else’s host is their instrumentation. s=46 changes a share report inside X when someone opens x.com. si= can change a watch-from-share report inside YouTube. Neither appears in your sessions, your signup rate, or your channel totals, unless the landing URL is yours and your collector reads the key.
Say the link is yours.
https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=october&utm_content=header
Someone taps it. The browser requests the path. The query travels with the request. A fragment after # does not. Servers and analytics see the query. They do not see the hash. Anything you hide after # cannot affect a metric collected on the server, and often cannot affect one collected in the page either, depending on what the tag reads.
The collector reads the query on the first hit and copies known keys onto the event as properties. Unknown keys are ignored. A stray s=46 on your own URL does nothing until you decide to read it. This is the first place metadata fails to move a number: the note arrived, and nobody stored it.
Hits are then grouped into a session. In GA4 a session ends after about 30 minutes of quiet, and a new campaign on a later hit can open a new session. Source and medium are taken from the hit that opened the session. Pages after it do not move that source. The person can wander the whole site. The visit stays newsletter / email. This is the second place a label exerts its influence. It freezes the credit for the visit at the door.
The credit is chosen, not blended. A value written on the tag can override the same key in the query: a campaign id set on the tag replaces utm_id. When a Google click id can be read, GA4 takes source and medium from that auto-tagging. The utm you added does not replace them. utm_content and utm_term still record the creative and the keyword. If the click id cannot be read and any utm is on the URL, every traffic-source value comes from those parameters, and a missing one is stored as (not set). With no campaign label and no click id, the referrer is used. With none of those, the session is filed as direct. A later direct visit does not wipe an earlier known source. The blank does not overwrite the note. So a missing label does not always mean the channel total drops. Sometimes the previous label is still holding the credit.
Above that sits a lookup called a channel group. It reads source and medium and files the session under Paid Social, Organic Social, Email, Referral, Direct, or Unassigned. Unassigned is not a mystery audience. It is a label that matched no rule. A medium the rules have never heard of, newsletter or share-button, does that. Email in GA4 is looking for a medium such as email. The visits are in the property. The Email total did not receive them. The Unassigned total did. Behavior did not change. The shelf did.
The metric is the count, grouped. It has three parts, and metadata only supplies one of them. You count a thing: a session, a signup, a purchase. You group that count by a label: source, medium, content, device. You choose a scope: this hit, this visit, or this person. Count the sessions in a shelf. Count the key events inside them. Divide if you need a rate. 140 sessions and 11 signups, source newsletter, content header: that pair of counts is a metric. The string utm_content=header is not. The label only chose the shelf.
Device is a label, and it is not a UTM. Nothing after the question mark says phone or desktop. The collector reads the browser and files the session as phone, desktop, or tablet. The same shelf can be split again without any new parameter. If a report shows the footer converting badly on a phone, it is reading two labels at once. The utm names the button. The device names the machine. Mixing them is how a layout problem gets filed as a campaign problem.
Where the number actually moves
The same people, the same page. The note is the only thing that changes. The plate is an illustration of the mechanism, not a study.
Content
Header
utm_content=header
200sessions
22signups
11%rate
Footer
utm_content=footer
200sessions
6signups
3%rate
No content label
one bucket
400sessions
28signups
7%rate
Medium
Written as email
utm_medium=email
400sessions in Email
28signups
Written as newsletter
utm_medium=newsletter
400sessions in Unassigned
28signups, same count
Click and session
Ad platform
counts the tap
1,000clicks
Your tag
counts a loaded page
700sessions
Device
Phone
read from the browser
160of the header sessions
Desktop
same button, other machine
40of the header sessions
The header and the footer received the same 200 clicks. The content label is why the report can say the header produced the signups. Remove that parameter and both buttons fall into one bucket. The product is unchanged. The comparison is the metric that disappears.
The medium row is the same 400 sessions and the same 28 signups. Written as email, they join the Email total. Written as newsletter, the channel rules do not recognize the word, and the sessions show up as Unassigned. A weekly review that watches Email will say the letter failed. The signup count for the site did not move. Metadata did not invent the visits. It chose which total they increment.
The click row is a different pair. The ad platform counts a tap. Your tag counts a page that finished loading. Three hundred taps never became sessions. The tab closed, the script was blocked, the page did not finish loading. Strip the click id before the landing and the platform’s click count stays. Your signups no longer join to that cost. Paid efficiency falls in the ad report. In your own property the same signups look direct or referral.
The device row is those header sessions again, split by the machine. No parameter on the link did this. If the phone converts worse, the button is still the header. The layout is what changed, not the campaign.
How the report measures it
A report does not score the parameter. It groups by it. Every session whose landing carried utm_content=header goes in one row. The sessions in that row are counted. The signups that happened inside those sessions are counted. The rate is the second count divided by the first. Footer is the same procedure with the other value. The chart is those rows, drawn.
Sessions and signups share one scale, so the rate is visible without the division. Both buttons produced 200 sessions, and those bars match. The signup bar is the metric that splits them: 22 against 6, 11 percent against 3. The scale runs to 400 so the merged row can sit beside the two halves.
Grouped by utm_content
SessionsSignups, same scale
header
200
22, 11%
footer
200
6, 3%
no content label
400
28, 7%
Grouped by channel, from utm_medium
utm_medium=email. Signups stay 28.
400
Unassigned
0
utm_medium=newsletter. Signups stay 28.
0
Unassigned
400
Take the content label off and the report is allowed one row. The session bar doubles because the two buttons now share it. The signup bar becomes the blend, 28 out of 400. The chart is smoother, and it can no longer say which button did the work.
The channel chart is the same 400 sessions grouped by a lookup on utm_medium. Write email and the bar sits in Email. Write newsletter and the bar sits in Unassigned. Signups remain 28 under either drawing. The behavior did not move. The shelf the chart is willing to draw did.
What a UTM still has to get right
utm_source names who sent the visit. utm_medium names the kind of place, and it is the word the channel rules match. utm_campaign names the effort, so one month can be set beside the next. utm_content names the creative or the button. utm_term names the paid keyword. utm_id is a stable id for that campaign, the value you keep when the public name changes. Google also documents utm_source_platform, the platform that sent the visit. Two further parameters, utm_creative_format and utm_marketing_tactic, are listed and are not currently shown in Analytics reports. You can write the pairs in any order. The names are what the collector reads.
Case is part of the value. utm_source=Email and utm_source=email are two rows. A month of mixed capitals looks like several small efforts. Lower case keeps the column intact.
Set source, medium, and campaign together. A missing parameter is reported as (not set). One lonely utm_source does not give you a clean channel. It leaves a hole beside a name.
When a Google click id can be read, GA4 takes source and medium from that auto-tagging. The utm you typed does not replace them. utm_content and utm_term still fill their own dimensions. If the click id cannot be read and any utm is on the URL, every traffic-source value comes from those parameters, and each one you left off is (not set). A half-tagged ad link is a poor fallback. Let the click id work, or write the full set.
Do not put these parameters on a link inside your own site. A new campaign on a later hit can open a new session. The person arrived from the letter. The next internal button, tagged out of habit, takes the rest of the visit away from that letter. The letter’s session count falls. The button’s count rises. The product did not gain a campaign. The credit moved.
A redirect or a short link that drops the query deletes the note before your collector sees it. The person still arrives. The visit files as direct, or as whatever the shortener’s domain looks like in the referrer. Keep the query through every hop when the metric depends on it.
The same visit, three totals
One arrival can be counted three ways, on purpose. A label can move one of them and leave the others still.
An event is this hit, carrying this label. It moves the day the link is used. A session credits the visit to the label that opened it. In GA4 the session channel group uses paid and organic last click, so a new letter changes this week’s sessions. A user is credited to the label on their first visit. That number will not move when you ship a share button on Tuesday, because those people already had a first visit.
A slide that says social drove 40 percent is using one of these and not saying which. The button can be working. The user-scoped number stays still. The metadata did its job at event and session scope. The metric on the slide was the one that does not listen to a second visit. Reading the wrong scope is how a real label looks like it had no effect.
Metadata that belongs to someone else
X and YouTube show up in screenshots because their share links wear the notes in public. They are examples of the share-stamp family, not the subject. s=46 is not forty-six people. It is a surface code. si= is a token minted when someone taps share, not a video id and not a start time. A diagram that asks you to delete si= is right about that token: the film opens without it. The same diagram overreaches when it treats every tail as the same kind of note, and when it states a join you cannot watch. If you were signed in when the link was minted, the company that minted the token can store it next to that account. A reader cannot spell a name out of the token. What a later click does is return the token with the view, so that company can connect a share to a watch. That connection builds their metric. It does not build yours.
The letter t is the cleanest warning against mixing hosts. On a video link, t=69 is seconds. On X, t= beside s= is opaque. One public reading from 2022 treats it as an encoded id of the person who shared. Another treats it as a session token. X has confirmed neither. Do not import a video host’s meaning of t into an x.com link. The host decides what the key means, and only that host’s metrics move when the key is present.
Name the note for the number you want
Write the metadata for the metric you intend to move. If you want header against footer, you need a content label. If you want Email against Paid Social, you need a medium the channel rules already know, or a rule you added yourself. If you want a cost joined to a signup, leave the click id on the landing URL. If you are only forwarding someone else’s page, the path is the thing, an instruction such as a timestamp is worth keeping, and a share token is their note to themselves.
When you read a report, ask which family and which scope. A click id, a share code, and a campaign label can sit on one URL. They increment different totals. Averaging them is how a clean chart starts lying.
The question mark is a hinge. Before it, the thing. After it, a note that chooses a bucket. Count what is inside the bucket. Do not mistake the note for the count.
Sources
URL builders, Google Analytics Help. Parameter values are case sensitive, and a missing parameter is reported as (not set). Manual tagging and auto-tagging, Google Analytics Help. When a Google click id can be read, source and medium come from auto-tagging. utm_creative_format and utm_marketing_tactic are not currently shown in reports. Campaigns and traffic sources, Google Analytics Help. A direct visit does not override an existing referrer. Default channel group, Google Analytics Help. Event, session, and first-user scopes, and which mediums land in Email. X link tracking parameters, Cybernews. Observed copy-link codes: s=19 Android, s=20 web, s=46 iPhone. X has not published the table. YouTube added si= to share links in 2023. It is widely described as a share identifier. It feeds YouTube’s own share reporting, not the analytics of the site where the link was pasted.