How to build a UTM link, then a whole campaign of them
/ on this page
You can build a UTM link by hand in about thirty seconds, and it’s worth doing that at least once before you let any tool do it for you.
True or false: building a UTM link
If your page address already has a question mark in it, your first tag joins on with an ampersand instead.
You got 0 of 5
If your page address already has a question mark in it, your first tag joins on with an ampersand instead.
If one link says spring_sale_2026 and another says Spring_Sale_2026, your report still counts them as one campaign.
For an organic social post, organic_social is a safer medium than plain social.
If you print a QR code without tags, analytics can still tell the visit came from your poster.
The best way to check your tags survived is to click the link yourself and look at the address bar.
It’s true. A link only has room for one question mark, so every tag after it joins on with an ampersand.
It’s false. Each spelling becomes its own campaign in the report, and none of them shows the real number.
It’s false. Google’s Organic Social rule doesn’t test for organic_social. With a source Google doesn’t recognize, the visit lands in Unassigned.
It’s false. A phone camera hands analytics nothing to go on, so an untagged QR code is invisible in your reports.
It’s true. Shorteners and email platforms can rewrite a link on the way. If the tags are still in the address bar when the page lands, analytics saw them.
- Claim 1 of 5If your page address already has a question mark in it, your first tag joins on with an ampersand instead.True. A link only has room for one question mark, so every tag after it joins on with an ampersand.
- Claim 2 of 5If one link says spring_sale_2026 and another says Spring_Sale_2026, your report still counts them as one campaign.False. Each spelling becomes its own campaign in the report, and none of them shows the real number.
- Claim 3 of 5For an organic social post, organic_social is a safer medium than plain social.False. Google’s Organic Social rule doesn’t test for organic_social. With a source Google doesn’t recognize, the visit lands in Unassigned.
- Claim 4 of 5If you print a QR code without tags, analytics can still tell the visit came from your poster.False. A phone camera hands analytics nothing to go on, so an untagged QR code is invisible in your reports.
- Claim 5 of 5The best way to check your tags survived is to click the link yourself and look at the address bar.True. Shorteners and email platforms can rewrite a link on the way. If the tags are still in the address bar when the page lands, analytics saw them.
A UTM link is a link you already have, plus a handful of tags. Once you can see them, a broken link is obvious at a glance, and that matters more than it sounds, because nothing else will tell you it’s broken. Not the browser, not the report, and definitely not the person who clicked.
What is a UTM link?
A UTM link is a page link carrying a few utm_ tags, and each tag answers one question about where the visit came from.
utm_source is where the link was published. utm_medium is what kind of link it was. utm_campaign is the promotion it belongs to, and utm_content is what tells two assets in the same campaign apart.
None of it changes what the person clicking sees. They land on exactly the page they expected.
Most guides stop at the anatomy. But one link is the easy case, and what decides whether your report says anything useful is a whole campaign tagged consistently, with the campaign name spelled the same on every link.
A tagged link is your page plus a list of tags
Everything before the question mark is the page. Everything after it is the list, and every item on that list is the same three things: a name, an equals sign, and your value.
An ampersand joins each new tag onto the one before it, and that’s what you need when your destination already carries a question mark of its own. Your first tag joins on with an & instead of a ?, because there is only ever one question mark in a link.
What is the query string?
The query string is the part of a link that comes after the question mark.
It’s a standard way of handing extra information to a page, and it’s much older than analytics. Search terms, filters and product options all travel there too, which is why plenty of pages already have a question mark in their address before you add a single tag.
The names have to be exact: utm_source, never utm-source and never source. Analytics matches them literally and quietly ignores anything it doesn’t recognize. Your own values are yours to choose, and the order you put them in doesn’t matter.
Two habits before you write your first link. Keep every value lowercase, because Google documents that linkedin and LinkedIn are two different values,[1] and they’ll sit in your report as two separate rows.
And never put a space inside a value. Use an underscore instead.
Those are the habits. This next one is a rule, and it bites hardest of all.
Google’s guidance is that if you set one UTM tag you should set all the relevant ones, because the missing ones turn up in your reports as (not set).[2] A half-tagged link is worse than an untagged one, and UTM best practices has the argument for why.
Build one, step by step
Six steps, and the last one is the one people skip.
- Start with the destination. The exact page you want people to land on,
httpsand all. If it already has a question mark in it, join your first tag on with&. - Set the source. Where the link is being published:
linkedin,newsletter,google, a partner’s name. - Set the medium. What kind of link it is, taken from a short list your team agreed on and doesn’t add to on the fly:
email,social,cpc,referral. Google reads this one field to decide how your traffic gets filed,[3] so it’s the one to get right. - Set the campaign. The promotion this link belongs to, spelled identically on every link in it:
spring_sale_2026. - Set the content, if the campaign has more than one asset. This is the field that names the asset, so two links in the same place don’t blur together:[1]
hero_banner,ig_story,booth_banner. - Click your own link. Open it, let the page land, and check the tags are still in the address bar. Then send it.
That’s the whole job. You can do it in a text editor, and for one link it’s genuinely faster than opening anything.
But do it eight times and something changes. Not the difficulty, the odds. Every link you type by hand is one more chance to write Spring_Sale_2026 on the one that matters, and nothing in the link, the browser or the report will ever mention that you did.
Type the values once, and let the link assemble itself.
Drop Spring_Sale_2026 into our free UTM builder and it comes back lowercase, so the link that mattered isn’t the one that broke.
Four examples: email, social, ads and print
One campaign, four places it gets published. Watch two things: what stays the same across all four, and which channel each one lands in.
The channel is the bucket your report groups a visit under, and Google picks it by reading your source and your medium together.[3] Those are the two marked in each link below.
An email newsletter
https://yoursite.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026&utm_content=header_cta
Medium is email, one of the handful of values Google’s channel rules test by name, so the visit lands in the Email channel.[3] The interesting field here is content: it separates the link in your header from the one in your footer, so you find out which position people actually click.
An organic social post
https://yoursite.com/pricing?utm_source=linkedin&utm_medium=social&utm_campaign=spring_sale_2026&utm_content=founder_post
Use plain social here, not organic_social. Google’s Organic Social rule matches either a known social site or a medium from a short fixed list, and organic_social is on neither.[3] It still lands right when Google already recognizes your source, as it does for linkedin.
But with a source Google doesn’t recognize, the visit lands in Unassigned. That’s where Analytics puts anything its channel rules don’t match.[3]
Teams pick organic_social to keep organic apart from paid in the medium report, and your source column already does that.
A paid search ad
https://yoursite.com/pricing?utm_source=google&utm_medium=cpc&utm_campaign=spring_sale_2026&utm_term=running_shoes
utm_term shows up here and nowhere else on this page, because it exists for the paid keyword. But before you hand-tag a Google Ads link at all, check whether auto-tagging is switched on.
Auto-tagging is Google Ads writing these tags for you. Where the two are used together, Google says the source, medium and other traffic-classification dimensions use the auto-tagged values, not yours.[2] So hand-tag here only where auto-tagging won’t give you what you need, and test it before you roll it out.
A QR code on a poster
https://yoursite.com/pricing?utm_source=tradeshow&utm_medium=qr&utm_campaign=spring_sale_2026&utm_content=booth_banner
This is the one where tagging isn’t really optional. A click from another website arrives carrying the address it came from, so analytics can work something out even if you tagged nothing at all. A phone camera pointed at a poster hands analytics nothing, which makes an untagged QR code completely invisible.
One catch, since almost nobody mentions it. qr isn’t a value Google’s channel rules test either, so a scan lands in Unassigned. Use qr anyway.
referral is the obvious alternative, and it does land in a named channel. But it files a poster scan next to genuine referral traffic, and once those two share a row nothing pulls them apart again.
You can relabel a channel later, with a channel group of your own. You can’t unmix the traffic.
Tag the whole campaign at once, not link by link
Spell the campaign identically on every link. Source and medium change with where each link goes out, and utm_content names the asset, so two links in the same email still show up separately.[1]
What the extra thirty seconds buys
Say the campaign drove 1,400 sessions in a week. Tagged loosely, that’s the whole report: the spring sale drove 1,400 sessions. True, and useless.
Tagged properly, the same traffic reads:
ig_storydrove 620header_ctadrove 410founder_postdrove 240booth_bannerdrove 130
Same campaign, same people, same week. Only the second version tells you what to do more of.
Say one promotion goes out across eight places: two emails, three social posts, a paid ad, a partner mention, and a QR code on a flyer. Build those eight links one at a time and they drift, because by the sixth one you’re copying and editing, not building.
One says spring_sale_2026. Another says spring-sale-2026. A third says Spring_Sale_2026, and now your one campaign is three campaigns in the report, and not one of the three shows the real number.
Keeping every spelling steady across eight links by hand is exactly where it drifts.
One campaign, eight assets, one spelling.
Our free UTM builder collects all eight links into one campaign you export in a single click, so nobody retypes a field eight times.
The link you built isn’t always the link they click
Something in the middle can rewrite your link before it reaches your page, and when that happens the tags don’t arrive.
A link shortener sends the click to its own address first, then bounces it on to yours. Most email platforms do the same thing, so they can count the click before passing it along. Whether your tags survive that trip depends entirely on the tool, and we haven’t found a vendor that publishes a list of what it keeps and what it drops.
So click it yourself. It costs nothing, and it’s the only check that proves anything. Open the finished link on your phone, let the page land, and read the address bar: if the tags are still there, analytics saw them.
Realtime looks like the faster confirmation and it isn’t, for reasons worth reading before you rely on it: where your UTMs actually show up in GA4. The address bar is the check, and a standard report can take a day or two to settle anyway.[4] Better to find a stripped link now than the morning after the send.
If the link already exists -- someone else built it, or it’s been live a month -- paste it into the checker inside the UTM builder. It reads the tags back off the link and names anything that breaks your naming rules.
Tag the next link you send
Pick the next link going anywhere, a newsletter, a social post, a QR code on a flyer, and tag it before it goes out.
Because that’s the one thing you can’t do afterwards. Once ten thousand people have clicked an untagged link, there’s no going back and tagging it: those visits are already filed, and they’re filed as nothing in particular.
In short -- thirty seconds at the build step buys you a report that names a winner. Skip it, and the campaign is over before anyone works out which part of it did the work.
- URL builders: Collect campaign data with custom URLs Google Analytics Help. Retrieved 18 October 2026.
- Traffic-source dimensions, manual tagging, and auto-tagging Google Analytics Help. Retrieved 27 August 2026.
- Default channel group Google Analytics Help. Retrieved 27 August 2026.
- Data freshness and Service Level Agreement constraints Google Analytics Help. Retrieved 27 August 2026.
Frequently asked questions
What is a UTM link?
A UTM link is a normal page link with a few labelled tags on the end, and the tags are there so your analytics can tell where the visit came from. Without them, a click from an email, a partner site and a QR code can all arrive looking much the same. Nothing changes for the person clicking. They land on exactly the page they expected, and the tags sit in the address doing their job quietly.
How do I create a UTM link?
Start with the destination page, add ?utm_source= and your value, then join utm_medium and utm_campaign on with &. Source is where the link gets published, medium is what kind of link it is, campaign is the promotion it belongs to. Add utm_content when one campaign has more than one asset. Keep every value lowercase, use underscores instead of spaces, then click the finished link yourself and check the tags are still in the address bar when the page lands.
What are UTM links used for?
Telling one traffic source apart from another after the click has already happened. Untag a link and an email click, a partner mention and a QR code can all arrive looking roughly the same, with nothing to separate them. Tagged, you can see the channel, the campaign and the individual asset behind each visit, which is what turns a session count into a decision about where to spend next.
How do UTM links work?
The tags travel in the query string, the part of a link after the question mark. Someone clicks, the browser asks for the whole address including the tags, and the analytics code on your landing page reads the utm_ values and files the visit under them. That is the entire mechanism, and it explains the usual failure: anything that rewrites the link on the way, like a redirect or a shortener, can drop the tags before analytics ever sees them.
How do I create a UTM link in Google Analytics?
You don't, and it is worth knowing that before you go looking for the feature. Google Analytics reads UTM tags, it doesn't build them. The link gets assembled somewhere else, by hand or by a builder, and Analytics only meets the tags once somebody clicks and lands on your site. Google does publish a separate campaign URL builder, but that is a different tool from the Analytics interface you run your reports in.