A UTM parameter is a tag appended to a link so your analytics tool can report where a visit came from. Without tags, most social traffic collapses into direct or a bare referral, and you cannot tell which post, platform, or campaign sent anyone. Google's documentation is plain about the baseline: when you add parameters to a URL, always use utm_source, utm_medium, and utm_campaign.
The mechanics take five minutes to learn. The discipline that makes the data usable is deciding your values once, writing them down, and never improvising in the compose box again. This guide gives you the vocabulary, a worked campaign across five platforms, where the results appear in GA4, and the limits nobody selling attribution software will volunteer.
The five parameters in plain terms
Google also documents utm_id and recommends setting it alongside source, medium, and campaign to avoid unassigned values in some GA4 reports. For a founder tagging organic social by hand, the three baseline parameters plus utm_content cover the questions you will actually ask.
- utm_source: where the click was born. Use one fixed name per platform: linkedin, x, threads, bluesky, reddit.
- utm_medium: the kind of traffic. Use social for organic posts and paid-social for anything you paid to place.
- utm_campaign: which push this link belongs to, for example 2026-09-onboarding-launch.
- utm_content: which specific post or variant carried the link, for example launch-post-1 or thread-reply.
- utm_term: the paid search keyword. Leave it off organic social entirely.
A naming convention that survives
Analytics tools store values literally, so linkedin, LinkedIn, and Linked-In become three different sources, and once the data is split it cannot be merged. Every rule below exists to prevent a future report from lying to you.
- Lowercase everything, always. Decide this once and the case-splitting problem never exists.
- Separate words with hyphens, never spaces (they become %20) and never a mix of hyphens and underscores.
- One source name per platform, forever. Decide x versus twitter on day one and never use the other.
- Start campaign names with year and month, then a short theme: 2026-09-onboarding-launch. Reports sort chronologically for free.
- Name content by slot, not by copy: launch-post-1, demo-clip, community-walkthrough. The same slot name across platforms lets you compare them.
- Keep the convention in a shared doc next to your content calendar, and build links with Google's Campaign URL Builder instead of typing parameters by hand.
The template, filled in
https://example.com/blog/onboarding-lessons?utm_source=linkedin&utm_medium=social&utm_campaign=2026-09-onboarding-launch&utm_content=launch-post-1
The improvised version that splits your data
https://example.com/blog/onboarding-lessons?utm_source=LinkedIn&utm_medium=Social%20Post&utm_campaign=launch
One campaign across five platforms
Two of the rows carry judgment, not just syntax. On X, the tagged link sits in the first reply rather than the post itself, so the content value says so. On Reddit, the link belongs only in a community whose rules allow it, inside a walkthrough that stands on its own; the same tagged URL dropped as a bare link post is how accounts get removed from communities.
| Platform | utm_source | utm_medium | utm_campaign | utm_content |
|---|---|---|---|---|
| social | 2026-09-onboarding-launch | launch-post-1 | ||
| X | x | social | 2026-09-onboarding-launch | thread-reply |
| Threads | threads | social | 2026-09-onboarding-launch | launch-post-1 |
| Bluesky | bluesky | social | 2026-09-onboarding-launch | launch-post-1 |
| social | 2026-09-onboarding-launch | community-walkthrough |
Where the results show up in GA4
Open Reports, then Acquisition, then the Traffic acquisition report. Your tagged visits appear under session source / medium as values like linkedin / social. Add Session campaign as a secondary dimension to separate campaigns, and use an exploration when you want to break a campaign down by content value to compare individual posts.
Verify the plumbing before trusting a month of data: click one of your own tagged links and watch it register in the Realtime report. A typo in a parameter name fails silently, and the traffic quietly lands somewhere you will not look.
The honest limits
UTM tracking measures one event: a click on a link you tagged. Everything else is inference, and two gaps deserve naming.
The first is dark social. People share your page by DM, group chat, and screenshot, and those visits arrive untagged, reported as direct. A post can start a hundred private shares and a dozen customer conversations while its UTM click count reads eleven. The click number is a floor, never the total.
The second gap is that on some conversational feeds, a post built around an external link does its real job worse than a native post. Sometimes the right move is to skip the link entirely: let the post carry the idea and let your profile carry the URL. The reader who searches your product name two days later is invisible to UTM attribution and is still the best outcome a post can produce. Replies, saves, and brand recall never touch GA4; UTM answers which posts move people to the site, not which posts work.
Wire it into the weekly loop
Tag links at scheduling time, not at review time; a convention only holds if the tagged URL is part of the draft that gets approved. Then read Traffic acquisition once a month next to your per-post reply log, and let the two numbers argue: the posts that send clicks and the posts that start conversations are rarely the same posts, and you need both lists before deciding what to write more of.