UTM parameters are tags you add to the end of a URL, such as ?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026, so your analytics tool can tell which source, channel and campaign sent each visitor. There are five classic parameters, and three of them belong on every tagged link. This guide explains each one, gives naming rules and ready-to-copy examples, and shows how to keep tagged links short.
How UTM parameters work
UTM stands for Urchin Tracking Module, after the analytics product that became Google Analytics. The tags are ordinary query parameters: they do not change what the page shows. When a visitor lands, your analytics script reads them and files the visit under the right source, medium and campaign.
A tagged URL has three parts:
- The page:
https://example.com/spring-sale - A question mark that starts the query string:
? - The tags, joined by ampersands:
utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026
Put together:
https://example.com/spring-sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026
Google Analytics and many other analytics tools read UTM tags. The definitions and examples in this guide follow Google’s documentation.
The 5 UTM parameters explained
| Parameter | What it answers | Example values | When to use it |
|---|---|---|---|
utm_source |
Who sent the visit? | newsletter, linkedin, google |
Every tagged link |
utm_medium |
What kind of channel? | email, social, cpc, referral |
Every tagged link |
utm_campaign |
Which campaign or promotion? | spring_sale_2026, product_launch |
Every tagged link |
utm_term |
Which paid keyword? | linen_shirts |
Paid search ads |
utm_content |
Which creative or placement? | hero_button, footer_link |
Several links in the same message or ad |
Google’s help page on URL builders says you should always use utm_source, utm_medium and utm_campaign, and that missing parameters show up as “(not set)” in reports. The same page lists newer optional parameters that Google Analytics recognizes: utm_id for a campaign ID, utm_source_platform, utm_creative_format and utm_marketing_tactic. As of October 2026, Google notes that the last two are not currently reported in Google Analytics properties.
UTM naming conventions that keep reports clean
Analytics tools group visits by the exact text of each value. Small differences split one campaign into several rows that you then have to add up by hand. These rules prevent that:
- Use lowercase only. Values are case sensitive. Google’s own example:
utm_source=googleis different fromutm_source=Google. - Pick one separator. Use underscores or dashes, not both, and never spaces. A space turns into
%20or+in the URL and is easy to get wrong. - Use standard mediums. Google Analytics assigns visits to default channels partly from the medium. For example,
emailgoes to Email,socialto Organic Social,referralto Referral andaffiliateto Affiliates. A paid medium such ascpc, or anything starting withpaid, counts as Paid Social when the source is a social network and as Paid Search when it is a search engine. The full rules are in Google’s default channel group documentation. - Name campaigns so they sort. A pattern like
2026-10_product_launchkeeps campaigns in date order in every report. - Write it down. Keep a shared list of allowed sources, mediums and campaign names. With a Blinkhop account (early access), you can save UTM presets so the whole team reuses the same values.
- Never put personal data in tags. Email addresses or names in a URL end up in analytics reports, browser histories and server logs.
| Instead of | Use |
|---|---|
utm_source=Facebook, fb or facebook.com |
utm_source=facebook |
utm_medium=E-mail |
utm_medium=email |
utm_campaign= |
utm_campaign= |
UTM examples for email, social and ads
Each example below uses https://example.com/spring-sale as the landing page. Swap in your own values, or let the free UTM builder assemble the URL for you.
Email newsletter
Give each link in the same email its own utm_content, so you can see which one people click:
https://example.com/spring-sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026&utm_content=hero_button
https://example.com/spring-sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026&utm_content=footer_link
Social media posts
Use the network as the source and social as the medium for unpaid posts and profile links:
https://example.com/spring-sale?utm_source=linkedin&utm_medium=social&utm_campaign=spring_sale_2026&utm_content=carousel_post
https://example.com/spring-sale?utm_source=instagram&utm_medium=social&utm_campaign=spring_sale_2026&utm_content=bio_link
Paid ads
Use a paid medium so the visit lands in a paid channel, and utm_term for search keywords:
https://example.com/spring-sale?utm_source=linkedin&utm_medium=paid_social&utm_campaign=spring_sale_2026&utm_content=video_a
https://example.com/spring-sale?utm_source=bing&utm_medium=cpc&utm_campaign=spring_sale_2026&utm_term=linen_shirts
Some ad platforms add their own tracking parameters automatically. Check how those interact with manual UTM tags in your analytics settings before you use both on the same ads.
Print and QR codes
Tag printed links too, then shorten them so the QR code stays simple:
https://example.com/spring-sale?utm_source=flyer&utm_medium=print&utm_campaign=spring_sale_2026
Google’s default channel rules have no channel for print, so these visits appear as “Unassigned” unless you create a custom channel group for offline campaigns.
Plan a campaign’s links in one table
Before a launch, list every place a link will appear and decide its tags in advance. A plan like this takes a few minutes and prevents messy reports later:
| Placement | utm_source | utm_medium | utm_content | Short link |
|---|---|---|---|---|
| Newsletter, main button | newsletter |
email |
hero_button |
zou.sh/spring-news |
| Newsletter, footer | newsletter |
email |
footer_link |
zou.sh/ |
| LinkedIn post | linkedin |
social |
carousel_post |
zou.sh/spring-li |
| Instagram profile | instagram |
social |
bio_link |
zou.sh/spring-ig |
| Printed flyer | flyer |
print |
front_cover |
zou.sh/spring-flyer |
Every row shares utm_campaign=spring_sale_2026, so the campaign report adds them up, while the source, medium and content columns let you compare placements. Keep the table next to your campaign brief and add a row for each new placement instead of improvising tags at the last minute.
Common UTM mistakes
- Tagging internal links. UTM tags are for links that bring people in from elsewhere. A tagged link between your own pages replaces the real source of the visit with your tag.
- Inconsistent spelling.
Facebook,facebookandfbbecome three different sources. - Leaving out the source or the medium. Missing values show up as “(not set)” and the visit may land in the wrong channel.
- Adding a second question mark. If the URL already has a query string, such as
?color=blue, join the tags with an ampersand:?color=blue&utm_source=newsletter. - Putting tags after a
#. Everything after#is a fragment, which browsers do not send to the server, and most analytics tools read UTM tags from the query string only. Place the tags before the#. - Losing tags in a redirect. If your landing page redirects and drops the query string, the tags never reach analytics. Open the tagged URL and check the address bar once the page has loaded.
- Reusing one tagged link everywhere. If the newsletter and the social post share a link, you cannot compare them. Change at least
utm_contentorutm_source. - Sharing long tagged URLs as they are. They are hard to read, easy to break when someone edits them and they clutter posts. Shorten them.
Short links and UTM parameters
A short link is the simplest way to share a tagged URL. The tags stay in the destination, so analytics receives them on every click, while people only see the short address.
- Build the tagged URL, for example with the UTM builder.
- Shorten it on blinkhop.com, through the API or with your AI assistant.
- Share the short link, for example
https://zou.sh/spring-news.
From a terminal, one request does it. The ?format=text option returns only the short URL, and --data-urlencode keeps the ampersands inside the tagged URL intact:
curl -s "https://api.blinkhop.com/v1/links?format=text" \
--data-urlencode "url=https://example.com/spring-sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026&utm_content=hero_button"
Three details make this work well:
- One short link per placement. Each tagged URL is different, so each gets its own short link, and you can compare placements both in analytics and in Blinkhop’s click counts.
- Same URL, same link. Shortening the exact same tagged URL again returns the existing short link instead of creating a duplicate.
- Two views of the same traffic. Blinkhop counts clicks on the short link per day, country, referrer domain and device type, without cookies, and leaves out bots and link previews. Your analytics tool counts visits on your site. The numbers measure different steps, so expect small differences. Read more about privacy-first click analytics.
With an account (early access), saved UTM presets let you apply the same tags every time you shorten. Learn more on the UTM feature page.
Key takeaways
- UTM parameters are query tags that tell analytics where a visit came from.
- Always set
utm_source,utm_mediumandutm_campaign, and addutm_contentorutm_termwhen you need detail. - Values are case sensitive, so use lowercase and a shared naming list.
- Use standard mediums such as
email,socialandcpcso visits land in the right channel. - Never tag internal links or put personal data in tags.
- Shorten tagged URLs so people see a clean link while analytics still gets every tag.