UTM parameters for social media: a naming convention GA4 classifies correctly
Short answer
In UTM parameters for social media, set utm_medium=social on unpaid links, utm_medium=paid-social on ads, and the platform in lowercase as utm_source. organic_social and social_media are not on GA4's medium list, and social_paid on a listed source counts as organic.
The usual advice on UTM parameters for social media is one line: set utm_medium to social. It is correct, and it skips the part that causes the errors. GA4 runs each session's source and medium through a fixed set of channel rules that Google publishes, and a value outside those rules can drop a post's clicks into Unassigned or count paid clicks as organic.
This page builds a convention from that rule text, read on Google's default channel group page on 2026-09-28, and from the list of social sources Google links from the same page. It covers where GA4 puts 12 common tag pairs, which platforms are missing from Google's list, where tagged links belong on social, and how to test one before it goes out.
How does GA4 decide between Organic Social and Paid Social?
For traffic that carries UTM tags, the two social channels are defined under the "Channels for manual traffic" heading of Google's channel page as follows:
- Organic Social: the source matches a regex list of social sites, OR the medium is one of
social,social-network,social-media,sm,social network,social media. - Paid Social: the source matches a regex list of social sites, AND the medium matches
^(.*cp.*|ppc|retargeting|paid.*)$.
Read in plain terms:
- The medium alone can make a visit Organic Social. If
utm_mediumis one of the six listed values, the Organic Social rule is met whatever the source. - Paid Social needs two things at once: a source on Google's social list and a medium that passes the regex. The regex accepts any medium that starts with
paid, any medium that containscp(such ascpc), and exactlyppcorretargeting. - A paid medium with an unlisted source goes to Paid Other. Google describes that channel as ads "not through an ad identified as Search, Social, Shopping, or Video".
- A visit that matches no rule is Unassigned.
- The rules ignore case and cannot be edited. Google states both on the same page.
Two more details matter. The medium cpm passes the paid regex, but it is also on the Display channel's medium list (display, banner, expandable, interstitial, cpm), so a cpm tag satisfies two channels. And the page does not state which rule wins when two match. Its descriptions settle the common case: Organic Social is traffic from non-ad links on social sites and Paid Social is traffic from ads on them, so a listed source with a paid medium is Paid Social, even though that source also satisfies the Organic Social rule.
Which platforms are on Google's list of social sources?
Google does not publish the "regex list of social sites" as a regex. It publishes a download, linked from the channel page as a spreadsheet of sources and categories. On 2026-09-28 that file was a 27-page PDF titled "GA4 Source Categories", served with a last-modified date of 9 February 2023. It has 819 entries: 592 social, 129 search, 52 shopping and 46 video.
Google says it reviews requests to add sites to the list at least once a year, so the list GA4 uses may be newer than the file. The file is the only version anyone outside Google can check. Here is what it contains for the platforms a business is likely to post on:
| Platform | On the list | Not on the list |
|---|---|---|
facebook, fb, facebook.com, m.facebook.com, l.facebook.com, lm.facebook.com |
||
instagram, ig, instagram.com, l.instagram.com |
insta |
|
linkedin, linkedin.com, lnkd.in |
li |
|
| X | twitter, twitter.com, t.co |
x, x.com |
| TikTok | tiktok, tiktok.com (as social) |
vm.tiktok.com |
pinterest, pinterest.com and country domains such as pinterest.de |
pin.it |
|
| YouTube | youtube, youtube.com, m.youtube.com (as video, not social) |
yt, youtu.be |
reddit, reddit.com |
||
| Snapchat | snapchat, snapchat.com |
|
whatsapp, whatsapp.com |
wa.me |
|
| Telegram | t.me |
telegram |
| Threads | none | threads, threads.net, threads.com |
| Bluesky | none | bluesky, bsky, bsky.app |
| Mastodon | none | mastodon, mastodon.social |
Five things follow from the file:
- Threads, Bluesky and Mastodon are not on it. Tagged with
utm_medium=socialor another value on the Organic Social medium list, their clicks still reach Organic Social through the medium rule. Tagged with a medium outside that list, or arriving untagged, where they land depends on the live list, which Google does not publish. - X appears only under its old name.
twitter,twitter.comandt.coare listed;xandx.comare not. For organic links this does not matter if the medium issocial. For ads,twitteris the source value the file supports. - TikTok has two answers. The file lists TikTok as social. The channel page's own descriptions name TikTok as a video site for both Organic Video and Paid Video. Check where your TikTok rows land before you build a report on them.
- YouTube is filed as video.
youtubewith the mediumsocialsatisfies Organic Social by its medium and Organic Video by its source. Google does not say which wins; your own reports will show it. - Google's own tagging advice uses a value its list lacks. The UTM best-practice table on Google's campaign URL page suggests
fbfor Facebook andinstafor Instagram.fbis on the list;instais not. With the mediumsocialthat makes no difference. With a paid medium,instafalls to Paid Other by the file.
Where does GA4 put 12 common tag pairs?
Each row applies the rule text above to the source file as published. Rows marked † depend on the source being absent from that file; if Google's live list has since added it, the result can differ. The campaign name is assumed to contain neither "shop" nor "cross-network" (see the convention below for why).
utm_source |
utm_medium |
GA4 channel | Why |
|---|---|---|---|
facebook |
social |
Organic Social | Listed source and listed medium |
bluesky |
social |
Organic Social | The medium alone qualifies |
threads |
social-media |
Organic Social | social-media, with a hyphen, is on the medium list |
threads |
social_media |
Unassigned † | The underscore version is not on the medium list |
mastodon |
organic_social |
Unassigned † | organic_social is not a listed medium |
instagram |
organic_social |
Organic Social | The source carries it; the medium does nothing |
instagram |
Social |
Organic Social | The rules ignore case, but reports show Social and social as two rows |
bluesky |
left out | Unassigned † | The medium reports as (not set) and the source is not listed |
facebook |
social_paid |
Organic Social | Fails the paid regex (does not start with paid, contains no cp), so ad clicks count as organic |
linkedin |
paid_social |
Paid Social | Listed source; the medium starts with paid |
x |
paid_social |
Paid Other † | x is not on the list; twitter is |
telegram |
message |
Unassigned † | telegram is not on the list (t.me is), and message matches no rule |
The pattern: an organic tag fails only when both its medium and its source miss their lists, so a fixed medium removes the risk. Paid tags fail quietly in two ways. With a listed source, a medium the regex does not recognise, such as social_paid, sponsored or boosted, turns ad clicks into organic traffic. A source outside the list turns Paid Social into Paid Other.
What naming convention should social UTM tags follow?
| Parameter | Rule | Example |
|---|---|---|
utm_source |
The platform, lowercase, one value per platform. For ads, a value from Google's list: facebook, instagram, linkedin, tiktok, pinterest, twitter, reddit, snapchat |
instagram |
utm_medium |
social for every unpaid link, paid-social for every ad, and no other values |
social |
utm_campaign |
Lowercase, hyphens, starts with the month; never contains "shop", "shopping" or "cross-network" | 2026-10-autumn-menu |
utm_content |
Where the link sits, plus a variant if you compare several | story-2 |
utm_id |
Optional: one ID per campaign, the same on every platform | au26 |
utm_term |
Empty on social; Google defines it for paid keywords |
The reasons behind each rule:
socialandpaid-social.socialpasses the organic rule whatever the source.paid-socialstarts withpaid, so it passes the regex, and with a listed source the visit is Paid Social.cpcworks too, and so does Google's own example value,paid_social. Avoidcpm, which is also a Display medium.- Lowercase everything. Google states that parameter values are case sensitive:
utm_source=googleandutm_source=Googleare different values (Google). The channel rules ignore case, so a capital letter will not move a visit to another channel, but it splits one source into two report rows. - Keep "shop" and "cross-network" out of campaign names. The Shopping rules test the campaign name against
^(.*(([^a-df-z]|^)shop|shopping).*)$: "shopping" anywhere, or "shop" at the start, after a non-letter or after the letter e. A social post taggedsummer-shop-launchsatisfies Organic Shopping as well as Organic Social. "workshop" does not match. A campaign name containing "cross-network" satisfies the Cross-network rule. - Put the placement in
utm_content, so a report can separate story clicks from bio clicks without inventing a second source value.
A finished link looks like this:
https://www.example.com/autumn-menu?utm_source=instagram&utm_medium=social&utm_campaign=2026-10-autumn-menu&utm_content=story
Google's Campaign URL Builder assembles the same URL from form fields. For client work, agree the convention in writing before the first post; the client onboarding checklist puts it next to the other measurement decisions.
Where do tagged links go on social?
Any link that sends people from a platform to your site can carry tags. What changes by placement is the utm_content value and a trap or two.
| Placement | Tag | Note |
|---|---|---|
| Profile or bio link to your site | utm_content=bio |
Stays live for months; give it a standing campaign such as always-on |
| Link-in-bio page run by another service | Tag each link on that page | The click to your site comes from that page, so a tag on the profile link never reaches your analytics |
| Story link | utm_content=story |
Add a variant per story if you compare them |
| Link in a post, caption or video description | utm_content=post |
Only where the platform makes the link clickable |
| Comment or reply | utm_content=comment |
|
| DMs and messaging apps | utm_content=dm |
Links without UTM tags are one of the reasons Google gives for (direct) / (none) traffic (Google) |
| Ads | utm_medium=paid-social |
If the ad platform fills the source with a dynamic value, check the values it produces against Google's list |
| Shortened links | Tag the long URL, then shorten it | Google warns that redirects can strip UTM parameters and that shorteners can strip referral details (Google) |
How do you test a tagged link before it goes out?
- Test the final link. If it goes through a shortener or redirect, test that version, since redirects can strip the tags (Google).
- Open it in a fresh private window. GA4 ties each session to one traffic source, and campaign values that arrive in the middle of a session do not change that session's source (Google). A session left open from earlier testing can hide the result.
- Turn on debug mode for your own device with Google Tag Assistant, which adds a parameter to the page address. Accept analytics cookies in the test window: if the site uses consent mode and analytics consent is not given, the events do not show in DebugView (Google).
- In GA4, open Admin, then Data display, then DebugView. Click the
page_viewevent and read itspage_locationparameter, which holds the page URL (Google). The tags should be there, spelled exactly as written. GA4 keeps UTM values in page location, not in the page path dimensions (Google). - Do not use Realtime to check the source. Its source card shows first user source, and only for users GA4 has already processed, so a first visit from a clean browser may not appear there (Google).
- Confirm the channel after processing. Google says processing can take 24 to 48 hours (Google). Then open Reports, Acquisition, Traffic acquisition, and check the test visit under Session source/medium and under Session default channel group. Google points to the Acquisition reports for attribution because Realtime and DebugView run only a limited version of it (Google).
- Filter out the test traffic, as Google advises for anything collected in debug mode (Google).
When are the default rules not enough?
When you need a channel Google's list does not give you. The default channel group cannot be edited, but GA4 lets you create custom channel groups with your own rules (Google). That is the route for Threads or Bluesky as a channel of their own, or for ads from an unlisted source counted as Paid Social. Google also accepts requests to add social sites to its list.
UTM tags answer where a visit came from. They say nothing about how many people saw the post on the platform; reach, impressions and views are defined per platform in social media metrics: reach, impressions and views.
Frequently asked questions
Are UTM parameters case sensitive in GA4?
The values are. Google treats utm_source=google and utm_source=Google as different values, so they appear as separate rows. The default channel rules are not case sensitive, so Social and social both reach Organic Social. Use lowercase everywhere.
Should utm_medium be social or organic_social?
social. It is on the Organic Social medium list, so it works with any source, including Threads, Bluesky and Mastodon, which are missing from Google's published source list. organic_social is not on the medium list and only works when the source is listed.
Why is my social traffic showing as Unassigned?
A tagged visit lands in Unassigned when it matches no channel rule, which for social links usually means neither the medium nor the source is on Google's lists. Examples: organic_social, social_media or message combined with threads, bluesky, mastodon, x or telegram. Change the medium to social on new links.
Does utm_source=x work for posts on X?
For organic posts, yes, as long as the medium is social; the medium carries the visit to Organic Social. For ads, Google's published list has twitter, twitter.com and t.co but not x, so x with a paid medium lands in Paid Other by that file. Use twitter for ads, or add x to a custom channel group.
Which UTM parameters does GA4 need?
Google says to always use utm_source, utm_medium and utm_campaign, and that parameters left out show as (not set) in reports (Google). utm_content is optional and is the place for the link's position on the platform.
Sources
All read on 2026-09-28.
- Google Analytics Help, Default channel group: channel rules for manual traffic, the case-sensitivity note, custom channel groups, requests to add sites.
- Google, GA4 source categories file, linked from the page above: 27-page PDF, last modified 9 February 2023.
- Google Analytics Help, URL builders: collect campaign data with custom URLs: parameters, the UTM best-practice table, case sensitivity, required parameters.
- Google Analytics Help, Campaigns and traffic sources: one traffic source per session.
- Google Analytics Help, Understand (direct) / (none) traffic: untagged links, redirects, URL shorteners.
- Google Analytics Help, Monitor events in DebugView: debug mode, consent, filtering test traffic.
- Google Analytics Help, Realtime report: what the first user source card shows.
- Google Analytics Help, Data freshness: 24 to 48 hours of processing.
- Google Analytics Help, Automatically collected events: the
page_viewevent and itspage_locationparameter (read 2026-09-29). - Google, Campaign URL Builder, the GA4 version linked from the URL builders page.