Skip to content
SocialTools

UTM Link Builder

Add utm_source, utm_medium, and utm_campaign to any URL so Instagram bio links and ads show up cleanly in analytics.

Image ToolsAll platformsReviewed 2026-09-11 by SocialTools editorial. How we testEmbed widget
Tracking URL
https://example.com/?utm_source=instagram&utm_medium=social

Runs in your browser. Nothing you enter is uploaded.

Overview

UTM parameters are five query-string keys that analytics platforms read to attribute a session to a campaign. They carry no magic - they are just labels you attach to a link, and their entire value depends on whether you spell them the same way every time.

This builder appends utm_source, utm_medium, utm_campaign, and the optional utm_term and utm_content to a destination URL using proper URL parsing, so existing query strings survive and values are encoded correctly. Empty fields are skipped rather than written as blanks.

What each parameter is supposed to mean

utm_source is the specific property sending the traffic: instagram, newsletter, partner-blog. utm_medium is the channel class: social, email, cpc, referral. utm_campaign groups everything belonging to one initiative: spring_sale, launch_v2. Those three carry the reporting weight in every analytics tool.

utm_term was designed for paid keyword data and is largely vestigial for organic social work. utm_content is the genuinely useful optional one - it distinguishes placements inside a single campaign, so you can tell the story link from the bio link from the pinned comment without creating three campaigns.

The failure mode is never technical. It is that one person writes instagram, another writes Instagram, and a third writes ig - and the report shows three sources that are really one. Analytics platforms treat parameter values as case-sensitive strings, so IG and ig will not merge.

  • Lowercase everything, always. Case sensitivity is the most common source of split reporting.
  • Use underscores or hyphens instead of spaces; pick one convention and document it.
  • Keep utm_medium to a small fixed vocabulary - social, email, cpc, referral, affiliate.
  • Use utm_content for placement variants rather than spawning near-duplicate campaign names.

How the URL is constructed

The destination is parsed with the browser’s URL constructor, and each non-empty parameter is set through the searchParams interface. That means existing query parameters on the destination are preserved rather than clobbered, and reserved characters in your values are percent-encoded automatically - a campaign name containing a space becomes %20 without you doing anything.

If the destination string cannot be parsed as a URL - most often because the protocol is missing - the tool returns your input unchanged rather than producing a broken link. A result that comes back identical to what you typed is the signal that you need to add https:// to the front.

Parameters are written in a fixed order: source, medium, campaign, term, content. Order has no effect on how analytics platforms read them, but consistent ordering makes links easier to eyeball and diff.

One campaign, three placements

Input

Destination: https://example.com/pricing?plan=pro
utm_source: instagram
utm_medium: social
utm_campaign: spring_launch
utm_content: story_link

Output

https://example.com/pricing?plan=pro&utm_source=instagram&utm_medium=social&utm_campaign=spring_launch&utm_content=story_link

The existing plan=pro parameter survived, which matters because dropping it would land visitors on the wrong pricing view. Building two siblings that differ only in utm_content - bio_link and pinned_comment - lets you compare placements inside one campaign row instead of fragmenting the report into three campaigns that have to be summed by hand.

Limitations

  • UTMs describe the click, not the customer. A visitor who arrives from a tagged link, leaves, and returns via search a week later is usually attributed to the later session under last-click models.
  • Parameters are visible in the address bar and fully editable by anyone. They are labels, not measurements, and can be stripped by apps that clean URLs on paste.
  • The tool does not validate that your values match an existing naming convention - it will happily build a link with a source you have never used before.
  • Long tagged URLs are unwieldy in bios and printed material; you will usually want a short link wrapping the tagged destination.
  • Some platforms append their own tracking parameters on top, producing URLs where yours are not the only ones present.

When not to use this tool

  • Never on internal links between pages of your own site - a tagged internal click starts a new attributed session and overwrites the original source in most analytics setups.
  • If you are diagnosing an existing link rather than building one, the UTM debugger explains what the parameters currently say and flags inconsistencies.

How to use it

  1. 1

    Paste the destination URL with its protocol; if the output comes back unchanged, the URL failed to parse and needs https:// added.

  2. 2

    Fill source, medium, and campaign in lowercase, matching the exact spellings already used in your analytics reports.

  3. 3

    Add utm_content when you are running more than one placement so you can separate them without duplicating the campaign.

  4. 4

    Copy the tracking URL, then confirm the parameters are still present in the address bar after the page loads before you publish the link anywhere.

Questions

Which parameters are actually required?

Reporting works with utm_source alone, but source without medium leaves traffic uncategorised in channel groupings, which is where most people read their numbers. Treat source, medium, and campaign as the mandatory three and the other two as optional detail.

Does adding UTM parameters affect SEO?

Only indirectly, and only if you tag URLs that get crawled. Parameterised variants of a page can be treated as separate URLs, which is why a self-referencing canonical tag on the destination matters. UTMs on links from your own social accounts are not a ranking concern.

Why do my Instagram bio clicks show as direct traffic?

In-app browsers and privacy features sometimes strip or fail to pass the referrer and query string, and some link-shortening layers drop parameters on redirect. Test the tagged link by opening it inside the app itself and checking whether the parameters survive to the landing page URL.

Can I reuse the same campaign name across platforms?

Yes, and you should. Keeping utm_campaign identical while varying utm_source is exactly how you compare platforms within one initiative. Varying the campaign name per platform makes that comparison impossible.