How to track link in bio clicks with UTM parameters

TL;DR: Tag every outbound link on your bio page with utm_source, utm_medium, and utm_campaign, keep every value lowercase, and verify in GA4 Realtime before you trust a single number.
Key takeaways
- UTM parameters are tags you append to a URL. Without them, most of your link in bio traffic lands in the Direct bucket in Google Analytics and tells you nothing useful.
- There are five standard parameters. You only need three of them to start: utm_source, utm_medium, utm_campaign.
- Tag the links going out of your bio page, not the single link going in to it.
- Lowercase everything, always. GA4 treats Instagram and instagram as two different sources and splits your data in half.
- UTMs tell you what happened after the click. Bio page click data tells you what happened before it. You need both to find where people drop off.
Your bio link sends people to your store, your newsletter, your latest video. Then the trail goes cold. Your store shows a spike of visitors from nowhere, signups climb, and you have no idea which link did it or which post drove the traffic. UTM parameters fix that. They are the difference between knowing your bio page got 4,000 clicks last month and knowing that most of your merch revenue traced back to one video you posted on a Tuesday. This guide covers the setup, a naming convention that holds up after six months, and the mistakes that quietly poison your reporting.
Why link in bio clicks vanish from your analytics
Most link in bio traffic shows up in Google Analytics as Direct, the bucket GA4 uses when a visit arrives with no referrer and no campaign tag. Social apps open links inside their own in-app browsers, and those browsers often strip or never send the referrer header. The visitor is real. Their origin is gone before your site ever sees them.
This gets worse the more platforms you post on. A creator running Instagram, TikTok, and YouTube through one bio page sees a single blended pile of clicks, then a matching pile of Direct sessions on the destination site, with no way to connect the two. You can tell that something is working. You cannot tell what.
GA4 assigns every session to a channel group using two signals: the referrer and the UTM parameters on the landing URL. When neither is present, Google's documentation is explicit that the session falls back to Direct. This is why creators routinely see a Direct share of 40 percent or more despite driving almost all of their traffic from social apps. The traffic is not mysterious. It is untagged.
Marketers have a name for this: dark social. Traffic that is genuinely social in origin but arrives looking anonymous. UTM parameters are the standard fix, and they have been for two decades.
What UTM parameters actually do
A UTM parameter is a key and value pair added to a URL query string. There are five standard ones, and Google Analytics has read them since Google acquired Urchin Software in 2005, which is where the acronym comes from. They do not change the page a visitor lands on. They ride along in the URL and quietly tell the analytics tool where the click originated.
Here is a tagged link:
https://yourstore.com/hoodie?utm_source=instagram&utm_medium=bio&utm_campaign=spring-drop
The visitor sees the hoodie page. GA4 sees Instagram, bio, spring-drop, and files the session accordingly.
The five parameters, in plain terms:
- utm_source names the platform the click came from. Values like instagram, tiktok, youtube.
- utm_medium names the type of traffic. For a bio page, the value bio works well because it separates these clicks from ads or email.
- utm_campaign names the specific push. Something like spring-drop or ep-42-launch.
- utm_content splits variants inside one campaign. Use it to tell your third bio link apart from your first.
- utm_term was built for paid keyword data and is mostly irrelevant to creators. Skip it.
Three of the five carry almost all the value. Source, medium, and campaign answer the questions you actually ask: which platform, what kind of traffic, which push.
How to track link in bio clicks with UTM parameters
The setup takes about ten minutes for a full bio page. You tag each outbound link once, paste the tagged version into your bio page, and every click from that point forward arrives at the destination carrying its own identification. No code, no pixel, no plugin.
Work through it in this order:
- List every outbound link on your bio page. Store, newsletter, latest video, booking page, whatever you have.
- Decide your source values first. One value per platform, and write them down somewhere you will find again.
- Set utm_medium to bio for every link on the page. This is what lets you isolate bio traffic later in one click.
- Set utm_campaign per link, not per platform. Your merch link and your newsletter link are different campaigns even though they sit on the same page.
- Build the URLs. Our free UTM builder assembles and encodes them correctly, which matters more than it sounds: a stray space or capital letter breaks the grouping.
- Paste each tagged URL back into your bio page as the link destination.
- Click one link on your live page from your phone, then open GA4 Realtime and confirm the source and medium show up. If they do not, your tags are wrong and it is much cheaper to learn that now.
The verification step at the end is the one people skip and the one that saves the month. A typo in utm_medium does not throw an error anywhere. It just silently creates a second bucket that you will not notice until you sit down to report.
Switch from Linktree in 60 seconds
Paste your Linktree URL — we'll bring over your links, bio, and avatar. Free forever, no credit card.
Import my Linktree →
A naming convention that survives contact with reality
UTM values are case sensitive and GA4 does not normalise them. Instagram, instagram, and INSTAGRAM become three separate rows in your traffic report, splitting one real number into three misleading ones. This is the single most common way creator analytics get quietly ruined, and it is entirely preventable with one rule.
Lowercase everything. No exceptions, no capitals for readability, no title case in campaign names.
Then use hyphens instead of spaces. A space in a URL gets encoded as %20, which turns spring drop into spring%20drop in your reports and looks like garbage six months later when you are trying to remember what you ran.
Keep your source list short and closed. Pick your platforms, write them down, and never invent a new value on the fly. If you already use ig somewhere, do not start using instagram now. Consistency beats accuracy here: a slightly wrong value used consistently is more useful than a correct value used half the time.
Keep medium stable too. Source and medium confusion is endemic. Source is where the person was, medium is what kind of traffic it is. utm_source=instagram with utm_medium=bio is right. utm_source=bio with utm_medium=instagram is backwards, and it will scatter your bio traffic across every platform row instead of collecting it in one.
Reading the data without fooling yourself
Open GA4 and go to Reports, then Acquisition, then Traffic acquisition. Change the primary dimension to Session source / medium. Your tagged bio traffic appears as rows like instagram / bio and tiktok / bio, with sessions, engagement, and conversions attached. That single view is the point of the entire exercise.
Two things worth knowing before you draw conclusions from it. First, GA4 sessions time out after 30 minutes of inactivity by default, so one person who browses, leaves, and returns an hour later counts as two sessions from the same source. Second, GA4 attributes on a last non-direct basis by default, meaning a visitor who found you through your bio and later returned directly still gets credited to the bio. That is usually what you want, but it means your bio numbers include some delayed return traffic.
UTMs have a real limit, and it matters. They only start reporting once the click has already landed on the destination. Everything that happens on the bio page itself, which link got the most clicks, which one people saw but ignored, how many visitors clicked nothing at all, is invisible to UTMs by design. That is what on-page click analytics covers, and the two datasets together are what let you find the drop-off. If your bio page shows 900 clicks on the store link and GA4 shows 300 sessions from instagram / bio, you have a problem between the click and the page load, not a traffic problem.
See the side-by-side
Paste any Linktree URL and see how that same profile would look on MyLinks.page.
Preview it →
Common mistakes when you track link in bio clicks with UTM parameters
Five mistakes account for most broken UTM setups. Each one produces data that looks fine at a glance and is wrong underneath, which is worse than having no data at all, because you will make decisions on it.
Tagging internal links is the worst of them. If you add UTMs to a link pointing at your own site from your own site, GA4 starts a brand new session and reassigns the source, which erases the original attribution of that visitor. Only tag links that cross a domain boundary.
Tagging the wrong direction is next. The link in your Instagram bio pointing at your bio page can carry a UTM, and that tells you how many people opened the page. But the links going out of the page to your store are where the money is measured, and those are the ones people forget.
Then there is the mid-campaign rename. Changing spring-drop to spring-drop-2026 halfway through splits one campaign into two rows and neither row tells the whole story. Pick the name before you launch and live with it.
Redirects strip query strings more often than you expect. If your destination URL bounces through a shortener or a redirect rule that does not forward the query string, your UTMs die in transit and the session lands as Direct anyway. Test the full path, not just the final URL.
Finally, do not tag every link with the same campaign name. If your merch link, newsletter link, and booking link all use utm_campaign=bio, you have re-created the exact blended pile you were trying to escape.
Start with three links this week
Do not tag everything at once. Pick your three most important outbound links, tag them with source, medium, and campaign, verify all three in GA4 Realtime from your phone, and leave them alone for two weeks. That is enough data to see which platform actually drives revenue rather than which one drives applause.
After two weeks, tag the rest and add utm_content to any link you want to test in two versions. By then the naming convention will be muscle memory and the data will be clean from day one, which is the only condition under which analytics are worth reading.