How to track an Instagram bio link with UTMs (without losing the data)

Instagram strips referrer data on every click. Here is how to get attribution back using UTM parameters, a single short link, and a workaround for Stories.

Trakl Team4 min read
On this page+

Instagram is the channel where UTM tagging matters most because Instagram is the channel that strips referrer data hardest. Without UTMs, every Instagram click lands on your site as "direct" traffic in GA4, indistinguishable from someone typing your URL into a browser. With UTMs, the channel attribution holds.

Here is the practical rundown.

Why Instagram traffic shows up as direct

When a visitor taps a link in your Instagram bio (or in a Story, Reel, or Shopping tag), the in-app browser opens. That browser does not send an HTTP Referer header to your destination. Without the header, GA4 has nothing to attribute the click to except UTMs. If the link has no UTMs, GA4 logs the visit as "direct / none."

This is by design. Instagram, TikTok, and Facebook all strip referrer for privacy and competitive reasons (they do not want to send free attribution data to advertisers' analytics tools). The fix is mechanical: tag the URL.

For a single bio link pointing at your homepage:

https://yourbrand.com/?utm_source=instagram&utm_medium=social&utm_campaign=bio-link

Three parameters. utm_source=instagram flags Instagram as the origin. utm_medium=social puts it in GA4's Organic Social channel grouping. utm_campaign=bio-link tells you the visit came from your profile bio rather than from a Story or Reel.

That is the floor. From here, you can layer:

  • utm_content for the variant. If you A/B-tested two bio link CTAs, utm_content=variant-a distinguishes them.
  • utm_term for an audience identifier if your bio link is part of a paid Instagram campaign.
  • a per-post utm_campaign if you want to attribute clicks back to the specific post or Story that drove them. This requires a per-post short link, which Instagram does not directly enable but a shortener does.

Tracking individual posts and Stories

Instagram lets you put one link in your bio. For everything else, you have a Story link sticker, a Reel CTA, or (for verified accounts) a tappable link in feed posts. To track each surface separately, use a different UTM-tagged short link in each.

A practical setup for a brand running 5 posts a week and a weekly Story:

Surfaceutm_sourceutm_mediumutm_campaignutm_content
Bio linkinstagramsocialbio-link(variant identifier if A/B testing)
Reelinstagramsocialweekly-contentreel-2026-04-12
Feed post (link in caption)instagramsocialproduct-featurepost-2026-04-13
Storyinstagramsocialweekly-promostory-2026-04-14

Each row gets its own short link. The shortener wraps the long tagged URL. You paste the short link into the relevant Instagram surface. Click attribution lands in GA4 cleanly.

Many brands run a "link in bio" tool (Linktree, Beacons, Bento, Stan, Trakl's own share studio). These point your bio link at a landing page hosting multiple links to choose from. The visitor taps the bio link, sees the menu, taps an item, lands on the destination.

The attribution problem here: by default, the link-in-bio tool's outbound clicks lose the original UTM. The bio link took them to the menu page; the menu page's outbound link is whatever you put on it.

Two fixes:

  1. Tag every menu link with its own UTM. utm_source=instagram&utm_medium=social&utm_campaign=bio-menu&utm_content=<menu-item-name>. Now each click out of the menu page carries the right attribution.
  2. Pass UTMs through the menu page if you build it yourself. A custom-built menu page can read the inbound UTMs from the bio link's URL and append them to each outbound link. This is the cleanest approach but requires custom development.

Trakl's bio-link feature handles option 1 by default. Each link you add to your menu gets its own UTM tagging applied automatically.

The Story link sticker workaround

Instagram Stories disappear after 24 hours, but a Story link sticker is the only Instagram surface (besides bio) that gets a tappable URL for non-verified accounts. The trick: the URL behind a Story sticker can be any URL you want, and Stories do not have a character limit visible to the user.

So you can put a fully tagged long URL behind a Story sticker. But the better practice is to use a short link per Story so you can track each Story separately:

  • Story 1 (April 12): utm_source=instagram&utm_medium=social&utm_campaign=q2-launch&utm_content=story-2026-04-12
  • Story 2 (April 13): same campaign, utm_content=story-2026-04-13

Now your GA4 report can show "Q2 launch traffic by Story" if you slice by utm_content.

What to look for in GA4

Once your Instagram links carry UTMs:

  1. GA4 → Reports → Acquisition → Traffic Acquisition. Group by Source / Medium. You should see a row for instagram / social. If everything is still "direct / none," your tags are not landing.
  2. Sessions over time for that row. Compare against your Instagram analytics in-app. The two numbers will not match exactly (cookie consent rates, ad-blockers, etc.), but they should be in the same order of magnitude.
  3. Conversions by utm_content. If you tagged each post separately, this is where you find out which content actually drove sign-ups.

If GA4 numbers are wildly off from Instagram's in-app numbers, the piece on why your UTM data is messy covers the half-dozen common causes.

What about paid Instagram?

Paid Instagram (Meta Ads) is a different beast. Meta auto-tags clicks with its own parameters (fbclid and a tracking ID). You can layer UTMs on top through the Meta Ads Manager URL parameters field.

Recommended UTMs for paid Instagram:

utm_source=instagram
utm_medium=paid_social
utm_campaign={{campaign.name}}
utm_content={{ad.name}}

The {{}} placeholders are Meta's URL parameter macros, which auto-fill with the campaign and ad names from Ads Manager. This gets you per-ad attribution in GA4 without typing each URL by hand.

A working setup in five minutes

If you have one bio link and want it tagged today:

  1. Open the Trakl free UTM builder.
  2. Paste your destination URL.
  3. Source: instagram. Medium: social. Campaign: bio-link.
  4. Copy the output URL.
  5. Paste it into your Instagram bio.

You now have correct attribution. From here, the upgrade path is per-post short links, a bio-link landing page, and a paid Instagram strategy with auto-filled UTMs. All of which Trakl handles directly on the paid tier.

Frequently filed

Common questions.

Q.01Why does Instagram strip the referrer?+

Instagram's app browser does not pass an HTTP Referer header to the destination URL. The same is true for most in-app browsers (TikTok, Facebook). Without the referrer, GA4 cannot attribute the click to Instagram unless your link carries UTM parameters that say so explicitly.

Q.02Can I track each post separately on Instagram?+

Yes, with separate short links per post or per content piece. The bio link points to a single landing page, but you can run a per-post UTM-tagged short link in your Stories, Reels, or any other Instagram surface that supports a clickable link. The utm_content parameter is what distinguishes them.

Q.03Do utm_term or utm_content matter on Instagram?+

utm_content is the most useful. Use it to identify the post or creative the link came from (utm_content=reel-q2-launch, utm_content=story-2026-04-12). utm_term is mostly used for paid search keywords, so it adds little for Instagram organic.

TT

By the byline

Trakl Team

Editorial team

We build Trakl, a link shortener and UTM tracker for marketing teams. We write here from the cleanup work, support tickets, and campaign reviews that fill the rest of our week. Specifics over slogans, and we cite the source.

Photo: Gábor Szűts on Unsplash