You send a newsletter, post on social media, or pay for an advert, and visitors arrive. Without any labelling, Google Analytics has to guess where they came from, and many of those visits can end up in vague buckets such as direct or unassigned. UTM parameters are small labels you add to the end of a link so that Google Analytics 4 (GA4) can report which campaign sent each visit.
This guide is for site owners, marketers and developers who share links off their own site. You will learn what each UTM parameter means, how to choose a naming scheme your whole team can stick to, how to build and test a tagged link, and where the values appear in GA4. You will also learn the cases where UTM tags do more harm than good.
UTM parameters only describe how a visit started. They do not make a campaign succeed, they do not change what search engines index, and they add nothing to ranking.
Short answer: UTM parameters are tags such as utm_source, utm_medium and utm_campaign added to a link's query string. When someone clicks that link, GA4 reads the tags and records the visit's source, medium and campaign. Always set those three, keep values lowercase and consistent, and never put UTM tags on links inside your own site.
Before you begin
You need a GA4 property that already receives data from your site (see GA4 setup for small business if you are not there yet), a list of the places you will share links, and a shared document where the team records its naming rules. Allow about thirty minutes for the first scheme and a few minutes per link afterwards.
The risk is low, but there is one trap: tags cannot be edited once a link has been sent, printed or scheduled. A typo in an email goes to every recipient. Decide the naming rules first, then build links.
What do the UTM parameters mean?
Google's Analytics Help lists these parameters for GA4. The prefix utm_ is simply the required start of each name.
| Parameter | What it identifies | Example value | Status |
|---|---|---|---|
utm_source |
The referrer: a site, newsletter or other origin | newsletter |
Always use |
utm_medium |
The marketing channel or medium | email |
Always use |
utm_campaign |
The product, slogan or promotion | spring_sale |
Always use |
utm_id |
A campaign or promotion ID, matching IDs you use when uploading campaign data | sp26 |
Strongly recommended if you use any tag |
utm_source_platform |
The platform that directs traffic, such as Search Ads 360 | search_ads_360 |
Strongly recommended for ad platforms |
utm_term |
The paid keyword | running_shoes |
Optional |
utm_content |
Tells apart creatives or links, such as two buttons in one email | header_button |
Optional |
utm_creative_format |
The creative type | video |
Optional; Google notes it is not currently reported |
utm_marketing_tactic |
The targeting criteria | remarketing |
Optional; Google notes it is not currently reported |
Google's page says that if you set any UTM parameter you should set all the relevant ones. Missing values show as "(not set)" in reports. For a simple email or social link, the three required parameters plus utm_content when you have several links in one message is usually enough.
A full link looks like this:
https://example.com/spring-sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale&utm_content=header_button
The parts after the question mark are pairs joined by = and separated by &. Order does not matter. If the destination already has a query string, join your tags with & instead of adding a second ?. If the URL has a #fragment, the tags must come before the #.
Step-by-step instructions
Step 1: Agree a naming scheme before you build anything
Values are case sensitive. Google's page says utm_source=google is different from utm_source=Google, and its best-practice notes say the same about Meta and meta. Two spellings split one source into two rows in every report. The simplest rule is to use lowercase everywhere, with underscores between words and no spaces.
A scheme small teams can follow:
- Source is where the link lives:
newsletter,facebook,linkedin,partner_acme. - Medium is the type of channel, from a short fixed list:
email,social,cpc,referral,affiliate,sms. - Campaign names the promotion:
spring_sale,product_launch_2026. Keep a year or quarter in it if you reuse campaign ideas. - Content separates variants:
header_button,footer_link,video_a.
The medium list matters more than it looks, as Step 5 explains, because GA4 sorts visits into channel groups using it.
What success looks like: A one-page document with allowed sources, the fixed medium list and an example for each, shared with everyone who posts links.
Step 2: Build the link
Google offers a Campaign URL Builder at ga-dev-tools.google, where you fill in the fields and copy the link. You can also use a spreadsheet with a formula that joins the base URL and the tags, which makes it easy to keep a record. A row can look like this:
| Base URL | Source | Medium | Campaign | Content | Final link |
|---|---|---|---|---|---|
https://example.com/spring-sale |
newsletter |
email |
spring_sale |
header_button |
the joined link from the example above |
Use the real, final destination URL: the HTTPS version, on the host you want visitors to land on. If a redirect sits between the link and the page, the next step tells you how to check it keeps the tags.
What success looks like: The link has no spaces, uses lowercase values, and loads the intended page when pasted into a browser.
Step 3: Test the link before you send it
Open the tagged link in a private window and check three things:
- The page loads, and the address bar still shows the
utm_tags after any redirects. A redirect fromhttptohttpsor fromwwwto the bare domain should pass the query string along. If your server drops it, the tags are lost before GA4 sees them. See Redirect Chains, Loops, and Incorrect HTTP Status Codes for how to inspect a redirect. - If you use a link shortener, follow the short link and confirm the final address contains the tags.
- The page is the one you meant to promote, not a 404.
Next, confirm GA4 received the visit. Google's DebugView lists events collected from devices that have debug mode on, and Tag Assistant can switch debug mode on for your own browser. Google's page warns that DebugView shows limited attribution and recommends the Acquisition reports for accurate attribution, so use DebugView only to confirm that events arrive. To confirm the campaign values, look for them in the Traffic acquisition report after the data has processed.
What success looks like: The tagged visit appears in GA4 with the source, medium and campaign you set.
Step 4: Find your campaigns in GA4 reports
In GA4, open the Acquisition reports and choose the Traffic acquisition report. According to Google's help, you can view Session source/medium, Session medium, Session source and Session campaign there. Add or change the primary dimension to the one you want.
Two facts help when you read the data:
- UTM parameters are left out of the "Landing page + query string" and "Page path + query string" dimensions. Their values appear in the Page location dimension instead.
- A session's attribution is decided when the session starts. Google says the
session_startevent carries the gclid, UTM parameters and referrer. Sessions use a non-direct last-click model with a lookback window of 90 days by default, so a later direct visit can be credited to the earlier non-direct source.
What success looks like: You can filter a report to one campaign and see sessions that match the links you actually sent.
Step 5: Check that visits land in the right channel
GA4 puts every session into a default channel group using rules on source and medium. Google's channel definitions include these:
| Channel | How a session matches (summarised from Google's page) |
|---|---|
Source or medium is an email variant such as email |
|
| Paid Search | Source is on a search-site list and medium matches a paid pattern, which includes values containing cp, plus ppc, retargeting and values starting paid |
| Organic Social | Source is on a social-site list, or medium is a social term such as social or social-media |
| Affiliates | Medium is affiliate |
| SMS | Source or medium is sms |
| Unassigned | Used when no other channel rule matches |
This is why a made-up medium such as newsletter-blast can end up in Unassigned while email lands in Email. Choose your medium values from the list GA4 understands, and put anything creative in utm_campaign or utm_content instead.
What success looks like: Each campaign you ran sits in the channel you expected, and Unassigned is not growing with your own links.
Step 6: Record every link you send
Add each final link to your spreadsheet with the date, the owner and where it was posted. When a report later shows spring_sale split into two spellings, the record tells you which message used which. Review the sheet once a quarter and retire values nobody uses.
What success looks like: Any campaign value in GA4 can be traced to a row in your sheet.
When should you not use UTM parameters?
UTM tags describe traffic that arrives from outside. Google's help describes them as tags added to destination URLs so that Analytics can attribute traffic to campaigns, and it does not tell you to tag internal links. Treat the following as this guide's advice, not a Google rule:
- Links between your own pages. A tag on an internal link claims your own site as a campaign source. The Google pages checked for this guide do not describe exactly how GA4 handles that, and third-party write-ups disagree, so avoid the risk. To measure clicks on a banner or menu item, send an event instead. See GA4 key events and the Google Tag Manager setup guide.
- Organic search and unpaid links you do not control. Other sites link to you without tags, and GA4 classifies those from the referrer. Do not ask other sites to add tags to editorial links.
- Links that carry personal data. Never put email addresses, names or order numbers in a UTM value. The values appear in your reports and in URLs that are logged and shared.
Do UTM parameters create duplicate pages for search engines?
The tagged address serves the same content as the plain one, so it is a duplicate URL. Google's page on consolidating duplicate URLs uses a tracking-parameter address as its example and explains that you can signal a preferred URL, with redirects, rel="canonical" or sitemap inclusion. Google decides the final choice, so the signal is a hint. A self-referencing canonical on the clean page helps, and your sitemap should list only clean URLs. For the wider topic read Do URL parameters hurt SEO? and Fix Duplicate URLs and Incorrect Canonical Tags.
Final verification checklist
- A written naming scheme exists with lowercase values and a fixed list of medium values.
- Every campaign link sets
utm_source,utm_mediumandutm_campaign. - Links were opened in a private window and still carry their tags after redirects.
- The tagged visit appears in the Traffic acquisition report with the right source, medium and campaign.
- Visits sit in the expected default channel, not in Unassigned.
- No internal link on your site carries UTM tags.
- No personal data appears in any UTM value.
- Each sent link is recorded in the shared sheet.
Common mistakes to avoid
- Mixed capitalisation.
Emailandemailbecome two rows. Fix: lowercase only, and a shared list of allowed values. - Inventing medium names. GA4 groups by medium, so
social_postornewslettermay fall into Unassigned. Fix: use values such asemail,social,cpc. - Tagging internal links. Fix: use events to measure on-site clicks.
- Leaving out
utm_campaign. Source and medium alone cannot tell two promotions apart. Fix: always set all three required parameters. - A second question mark.
?a=1?utm_source=xbreaks the query string. Fix: join with&. - Tags placed after a
#. Browsers do not send the fragment to the server. Fix: put tags before the fragment. - Redirects that drop the query string. Fix: test the final address and correct the redirect rule.
- Using personal data in values. Fix: use generic labels only.
Frequently asked questions
Are UTM parameters case sensitive?
Yes. Google's help says utm_source=google and utm_source=Google are different values. Use lowercase for everything so reports do not split.
Which UTM parameters are required?
Google says to always use utm_source, utm_medium and utm_campaign when you add tags. The others are optional, though Google recommends setting utm_id and utm_source_platform too if you use any tag, especially for ad platforms.
Do UTM parameters hurt SEO?
This guide does not claim any ranking effect either way. They create duplicate addresses, which you handle with canonical signals and clean sitemaps. Keep tagged links out of your internal navigation.
Why does my campaign show as Unassigned or (not set)?
Unassigned means no channel rule matched the session's source and medium. Check that the medium is a value GA4 recognises. A "(not set)" value appears when a parameter was missing from the link.
Can I add UTM tags to a link after I have sent it?
No. The tags are part of the address in the message. Send a corrected link next time, and record the mistake in your sheet so the report is read correctly.
Related guides
- GA4 Key Events: Mark, Count and Verify the Actions That Matter
- GA4 Search Console Integration: Link Data Without Double Counting
- Do URL parameters hurt SEO?
- Fix Duplicate URLs and Incorrect Canonical Tags
- Google Tag Manager Setup Guide
Official references
- https://support.google.com/analytics/answer/10917952
- https://ga-dev-tools.google/ga4/campaign-url-builder/
- https://support.google.com/analytics/answer/9756891
- https://support.google.com/analytics/answer/9191807
- https://support.google.com/analytics/answer/7201382
- https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
Next step: Try the free website sample to see how your own site does on a few of these checks. This guide provides technical information, not a guarantee of rankings, traffic or index inclusion.