You already know roughly where your traffic comes from. The problem is "roughly." A customer books an appointment, and you cannot say whether it was the newsletter, the Instagram post, the Google ad, or the Yelp link that did the work. So when it is time to decide where the next dollar goes, you are guessing. UTM tracking turns that guess into a number.
This guide walks through the whole thing: what the five UTM parameters are, how to name them so your data stays clean, how to build tagged links with Google's free tool, how to keep a team consistent, and where the results land in Google Analytics 4. No code, no paid software.
A UTM is just a tag you add to the end of a link so your analytics can tell exactly where a click came from. Add utm_source, utm_medium, and utm_campaign to every link you share outside your own website, keep every value lowercase with no spaces, write your naming rules down, and read the results in GA4's Traffic acquisition report. The hard part is not the tagging. It is being consistent, every single time.
The five UTM parameters, in plain English
UTM stands for Urchin Tracking Module, a name left over from the analytics company Google bought in 2005. Ignore the history. What matters is that a UTM is a small piece of text added to the end of a URL that tells your analytics tool where the visitor came from. They look like this:
https://yoursite.com/offer?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale
Everything after the ? is the tracking. The page still loads normally. The visitor sees the offer. Behind the scenes, Google Analytics reads those tags and records that this session came from your newsletter, through email, as part of your spring sale. There are five parameters. Three do almost all the work.
- utm_source: the specific place the traffic came from.
google,facebook,yelp, or the name of your newsletter. Think "who sent them." - utm_medium: the type of channel.
cpcfor paid search,paid_socialfor paid social,emailfor email. Think "what kind of link was it." This is the one GA4 uses to sort traffic into channels, so it matters more than people expect. - utm_campaign: the specific promotion or initiative.
spring-sale,black-friday-2026,new-patient-offer. Think "which effort this link belongs to." - utm_term: the paid keyword. Mostly used in paid search, and usually filled in automatically by the ad platform. You will rarely set this by hand.
- utm_content: used to tell two versions of the same link apart. If your email has a top button and a bottom text link,
top-buttonversustext-linkin utm_content tells you which one people actually clicked.
Google Analytics 4 requires source, medium, and campaign to file traffic correctly. Leave any of the three off and GA4 will often dump the visit into "unassigned," which is the data equivalent of a shrug. There is also a newer optional field, utm_id, that GA4 uses to connect a link to imported campaign cost data. Most small and mid-sized businesses can skip it until they are importing ad spend into GA4.
You do not tag everything. Google Ads and Meta ads tag their own clicks automatically, and your analytics already understands them. UTMs are for the links you place by hand: email, organic social posts, your Google Business Profile, newsletters, partner and influencer links, QR codes, and anything printed. More on this in the common mistakes below.
Pick a naming convention and lock it
This is the step everyone skips, and it is the only one that actually decides whether UTM tracking works for you. Garbage in, garbage out. The tags themselves are trivial to add. Staying consistent about what you type into them is the whole game.
Here is why. UTM values are case sensitive and literal. To Google Analytics, Email, email, and e-mail are three unrelated things. It will not merge them for you. It files each one as its own row and splits your results three ways. Multiply that across a team of people each inventing their own spelling, and your reports become fiction.
Earlier this year we audited a client of ours whose owned-channel traffic was quietly scattered across four different spellings of the same medium. The email channel alone showed up as email, campaign, flow, and a blank value, depending on who built the link and when. Their newsletter looked like it was underperforming. It was not. The credit was just split across four buckets that no report added back together. We did not fix that with a new tool. We fixed it with a one-page naming sheet and an afternoon of cleanup.
The rules that keep data clean
These four are not style preferences. Each one prevents a specific way reporting breaks.
- Everything lowercase. Always. No capital letters, ever. This single rule prevents the most common split we see.
- No spaces. Use a hyphen inside a value:
black-friday, notblack friday. Spaces get mangled into%20in the URL and read badly in reports. - One approved value per thing. Decide that paid search is always
cpcand email is alwaysemail, then never spell them another way. Pick your words once and lock them. - Describe the channel, not the settings. Your campaign name should say which effort the link belongs to, not encode the bid or the audience. Keep it human-readable:
new-patient-offertells you more in six months thanq2-camp-v3.
A starter vocabulary you can copy
The source value is the specific platform or sender. The medium value is the one to standardize hardest, because GA4 reads it to decide which channel a visit belongs to. These medium values line up with GA4's default channel definitions, so paid search lands in Paid Search, paid social lands in Paid Social, and email lands in Email instead of falling into "unassigned."
| Channel | utm_source (examples) | utm_medium |
|---|---|---|
| Paid search | google, bing | cpc |
| Paid social | facebook, instagram, tiktok, linkedin | paid_social |
newsletter, klaviyo, mailchimp | email | |
| SMS / text | your SMS tool, e.g. klaviyo | sms |
| Organic social post | facebook, instagram, linkedin | social |
| Partner / referral link | the partner's name, e.g. chamber-of-commerce | referral |
| Display / banner buy | the site or vendor name | display |
These exact words are a convention, not a rule from Google. Plenty of teams label paid search paid_search or just search instead of cpc, and that works fine. What matters is that you pick one value per channel, use it every single time, and make sure it maps to the GA4 channel you expect. The spelling is your choice. The consistency is not.
Notice the one rule that outranks personal taste: once a value is live, you do not change it. Renaming cpc to ppc halfway through the year does not clean up your data. It fragments your history into a before and an after that no report reconciles. Decide, write it down, and leave it alone.
For Google Ads and Meta, leave the platform's own auto-tagging on and let it feed Google Analytics. You generally should not hand-build a UTM link per ad. If you genuinely need manual UTMs on paid search so another tool can read them, set them once at the account level through the Final URL suffix field, not link by link. If getting agency-grade access and tracking set up is the actual blocker, our guide on connecting your ad accounts to an agency manager covers the clean way to do it.
Build your tagged URLs with the Campaign URL Builder
You never have to type UTM parameters by hand. Google runs a free tool, the Campaign URL Builder, that assembles the link for you and formats the ? and & correctly. You can open it at ga-dev-tools.google/campaign-url-builder.
Step 1: Enter your destination URL
In the top field, labeled Website URL, paste the page you want the link to land on. Use the real final page, like your booking page or a specific offer, not just your homepage. Send people where you want them to act.
Step 2: Fill in source, medium, and campaign
Fill the three required fields, pulling each value straight from your naming convention so you never improvise:
- Campaign source becomes
utm_source, for examplenewsletter. - Campaign medium becomes
utm_medium, for exampleemail. - Campaign name becomes
utm_campaign, for examplespring-sale.
Leave Campaign term and Campaign content blank unless you are running an A/B test or distinguishing two links in the same message. The tool also shows a Campaign ID field, which maps to utm_id. Skip it unless you are importing cost data into GA4.
Step 3: Copy the generated link
As you type, the tool builds the full tagged URL at the bottom of the page under Generated URL. When it looks right, click the copy button. That is the link you put in your email, your post, or your partner's site. For social bios or printed material, run it through a link shortener afterward so it looks clean, which also makes QR codes smaller and easier to scan.
Build the link, then actually click it before you send it anywhere. Open it in a browser and look at the address bar. Every parameter should be there, spelled exactly the way your convention says, with one ? and the rest joined by &. Catching a typo now is thirty seconds. Catching it after it went to your whole list is a hole in your data you cannot backfill.
Keep a shared UTM spreadsheet
The Campaign URL Builder makes one link at a time and remembers nothing. The moment a second person starts tagging links, you need a shared record, or you are right back to four spellings of "email." A single spreadsheet is the cheapest governance tool there is.
Make one sheet, keep it in a shared drive, and give it a column for each part of the link:
- Date the link was created
- Who made it
- Destination URL
- utm_source, utm_medium, utm_campaign, and when used, utm_content
- Final tagged URL (paste the one the builder generated)
- Notes: where the link ran, so you remember in six months
Two habits make the sheet do real work. First, put your approved source and medium values in a dropdown list on those columns so nobody can free-type a new spelling. That one move enforces your whole convention automatically. Second, add a tab at the top of the sheet that lists the locked vocabulary, so a new hire or a freelancer can see the rules without asking. We hand clients a version of exactly this sheet on day one, because it is faster than correcting tags for a quarter and then cleaning them up.
Where the data shows up in Google Analytics 4
Tagging links is only half the point. The payoff is reading what they did. In GA4, your UTM data lives in the Traffic acquisition report. If you have not set up GA4 yet, our Google marketing suite setup guide walks through creating a property from scratch.
Step 1: Open the Traffic acquisition report
In Google Analytics, go to Reports in the left menu, then Acquisition, then Traffic acquisition. This report groups every session by where it came from. By default it shows the Session default channel group, which is the broad bucket your medium values feed into: Paid Search, Paid Social, Email, Organic Social, and so on.
Step 2: Switch the dimension to see your campaigns
Click the dropdown on the primary dimension, currently set to Session default channel group, and choose Session campaign to see your utm_campaign names, or Session source / medium to see the exact source and medium pairs you set. This is where a tagged spring-sale link finally appears as its own line with its own sessions, conversions, and revenue next to it.
Step 3: Add a second dimension for detail
To see two levels at once, set Session source / medium as the primary dimension, then click the blue plus icon next to it and add Session campaign as a secondary dimension. Now you can read, in one table, that newsletter / email drove the spring sale and how many of those sessions converted. Give fresh tags 24 to 48 hours to appear here, though you can confirm a brand-new link immediately in the Realtime report.
If a chunk of your traffic shows up as "unassigned," that is almost always a UTM problem: a link missing one of the three required parameters, or a medium value GA4 does not recognize. It is a useful alarm. A rising "unassigned" line usually means someone tagged a link off-convention.
How the pieces fit together
Each step feeds the next, and the chain is only as strong as its weakest link:
- The naming convention is your source of truth. Everything downstream inherits whatever discipline, or sloppiness, lives here.
- The Campaign URL Builder is the assembler. It turns your chosen values into a correctly formatted link, but it will faithfully build a bad link out of bad values, so the convention has to come first.
- The spreadsheet is the enforcer. It is what keeps the convention alive once more than one person is tagging, through dropdowns and a visible rulebook.
- Google Analytics 4 is the reader. It only ever shows you what you tagged, which is why a quiet "unassigned" number is really a message from your own process.
Get the first one right and the rest mostly take care of themselves. Get it wrong and no amount of reporting polish will save you.
Common mistakes
These are the five we untangle most often in audits. Every one is cheap to avoid and expensive to fix after the fact.
- Tagging your own internal links. This is the big one. A UTM tells Google Analytics a new session began from an outside source. Put one on a link between pages of your own site, like a menu item or a "Shop now" button, and you restart the visitor's session and wipe out the real source that brought them in. One home-services client had tagged their navigation, and their genuine Google traffic looked like it was collapsing while a phantom "header" campaign swallowed the credit. Only ever tag links that live somewhere other than your website.
- Inconsistent casing and spelling.
Facebookandfacebookare two different sources to GA4. So arepaid-socialandpaid_social. Lock the spelling, keep it lowercase, and use dropdowns in your sheet so no one can drift. - Manually tagging Google and Meta ad traffic. These platforms auto-tag their own clicks. Layering hand-built UTMs on top can double count, override the platform's richer data, or just contradict it. Leave auto-tagging on, and reserve manual UTMs for channels that do not tag themselves.
- Changing values mid-campaign. Renaming a source or medium after links are live does not tidy your data, it splits it. Choose the value once and keep it for the life of the campaign.
- Only tagging some channels. If you tag email but not your partner links or your Google Business Profile, those visits fall into generic buckets and you still cannot compare channels fairly. Tag every external link, or you are back to guessing on the ones you skipped.
Frequently asked questions
Usually not by hand. Google Ads auto-tagging adds a gclid to every click and Meta tags its own traffic, and both feed their numbers into Google Analytics automatically. Manual UTMs are for channels that do not tag themselves: email, organic social posts, newsletters, partner and influencer links, QR codes, and offline campaigns. If you do need manual tags on paid search for a non-Google tool, set them at the account level through the Final URL suffix rather than building a link per ad.
Yes. UTM values are case sensitive, so Email, email, and EMAIL are three different values and Google Analytics files them as three separate rows. Keep every value lowercase, always. This single rule prevents most of the fragmented reporting we find in audits.
utm_source is the specific place the traffic came from, like google, facebook, or your newsletter name. utm_medium is the type of channel, like cpc for paid search, paid_social for paid social, or email. GA4 uses the medium value to sort traffic into default channel groups, so keeping medium consistent is what makes your channel report accurate.
No. Never put UTMs on internal links. A UTM tells Google Analytics a new session started from an outside source, so tagging your own menu or buttons restarts the session, erases the real source that brought the visitor in, and inflates a fake campaign. Only tag links that live somewhere other than your own site.
Tagged traffic usually appears in the GA4 Realtime report within minutes and in the standard Traffic acquisition report within 24 to 48 hours. Always click one of your own tagged links first and confirm the parameters arrive correctly before you send a campaign to your whole list.
Sources
- Google Analytics Help: Collect campaign data with custom URLs (the UTM parameters GA4 recognizes, and the required source, medium, and campaign)
- Google: Campaign URL Builder (the free tool for assembling tagged links)
- Google Analytics Help: Default channel group (which medium values map to Paid Search, Paid Social, Email, and the rest)
- Google Analytics Help: Traffic acquisition report (where tagged traffic shows up and how to read it by Session source / medium and campaign)
- Google Analytics Help: Analytics dimensions and metrics (definitions of Session campaign and Session source / medium)