The short answer
Four parameters, four different jobs:
utm_sourceis the specific place the click came from.reddit,producthunt, the name of your newsletter.utm_mediumis what kind of place that is.social,email,referral.utm_campaignis which push the link belongs to.launch_week.utm_contentis which of two links inside that same push.bio_link.
Nothing rejects a bad value in any of these fields. What differs is how closely Google reads them, and utm_medium is where a wrong value does the most damage.
If you have not met these before, start with what a UTM parameter is and come back. This guide assumes you know they exist and just want to know which value goes where.
utm_source is the specific place
Think of utm_source as the proper noun. Not "a forum" but reddit. Not "a newsletter" but the actual list you sent from.
Nothing rejects a typo. Type utm_source=redit and your analytics records a source called redit, reports it faithfully, and never mentions that you meant something else. So the rule that matters is spelling it the same way every time, which is why capitals are worth the discipline. If you would rather not rely on remembering, a utm source generator that forces lowercase removes the decision entirely.
utm_medium is the one Google actually reads
Here is the part almost nobody explains. Google Analytics reads your tags to decide which channel group a visit belongs to, and utm_medium is the tag it leans on hardest. Your value gets matched against a fixed set of patterns.
These are Google's own rules, quoted from its Default channel group documentation:
- Email:
Source = email|e-mail|e_mail|e mail OR Medium = email|e-mail|e_mail|e mail - Organic Social:
Source matches a regex list of social sites OR Medium is one of ("social", "social-network", "social-media", "sm", "social network", "social media") - Referral:
Medium is one of ("referral", "app", or "link") - Paid Search:
Source matches a list of search sites AND Medium matches regex ^(.*cp.*|ppc|retargeting|paid.*)$
Read those rules closely and you will notice utm_source appears in three of them. Google keeps its own lists of known social and search sites, so a source like facebook can land a visit in Organic Social on its own. Campaign name matters in a couple of narrow cases too. Only utm_content sits completely outside this machinery.
So why single out medium? Because it is the one where your invented value has nothing to accidentally match. A source like producthunt either is or is not on a Google list, and either way it is recorded. A medium like discord matches no rule at all, and the visit does not go into a sensible bucket. It goes into a bucket called Unassigned. Google is blunt about what that means: "Unassigned is the value Analytics uses when there are no other channel rules that match the event data."
So the traffic still arrives. The people still land on your page. They just stop appearing in the channel report you actually open.
The trap worth knowing: utm_medium=newsletter looks obviously correct, and it is not in Google's Email rule. Nor is utm_medium=dm, or utm_medium=discord, or any other sensible-sounding word you invent on the spot. Put email in the medium and the newsletter's name in the source.
One caveat, because plenty of guides state this and Google's page does not: that documentation does not say the rules run in a priority order, so do not assume a first match wins if a value could satisfy two rules.
utm_campaign is which push
utm_campaign groups one effort across all the places you put it. Its job is to survive the fact that a single launch gets posted in five different spots.
Post your launch to a subreddit, to Product Hunt, and to your newsletter, and that is one campaign with three sources. Not three campaigns. Give all three links utm_campaign=launch_week and your reports can answer both "how did the launch go" and "which of the three actually worked" from the same data.
utm_content tells two links apart
utm_content only earns its place when the same campaign and the same source carry more than one link. The bio link and the pinned post. Two buttons in one email. The text link and the image link in the same post.
If you share one link per post, leave it empty. An always-filled field you never read is not better data, and a report split across bio_link and pinned when you only ever used one of them is just noise you have to mentally undo later.
One launch, filled in properly
Here is the same launch, tagged across a normal week. Notice that utm_campaign never changes, utm_source changes every time, and utm_medium stays inside the values Google recognises.
| Where you posted it | utm_source | utm_medium | utm_campaign | utm_content |
|---|---|---|---|---|
| A subreddit | social | launch_week | leave empty | |
| Product Hunt | producthunt | referral | launch_week | leave empty |
| Your newsletter | newsletter | launch_week | leave empty | |
| Cold email to one founder | cold_email | launch_week | outreach | |
| Your X bio and a pinned post | x | social | launch_week | bio_link / pinned |
The newsletter row and the cold email row both land in Google's Email channel, because both use email as the medium. That is correct, and it is exactly why source matters. The channel tells you it was email. The source tells you which email.
Building these by hand gets tedious fast, and typos in utm_source are silent. Our free UTM builder fills the medium for you from the channel you pick, so the value already matches Google's rules before you paste the link anywhere.
That table fills in all five columns, which is more than most people bother with in practice.
Which UTM fields do you actually fill in?
What happens when you get one wrong
None of these mistakes announce themselves. Your reports still load, still show numbers, and still look fine. That is what makes them expensive.
You invent a medium. You tag a Discord drop with utm_medium=discord because that is where it went. The visits arrive, and land in Unassigned. Your channel report shows a gap, and the obvious conclusion, that Discord did not work, is the opposite of what happened.
You swap source and medium. utm_source=social and utm_medium=reddit is backwards, and nothing rejects it. Now your reports claim you have a channel type called reddit and a specific place called social. Six weeks later you cannot reconstruct what any of it meant.
You put everything in campaign. Tag each link utm_campaign=reddit_launch_post_march and every link becomes its own campaign. The campaign view turns into one row per link, which is the exact grouping the field exists to provide.
The pattern in all three is the same. You do not get an error. You get a confident-looking report that answers a question you did not ask.
What none of these four can tell you
Getting all four right buys you clean channel data. It does not tell you which person clicked, or what they did after they landed.
For a solo builder that second question is usually the one that matters. Knowing eleven people came from reddit on social during launch_week is genuinely useful. Knowing that one of them was the founder who replied to your email, and that they read the pricing page twice and never signed up, is the thing that changes what you do next.
Getting all four right tells you eleven people came from reddit. It still will not tell you which eleven, or that one of them read your pricing page twice and left. ScoutVibe gives you a link per community or per person and shows you the path each visitor actually took. The free tier covers your next launch.
Try ScoutVibeFAQ
What is the actual difference between the four parameters, and which value goes in which?
utm_source is the specific place a click came from, like reddit. utm_medium is what kind of place that is, like social. utm_campaign is the push the link belongs to, like launch_week. utm_content separates two links inside that same push, like bio_link. Source and campaign are the two you will use on almost every link.
Which values am I free to invent, and which does Google expect exactly?
Every field accepts whatever you type, so none of them are validated in the sense of being rejected. But Google reads utm_source, utm_medium and utm_campaign when assigning a channel group, and only utm_content sits outside that entirely. Medium is the one to get exactly right, because email, social and referral match Google's documented patterns while an invented value like newsletter or discord matches nothing and lands in Unassigned. Source is freer in practice, since Google already recognises common site names.
What happens to my data when I get one wrong?
Nothing visibly breaks, which is the problem. An unrecognised medium sends the visit to Unassigned, so it is missing from the channel report even though the traffic arrived. Swapped source and medium produce reports that read backwards. Over-specific campaign names give you one row per link instead of one row per push. In every case the report still looks normal.