Go to content
cutty.dev
All posts

UTM links — what they are and how to create them without errors

What are UTM parameters, what are they used for, and how to build tagged links to know where traffic is coming from. Plus, why it is worth shortening such a long link at the end.

Five parameters. That's all it takes for your analytics to stop throwing all traffic into a single bucket labeled "direct / other". I'm talking about UTM links.

You've probably seen an address like this. You click something on Facebook and suddenly ?utm_source=facebook&utm_medium=... lands in your browser bar and stretches out as long as a noodle. This is not an accident or trash. It is a label. Attached to the link so that Google Analytics (or whatever else you use for tracking) knows exactly where that person came from. From which post. From an email. From an ad.

Without this? Blindness. You see that there is movement, but you don't know if it was earned by a Sunday post or a newsletter from a week ago.

What these fields actually mean

You append a few parameters to the address. Three do all the work, two are extras for special occasions.

  • utm_source is where from. Specific place: facebook, newsletter, instagram, google.
  • utm_medium is via which channel. Traffic type: social, email, cpc (i.e., paid clicks), qr.
  • utm_campaign is which action. Campaign name: wiosna-2026, black-friday, promo-startowa.
  • utm_content (optional) distinguishes variants. Useful in A/B tests, e.g., przycisk-gora vs przycisk-dol.
  • utm_term (optional) is a keyword, used mainly with paid advertisements.

Put together, it looks like this:

https://twojastrona.pl/oferta?utm_source=instagram&utm_medium=social&utm_campaign=wiosna-2026

And now instead of the impersonal "social / referral" in the report, you see in black and white: Instagram, social channel, spring campaign. You know who delivered the users to you.

Three little things that can ruin a report

UTMs are dead simple. That's exactly why they are so easy to mess up, and then the data turns into mush.

First of all, lowercase letters. Always. For Facebook analytics, Facebook and facebook are two completely different sources, and suddenly you have one campaign split into two bars. Choose one spelling and stick to it.

Secondly, no spaces or Polish characters. wiosna 2026 will break your link. Write wiosna-2026 with a hyphen and you're all set.

Thirdly (and this is what fails most often), create a dictionary for yourself. Write down once on a piece of paper or in a notebook: the email source is always newsletter, never mailing or email-list. The medium is always email. It sounds like an exaggeration until, after a month, you discover that you have five different names for the exact same newsletter.

Where did the idea to shorten this suddenly come from

Exactly. Look at this example above once more. It is not short. And that was a mild case, with only three parameters. Add content and term, a longer campaign name, and you easily reach 200, sometimes 250 characters.

Such a monster is unusable in half of the places where you would want to paste it:

  • Instagram bio has some 150 character limit, so you won't fit,
  • SMS splits into two messages (and you pay for two),
  • on a flyer or poster it simply looks bad, and the QR code becomes so dense that the phone has trouble scanning it.

The trick is this: you build a full, tagged link so that analytics has everything it needs. And then you shorten it. The recipient gets a clean cutty.dev/wiosna, clicks, and after redirection, all UTM parameters still reach your site. On the outside, it's short and nice; in the reports, you have a full set of data. When you shorten it on cutty.dev, you also get your own click counter in the panel, so you are not solely dependent on what Google shows.

Quick Cheat Sheet

  • You tag in order to know where people are coming from.
  • source = where, medium = via which channel, campaign = which action.
  • Lowercase, zero spaces, one established dictionary of names.
  • Shorten the long UTM link at the end, otherwise it will be unusable.

The hardest part of all this is not gluing the link together. It is sticking to your own rules for the following months. Try it on one campaign, see in the report that the names match, and only then scale it up.