You post the same link five different ways — in your Instagram bio, a Reel caption, a Story sticker, a YouTube description, and your newsletter — and then you look at your analytics and see "Direct: 1,204 visits." That number tells you nothing. You can't tell whether your bio drives traffic or whether your Stories do, so you keep posting everywhere, guessing at which one earns the click.
UTM parameters fix that in about half an hour of setup. They're not glamorous, and they make your URLs ugly, but they're the difference between "I think my YouTube audience converts" and "my YouTube audience converts at 4.1% and my TikTok audience at 0.8%, so I'm putting the promo video on YouTube."
This guide is the system working creators actually use: the five parameters, a naming convention you'll still understand in six months, where to tag and where never to tag, and how to read the numbers once they land.
TL;DR: UTM parameters are tags you add to a link's URL so your analytics tool can tell you exactly which platform, post, and placement drove the click. Use lowercase hyphens, tag
utm_sourceandutm_mediumon every external link, useutm_contentto separate placements like bio vs. caption, and keep a simple registry so you never tag the same channel two ways. Never tag internal links, never use UTMs on paid ad URLs, and always pair tagging with a branded short link so your audience sees something clean.
What UTM parameters actually do
A UTM parameter is a query string added to the end of a URL. When someone clicks that link, your analytics tool records the tag values as the session source, which lets you group traffic by where it came from instead of dumping everything into "Direct" or "Social."
If you've ever seen a URL that looks like this:
yoursite.com/newsletter?utm_source=youtube&utm_medium=video&utm_campaign=q4_launch&utm_content=description
...that's the whole idea. The user lands on the same page they would have landed on without the tags. Nothing about the page changes. The only difference is that your analytics now knows the click came from YouTube, from a video, from the Q4 launch campaign, specifically from the description box.
Without tags, most app-based traffic shows up as Direct or as a vague social referral. In-app browsers on Instagram and TikTok strip the referrer header, which is why a TikTok bio link and a typed-in URL look identical to Google Analytics. UTMs are the only reliable way to tell them apart because they travel inside the URL itself.
The five parameters (only three matter most days)
| Parameter | What it answers | Required? |
|---|---|---|
utm_source |
Where did they come from? (youtube, instagram, tiktok, newsletter) | Yes — on every external link |
utm_medium |
What kind of placement? (video, bio, story, email, podcast) | Yes — on every external link |
utm_campaign |
What promotion or launch is this part of? (q4_launch, book_waitlist) | Yes — for any campaign |
utm_content |
Which placement or variant within the same source? (bio, pinned_comment, story_1) | When you A/B test or use multiple links |
utm_term |
Keyword or paid search term | Only for paid search |
If you tag only three things, tag source, medium, and campaign. utm_content is the one creators underuse the most, and it's the one that answers the question you actually care about: does the link in my bio outperform the link in my caption?
A naming convention you won't regret
The rules are boring and they save you from garbage data:
- Lowercase everything.
YouTubeandyoutubeare two different rows in your reports. - Use hyphens, not spaces or underscores. Spaces break URLs; underscores render badly in some tools.
- Be predictable, not clever.
instagramis right.igis not, unless you useigon literally every link forever. - Never change a value once it's live. A published link with
utm_medium=storythat you later rename becomes a second channel with half the data. - Keep a registry. A one-tab spreadsheet of every source/medium pair you've ever used will save you hours.
Here's the convention table I'd hand to any creator starting today:
| Platform | utm_source |
utm_medium |
|---|---|---|
| Instagram bio | instagram |
bio |
| Instagram Story | instagram |
story |
| Instagram Reels caption | instagram |
reels |
| TikTok bio | tiktok |
bio |
| YouTube description | youtube |
video |
| YouTube Shorts description | youtube |
shorts |
| YouTube community post | youtube |
community |
| X / Threads post | x / threads |
post |
| Newsletter | newsletter |
email |
| Podcast episode notes | podcast |
audio |
| Pinterest pin | pinterest |
pin |
Two rules make this stick. First, the medium describes the placement type, not the platform — that's why YouTube long-form and Shorts are different mediums but the same source. Second, you can then roll up by source ("how much traffic comes from YouTube?") or drill into medium ("does Shorts traffic convert?").
Where to tag, and three places you must never tag
Tag every link you don't control the destination of: bio links, captions, descriptions, Story stickers, newsletter CTAs, podcast show notes, DM links, Discord posts, collab partner assets.
Tag nothing else in these cases:
- Internal links. Adding UTMs to links between pages on your own site restarts the attribution session and can misattribute your own visitors. If you need inner-link tracking, use events, not UTMs.
- Your own homepage, shared without context. If the link is just "hey, look at my site," you'll have to tag it eventually; but if you're pasting the same untagged URL everywhere, you're splitting data between Direct and a tagged row.
- Paid ad URLs where the ad platform already sets parameters. Google Ads uses
gclid; if you also tag the landing page URL with UTMs you can overwrite the auto-tagged click identifiers and break the platform's own reporting. Tag the creative, not the destination.
There's a fourth soft rule: any link you're going to paste publicly should go through a short link or a branded link-in-bio. Ugly URLs suppress clicks. A 140-character string of parameters after a question mark reads like a tracking link, and people skip it.
Build the link: two ways
The manual way — take your destination URL and append parameters:
https://yoursite.com/free-guide?utm_source=tiktok&utm_medium=bio&utm_campaign=free_guide
Order doesn't matter, but you need a ? before the first parameter and & between each one after that.
The builder way — use Google's Campaign URL Builder (free, no login) or your link-in-bio tool's built-in tagging field. The builder prevents typos, and the preview at the bottom of the page is worth checking: if the link looks like it has two question marks or a stray space, it's broken.
If you use a link-in-bio tool with analytics — including Biolinky — you get two layers of data for free: the platform's own click count per link, and the UTM data in your site analytics. The first tells you which link people tapped; the second tells you what they did on the other side. When those two disagree (200 clicks, 12 sessions), the problem is usually load time or an in-app browser, not your offer.
Watch the video walkthrough
How to read the data without drowning in it
In GA4, go to Reports → Acquisition → Traffic acquisition. Set the primary dimension to "Session source/medium." That one table answers most of your questions. Then:
- Add a secondary dimension of "Session campaign" to separate campaigns.
- Use the Landing page report to see which pages tagged links point to most.
- Create one conversion event (newsletter signup, purchase, form fill) and compare conversion rate by source/medium. This is the report that changes decisions.
For a creator, five numbers matter:
| Metric | What good looks like | What it tells you |
|---|---|---|
| Sessions by source/medium | — | Where your traffic actually comes from |
| Engagement rate per source | 45–65% | Whether the audience you sent was a fit |
| Conversion rate per source | 1–5% | Whether the traffic is worth chasing |
| Clicks-to-session ratio (from your bio tool) | 60–85% | Load speed and browser friction |
| Sessions per campaign | — | Whether promo pushes land or flop |
If TikTok sends you 4,000 sessions at a 0.3% conversion rate and your newsletter sends 400 sessions at 6%, the answer isn't "post more TikTok." It's "get newsletter signups from TikTok." Traffic is cheap. Traffic that signs up is the point.
Five mistakes that quietly ruin UTM data
| Mistake | Result | Fix |
|---|---|---|
Mixing Bio and bio |
Two rows, half the data each | Lowercase everything, always |
Missing utm_medium |
Everything flattens into one blob | Medium is required, no exceptions |
| Tagging internal links | Self-referring sessions, wrong attribution | Only tag external-to-you links |
| UTMs on Google Ads destinations | Breaks gclid reporting |
Let the platform tag, don't double-tag |
| Never documenting tags | You invent ig_story three months later |
Keep a registry tab |
One more that isn't a mistake so much as a trap: UTM-tagged URLs are technically distinct URLs to search engines. If a tagged version of a page gets indexed, you can end up with duplicate content. It rarely happens (tagged links are usually nofollowed or disallowed in robots.txt), but if you run a blog, keep your CMS's canonical tag in place and don't hotlink tagged URLs from your own nav.
The 30-minute setup
- Open a spreadsheet. Title it "UTM registry." Two columns: source, medium, and a notes column for what it means.
- Fill in the table above for the six platforms you actually use. Delete the rest.
- Build a tagged link for each placement of your current live offer using Google's Campaign URL Builder.
- Shorten them — your link-in-bio's custom slug, a branded short domain, or any shortener.
- Paste them in and delete the untagged versions so you don't have two competing links.
- Add a conversion event in your analytics tool so these sessions have something to convert into.
- Set a monthly reminder to open the source/medium report and look at conversion rate, not sessions.
Worked example: tagging one launch
Here's what this looks like in practice for a single promotion — a paid guide you're pushing for two weeks.
| Placement | Link you publish | What it teaches you |
|---|---|---|
| Bio link | ?utm_source=instagram&utm_medium=bio&utm_campaign=guide_launch |
Baseline: how many of your profile visitors act |
| Reel caption | ?utm_source=instagram&utm_medium=reels&utm_campaign=guide_launch |
Whether episodic content beats a static bio |
| Story sticker, day 1 | ?utm_source=instagram&utm_medium=story&utm_campaign=guide_launch&utm_content=day1 |
Whether announcements or reminders convert |
| Story sticker, day 4 reminder | ...&utm_content=day4_reminder |
How much lift a second ask creates |
| YouTube description | ?utm_source=youtube&utm_medium=video&utm_campaign=guide_launch |
Whether long-form viewers buy |
| YouTube pinned comment | ?utm_source=youtube&utm_medium=comment&utm_campaign=guide_launch |
Whether the pinned comment is read at all |
| Newsletter CTA | ?utm_source=newsletter&utm_medium=email&utm_campaign=guide_launch&utm_content=primary_cta |
Your highest-intent channel, measured |
| TikTok bio | ?utm_source=tiktok&utm_medium=bio&utm_campaign=guide_launch |
Whether TikTok traffic actually buys |
Two weeks later, the report tells you something you could never guess: Reels drive 3x the sessions of the bio, but newsletter sessions convert at eight times the rate. That changes your next two weeks — you'd push harder on the newsletter signup from Reels, and stop treating the bio as the primary conversion point.
Notice how utm_content did the day-1 vs. day-4 work. Without it, both Story links collapse into one row and you learn nothing about frequency.
That last step is the whole point. Tagged links only pay off if you read them, and reading them takes ten minutes a month once the convention exists. Creators who tag but never look are just making their URLs uglier for no reason.
Tracking isn't about vanity numbers. It's about knowing which of your platforms earns you an audience that acts, so you can spend next month's effort where it compounds.
