UTM parameters are short tags added to the end of a link so your analytics tool can tell which network, campaign and post sent each visitor. To make them useful, pick one naming convention, write it down, and use it for every link you share. The system below covers the four tags that matter (source, medium, campaign and content) and includes a tracking sheet you can copy.
Key takeaways
- Use four tags on every social link:
utm_source,utm_medium,utm_campaignandutm_content. - Write everything in lowercase with hyphens and no spaces. "Instagram" and "instagram" are counted as two different sources.
- Keep one tracking sheet as the single source of truth, and label each scheduled post with its campaign name.
- Tag your link-in-bio URL and any other link that lives outside a single post, but never tag links between pages on your own site.
- Test one link before you schedule a batch, then compare networks and campaigns in the analytics tool you already use.
What are UTM parameters and which ones do you need?
UTM parameters are labels added to a URL after a question mark, and your analytics tool reads them when someone clicks. They don't change the page the visitor sees. They only tell you where the visit came from.
There are five standard tags. Social teams need four:
- utm_source: where the click came from, such as the network name.
- utm_medium: the type of channel, such as organic social or paid social.
- utm_campaign: the campaign, launch or theme the post belongs to.
- utm_content: which specific post, format or version it was. This is the tag that lets you compare a carousel with a video, or version A with version B.
The fifth, utm_term, was built for paid search keywords. You can ignore it for social.
Here is what a finished link looks like:
https://yourshop.example/spring-sale?utm_source=instagram&utm_medium=social&utm_campaign=spring-sale&utm_content=carousel-sizes
If you want a quick way to build one without typing it all out, the UTM generator does it in a few fields. There is also a short definition on the UTM parameters glossary page if you need to explain it to a colleague or client.
What naming convention should you use for UTM tags?
Use a fixed list of allowed values for source and medium, and a simple pattern for campaign and content. The aim is that two people tagging links on different days produce identical spellings.
Copy this convention and adjust the campaign names to suit you:
| Tag | Rule | Allowed values or pattern | Example |
|---|---|---|---|
| utm_source | The network, lowercase, one word | facebook, instagram, threads, linkedin, x, tiktok, youtube, pinterest, bluesky, telegram, whatsapp | |
| utm_medium | The type of traffic | social (organic posts), paid-social (ads), link-in-bio (bio links), email | social |
| utm_campaign | Campaign or theme, lowercase, hyphens | short-name, optionally with month first | spring-sale |
| utm_content | Format and a short descriptor | format-descriptor | carousel-sizes |
Five rules keep the system clean:
- Lowercase only. Analytics tools treat different capitalisation as different values, so one typo splits your data.
- Hyphens, not spaces. Spaces turn into odd characters in the URL and make reports harder to read.
- Use full network names. Choose
instagram, notigorinsta, and never mix them. - Keep campaign names stable. A campaign should keep one name from first post to last, even if it runs for weeks.
- Keep content values short and descriptive.
reel-hook-atells you more thanpost7.
Treat the list of allowed sources as closed. If someone wants to add a network, they add it to the sheet first.
How do you build a UTM tracking sheet?
Create one shared spreadsheet with a row for every tagged link, and build the final URL from the other columns. It takes ten minutes to set up and saves hours when you start reporting.
Use these columns:
| Column | What goes in it | Example |
|---|---|---|
| Date scheduled | The planned publish date | 2026-03-12 |
| Network | One of the allowed sources | |
| Medium | From your allowed list | social |
| Campaign | The campaign name | spring-sale |
| Content | Format and descriptor | carousel-sizes |
| Base URL | The page you are linking to, with no tags | https://yourshop.example/spring-sale |
| Full URL | Base URL plus the four tags, built by formula | (generated) |
| Post label | The label you use on the scheduled post | spring-sale |
| Owner | Who created the link | Sam |
If you are comfortable with spreadsheet formulas, build the Full URL column by joining the other cells, like this:
=F2&"?utm_source="&B2&"&utm_medium="&C2&"&utm_campaign="&D2&"&utm_content="&E2
The letters match the columns above (B is Network, C is Medium and so on), so adjust them if you rearrange your sheet. Add a drop-down list to the Network and Medium columns so nobody can type a variation. Wrapping the formula parts in a lowercase function is also a good safety net.
If your base URL already contains a question mark, for example because it has a filter, use & instead of ? before the first tag.
How do you tag link-in-bio and other awkward links?
Tag the link-in-bio URL itself, with its own medium, so bio clicks are never mixed up with clicks from individual posts. This is the most commonly missed link, because it sits in your profile rather than in a post.
Here is how to handle the awkward cases:
- Link in bio, one network. Use
utm_source=instagram,utm_medium=link-in-bioand a campaign such asevergreenor the current promotion. - A link-in-bio page with several buttons. Tag the destination URL of each button. If you use a Start Page as your link-in-bio page and share it on several networks, you can't tell which network sent the visitor from the button tags alone. In that case, use a source such as
start-pageand a medium oflink-in-bio, so you can at least see which buttons get clicks. - Captions where links aren't clickable. On Instagram, links in captions generally aren't clickable, so a tagged link there is wasted. Send people to the bio link and tag that.
- Pinned posts and profile descriptions. If a link sits there for weeks, give it its own campaign name, such as
profile-evergreen, so it doesn't blur into a time-limited campaign. - Stories, Telegram and WhatsApp. Treat each as its own source and tag every link you share, because these links are often copied and forwarded.
One more rule: don't add UTM tags to links that go from one page of your own site to another. A tag on an internal link can overwrite the original source of the visit and hide where the visitor really came from.
How do you tie UTM links to scheduled posts?
Build the tagged link in your sheet first, paste it into the post, and give the post a label that matches the campaign. That way the sheet, the schedule and the analytics all use the same names.
A simple workflow:
- Plan the campaign. Choose the campaign name and write it in the sheet before drafting any posts.
- Create one row per network. The same page needs a different link on each network, because the source changes. Never reuse a link you tagged for Facebook on LinkedIn.
- Paste the Full URL into the post. In PilotPost you write the post once, then adjust the text per network using the post previews. Check that each network's version carries the right tagged link.
- Add a label. Give the post the campaign name as its label, so you can find every post in that campaign in the calendar. Labels are a feature of PilotPost; the point is to use the same word in your sheet, your label and your
utm_campaign. - Check the length. Long tagged URLs eat into short limits. X allows 280 characters and Bluesky 300, so keep campaign and content values short on those networks.
- Test before you schedule a batch. Click one tagged link yourself and confirm it appears in your analytics tool's real-time view with the right source and campaign.
If you schedule in volume, build the tagged links in your sheet and bring them in through a CSV. Our guide to bulk scheduling posts from a CSV shows how to lay the file out, and it fits neatly with the tracking sheet above, since each row already has a network, a date and a link.
If you want to try this workflow on a real campaign, you can start a free trial of PilotPost.
What UTM mistakes cause messy reports?
The biggest mistakes are inconsistent spelling, reusing one link across networks and tagging the wrong links. All three are easy to prevent with the sheet.
- Mixed capitalisation.
Instagram,instagramandINSTAGRAMshow up as three rows. Stick to lowercase. - Different names for the same thing.
ig,instaandinstagramsplit one network into three. Use the allowed list. - One link for every network. If you paste the same tagged link into five networks, all the traffic is credited to one source. Make a link per network.
- Spaces and special characters. They get encoded into odd strings. Use hyphens.
- Tagging internal links. As above, this can overwrite the real source of a visit.
- Forgetting the bio link. Many teams tag every post but leave the profile link plain, so bio clicks look like direct traffic.
- Renaming campaigns halfway through. A rename splits one campaign into two lines. Change it only between campaigns.
- No record of what you tagged. Without a sheet, nobody remembers what
promo2meant three months later. - Using UTMs to measure on-platform results. Tags only measure clicks that reach your site. Views, likes and shares live in each network's own data, so look at those separately in Insights.
A monthly five-minute check helps. Open your analytics tool, list the sources and campaigns, and look for any value that isn't in your allowed list.
How do you read the results in your analytics tool?
Filter your traffic report by source and medium, then break it down by campaign and content. Most analytics tools let you do this in their acquisition or traffic reports, though the menu names vary.
Start with three comparisons:
- Network against network, for one campaign. Which network sent the most visits? Which sent visits that went on to do something useful, such as filling in a form or buying?
- Content against content, within one network. Did the carousel or the video bring more visits? Your
utm_contentvalues make this possible. - Campaign against campaign. Did the spring sale bring more qualified traffic than the last one?
Look at what visitors do after they arrive, not just at the click count. A network that sends fewer visits but more enquiries may deserve more of your time. If you need ideas for which numbers to track, our social media KPIs guide helps you choose, and the client reporting guide shows how to present click data simply.
Keep expectations realistic. Some sharing happens in private messages and copied links, so not every visit can be tracked back to a post. Use UTMs to compare your own posts against each other, not to claim a perfect count.
FAQ
Do UTM parameters affect SEO or how my links look?
They don't change the page content, and they are designed for tracking only. They do make links longer, which is why short, tidy values matter. If a long link looks messy in a post, keep the tags short or place the link where the network shows a preview rather than the raw URL.
Should I use a link shortener with UTM links?
You can, but tag the full URL first and shorten it afterwards, so the tags survive. Keep a record of the short link in your sheet next to the full one. Avoid shortening links you share where people want to see the destination, as it can reduce trust.
Do I need UTM tags if the network already shows link clicks?
Network data shows clicks on the network, but your analytics tool shows what visitors did after arriving. UTMs let you compare networks in one place and connect posts to outcomes on your site. They are most useful when you share links on several networks.
Can I tag links in paid social ads too?
Yes, and you should, using paid-social as the medium so ads and organic posts stay separate. Use the same source names and campaign names as your organic posts, and the same sheet. That makes it easy to compare organic and paid results for one campaign.


