UTM builder for social media campaign links

Paste a URL, fill in source, medium, and campaign, and this UTM builder returns a tagged link you can copy into a post. It lowercases values, swaps spaces for hyphens, and keeps any query string the page already had, so the numbers in your analytics tool line up with the posts that produced them. Nothing you type leaves your browser.

—

How to do it

  1. Paste the landing page URL Use the full address, including https://. Existing query parameters are kept.
  2. Fill in source, medium, and campaign These three are the ones analytics tools group by. Pick values from a fixed list so every post uses the same spelling.
  3. Add term or content if you need them Use utm_content to tell two links in the same campaign apart, such as the image post and the thread.
  4. Copy the tagged link Paste it into your post or your scheduler. Test it once in a private window before you publish.

What each UTM parameter means

UTM parameters are query string tags that analytics tools read when someone lands on your site. They do not change the page. They only label the visit.

ParameterAnswersExample
utm_sourceWhich site sent the visitlinkedin, x, bluesky
utm_mediumWhat kind of channel it wassocial, paid-social, email
utm_campaignWhich campaign or launchv2-launch, spring-webinar
utm_termPaid keyword or audience (optional)founders-us
utm_contentWhich link or creative (optional)thread-post-3, image-a
utm_idA campaign ID for data imports (optional)cmp-0142

Google Analytics 4 also reads utm_source_platform, utm_creative_format, and utm_marketing_tactic. Most teams never need them.

Naming conventions that keep reports clean

  • Lowercase everything. GA4 treats LinkedIn and linkedin as two sources.
  • Hyphens, not spaces. A space becomes %20 and is easy to mistype.
  • One medium per channel type. GA4 files a visit under Organic Social when the source is a known social site or the medium is social, social-media, social-network, or sm. Paid visits need a medium that starts with paid or matches cpc or ppc.
  • Write the list down. A shared sheet of allowed sources and campaigns beats memory.
  • Never tag internal links. A UTM on a link inside your own site starts a new session and overwrites the real source.

X counts every URL as 23 characters no matter how long it is, and Mastodon does the same, so a long tagged link costs nothing extra there. Bluesky and LinkedIn are different: check the full post with the cross-post length checker before you schedule it.

Skip link shorteners on top of UTMs. They hide the destination, some networks rate them as spam, and SocialHandoff guardrails flag common shorteners on drafts by default. The UTM parameters glossary entry and link shortener entry go deeper.

Where this fits

When an agent drafts your launch posts in SocialHandoff, you can give it the tagged link and it keeps the link intact through approval. See how to schedule LinkedIn, X, and Bluesky posts or start from the blog post promo template.

Frequently asked questions

Are UTM parameters case-sensitive?
Yes. Google Analytics 4 and most other tools treat uppercase and lowercase values as different, so pick lowercase and stick to it.
Which UTM parameters are required?
Only utm_source is strictly required by Google Analytics, but you should always set source, medium, and campaign together. Term and content are optional.
Do UTM tags hurt SEO?
No. Tagged links you share on social media do not create duplicate pages as long as your pages have a canonical URL, which most sites set by default.
Should I shorten a UTM link before posting?
Usually not. X and Mastodon count any link as 23 characters, and shorteners hide the destination from readers and can trigger spam filters.

Let your agents post. Keep the final say.

Connect your first agent in minutes. Every draft waits in your inbox until you approve it.

14 days free. No card required.

The hosted version is opening soon

Leave your email and we will send one message when hosted accounts open, with your 14-day trial ready. Want it today? Self-host it free from the repo.

Start free trial