When someone lands on your site, your analytics tries to work out where they came from. Often it can't: messaging apps, email clients and mobile apps usually don't say, so the visit is filed under "direct" — the analytics way of saying "no idea".
UTM parameters fix that. They are tags you add to the end of a URL, and analytics tools such as Google Analytics, Plausible and Matomo read them to attribute the visit to the right source and campaign:
https://example.com/spring-sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring-2026
The page is the same with or without them. They are notes for your analytics, nothing more.
The five parameters
| Parameter | What it answers | Example |
|---|---|---|
utm_source | Who sent the visitor? | newsletter, instagram, partner-blog |
utm_medium | What kind of channel was it? | email, social, cpc, affiliate |
utm_campaign | Which push was it part of? | spring-2026, black-friday |
utm_content | Which link or version, when there are several? | header-button, footer-link |
utm_term | Which paid keyword? | link-shortener |
Source, medium and campaign are the three you will use on almost every link. Content earns its place when one email or page carries two links to the same destination and you want to know which one people used. Term comes from paid search and rarely matters elsewhere. Google Analytics also understands utm_id and a few newer tags; you can ignore them until a tool you use asks for them.
Naming rules that keep reports readable
UTM values are free text, and that is the trap. Analytics tools treat every spelling as a separate value, so a campaign tagged by three people over three months turns into a report with Newsletter, newsletter and news-letter on three different rows.
A few more that save cleanup later:
- Keep medium boring. Google Analytics sorts traffic into channels like Email, Organic Social and Paid Search mostly by
utm_medium. Stick to the usual values —email,social,cpc,referral,affiliate— or your visits end up in "Unassigned". - Make source specific.
instagrambeatssocial; that is what medium is for. - Put a date in campaigns that repeat.
webinar-2026-10is still clear next year;webinaris not. - Never tag your own internal links. A UTM on a link from your homepage to your pricing page tells analytics the visitor arrived from a new campaign, which overwrites where they really came from.
Where short links come in
A fully tagged URL is long. That is fine inside a button, but it gets in the way anywhere people see or type the link: an SMS, a printed flyer, a podcast description, a slide.
A short link hides the tags without losing them. The visitor sees acme.tnb.li/spring; your analytics sees the full set of parameters on the destination. It also means you can fix a typo in a campaign name after the link has gone out — the short link stays the same, only the destination changes.
The pattern that works best: one short link per channel, each pointing at the same page with a different utm_source.
acme.tnb.li/spring-mail → …/spring-sale?utm_source=newsletter&utm_medium=email
acme.tnb.li/spring-ig → …/spring-sale?utm_source=instagram&utm_medium=social
acme.tnb.li/spring-print → …/spring-sale?utm_source=flyer&utm_medium=print
Now both sides know the channel: your analytics through the tags, and the link's own click counts through the separate links. If the two disagree, our post on why link clicks don't match your analytics explains where the difference comes from.
Doing it in tinbo
tinbo keeps the tags where they belong: on the destination URL. The UTM builder sits next to the link and edits the destination's query string as you type, so what you see is exactly what visitors are sent to.
- Templates. Save a set of parameters — say,
utm_source=newsletter&utm_medium=email— and apply it to the next link in one pick. A template is copied onto the link, so editing the template later never changes links you have already shared. - Forwarding. Turn on Forward query params to the destination in a link's advanced settings, and parameters added to the short link itself, such as
acme.tnb.li/spring?utm_source=partner, are added to the destination's own. Handy when a partner wants to tag the link on their side — just leave that parameter off the destination, or the visit arrives carrying it twice.
Tag consistently, keep the values boring, and give every channel its own link. The reports take care of themselves.