If you want to know how much of your revenue actually comes from Instagram, LinkedIn, TikTok or Facebook, you need more than a screenshot of your post reach. You need session data. And that means learning how to track social media traffic in Google Analytics 4 properly, including the part almost every guide skips: the huge chunk of social visits that GA4 files under Direct.
This walkthrough covers where social traffic lives in GA4, how to read the Traffic Acquisition report without misinterpreting it, how to build two explorations you can rebuild from scratch in five minutes, and how to stop dark social from stealing credit from your social team.
What GA4 Counts as “Social” (and What It Misses)
GA4 assigns every session a Default Channel Group based on the referrer and the UTM parameters attached to the landing URL. For social, you will mainly see two groups:
- Organic Social: the referrer matches Google’s internal list of social sources (facebook.com, instagram.com, linkedin.com, t.co, reddit.com, etc.) with no paid campaign parameters.
- Paid Social: the source matches a social platform and the medium matches a paid pattern such as
cpc,ppc,paid, orcpm.
That automatic detection is genuinely good. The problem is what it cannot see:
| Situation | What GA4 records | Why |
|---|---|---|
| Link shared in a WhatsApp or Telegram group | Direct / (none) | Messaging apps strip the referrer |
| Link in an Instagram bio opened in the in-app browser | Often Direct, sometimes Organic Social | In-app webviews behave inconsistently |
| LinkedIn post viewed in the mobile app | l.linkedin.com or lnkd.in, or Direct | Redirect chains lose the referrer |
| Paid social with no UTM parameters | Organic Social | No paid medium signal, so GA4 defaults to organic |
| Link in a PDF, newsletter screenshot or Slack message | Direct / (none) | No HTTP referrer exists at all |
This is dark social. On most B2B and content sites it accounts for a meaningful share of what looks like Direct traffic, and it is the single biggest reason social teams get told their channel “does not convert”.

Step 1: The Traffic Acquisition Report, Read Correctly
Go to Reports > Acquisition > Traffic acquisition. By default the primary dimension is Session default channel group, and each row is a set of sessions.
Do this first: switch the dimension
Channel group is too coarse. Click the dropdown above the first column and choose Session source / medium. Now you can see facebook / referral, instagram / social, l.linkedin.com / referral, t.co / referral and your own UTM-tagged values side by side.
Then apply a filter to isolate social
- Click Add filter + at the top of the report.
- Choose the dimension Session default channel group.
- Match type: contains, value: Social (this catches both Organic Social and Paid Social).
- Click Apply.
If you prefer a stricter cut, filter on Session medium exactly matching social, but be aware that this excludes referral-detected traffic that never had a UTM medium.
The three columns that matter (and the one that lies)
| Metric | What to use it for |
|---|---|
| Sessions | Volume. Compare platforms against each other, not against Search. |
| Engagement rate | Quality signal. Under 40% from a platform usually means clickbait or a mismatched landing page. |
| Key events (formerly conversions) | The only number that ends arguments. Make sure you select a single key event in the dropdown, not “all”. |
| Average engagement time per session | Useful, but heavily skewed by in-app browsers that background quickly. Treat with caution. |
Important attribution note: Traffic Acquisition uses the session source, while the Advertising section and revenue reports use a data-driven or last-click model across the whole journey. Social often introduces the user and search closes them. If you only ever look at last-click conversions, social will always look weaker than it is. Compare both.

Step 2: Tag Every Link You Control
Automatic detection is a fallback. UTM tagging is the actual system. Anything you post, place in a bio, put in a Story sticker, or hand to an influencer should carry parameters.
A tagging convention that survives contact with reality
| Parameter | Rule | Example |
|---|---|---|
utm_source |
Platform name, lowercase, always the same spelling | instagram, linkedin, tiktok, reddit |
utm_medium |
social for organic, paid_social or cpc for ads. Never mix. |
social |
utm_campaign |
Initiative name, not the post text | autumn_guide_launch |
utm_content |
Placement or creative variant | bio_link, story_sticker, carousel_v2 |
utm_term |
Optional. Audience or creator handle for influencer work. | creator_janedoe |
A finished link looks like this:
https://internetwondersezine.com/guide/?utm_source=linkedin&utm_medium=social&utm_campaign=autumn_guide_launch&utm_content=founder_post
Five tagging mistakes that wreck GA4 social reports
- Case inconsistency.
LinkedInandlinkedinbecome two separate rows. Force lowercase everywhere. - Using
utm_medium=facebook. Medium is the channel type, source is the platform. Swapping them dumps traffic into Unassigned. - Tagging internal links. A UTM on a link between two of your own pages starts a brand new session and destroys the original attribution. Never do it.
- Forgetting paid social. Untagged ads show up as Organic Social and inflate your organic performance while hiding ad spend efficiency.
- Letting link shorteners drop parameters. Build the tagged URL first, then shorten it. Verify by pasting the short link and checking the final address bar.
Make paid social land in the right bucket
GA4 only classifies a session as Paid Social when the source is a recognised social network and the medium matches a paid pattern. Use paid_social, cpc, or cpm. If you invent something like meta-ads, GA4 will not recognise it and your ad traffic will sit in Organic Social forever.
Meta, TikTok and LinkedIn all support dynamic URL parameters in ad setup. Use them so the campaign and ad IDs populate automatically instead of relying on someone remembering to paste a URL correctly at 6pm on a Friday.
Step 3: Fix Dark Social
You cannot recover a referrer that was never sent, but you can shrink the blind spot considerably.
Tactic 1: Tag the links people actually copy
Bio links, link-in-bio landing pages, Story stickers, pinned comments, Discord and Slack announcements, community posts. If a human pastes it, tag it. When someone re-shares that tagged URL in WhatsApp, the parameters travel with it and the session is still attributed correctly. This alone reclaims a surprising amount of “Direct”.
Tactic 2: Use a distinct landing path per platform
Send TikTok traffic to /tt/ and Instagram traffic to /ig/ (redirecting to the real page with UTMs appended). Even if the referrer vanishes, the landing page tells you the origin. Then build a report on Landing page + query string to see it.
Tactic 3: Add a self-reported attribution question
On your lead form or checkout, add a “How did you hear about us?” field and push the answer into GA4 as an event parameter. It is the only method that catches word of mouth, podcast mentions and screenshots. Cross-reference it against your channel data quarterly.
Tactic 4: Clean up your referral exclusions and cross-domain setup
In Admin > Data streams > your stream > Configure tag settings, check two things:
- List unwanted referrals: add payment gateways and your own subdomains so a checkout return does not overwrite the original social source with Direct or a referral.
- Configure your domains: if your site spans multiple domains, cross-domain measurement must be set up, otherwise every hop resets attribution.
Tactic 5: Check the session timeout
The default session timeout is 30 minutes. In-app browsers frequently suspend and resume, which can split one visit into two, with the second session recorded as Direct. Extending the timeout to 1 or 2 hours in tag settings reduces this fragmentation. Do it deliberately, and note the date, because it will shift your session counts.

Step 4: Two Explorations You Can Rebuild in Five Minutes
Standard reports are fine for monitoring. Explorations are where you answer questions. Go to Explore > Blank for both of these.
Exploration A: Platform x Landing Page x Key Event
This answers “which platform sends people to which page, and do they convert?”
- Technique: Free form
- Dimensions: Session source, Session medium, Landing page + query string
- Metrics: Sessions, Engagement rate, Key events, Total revenue (if ecommerce)
- Rows: Session source, then Landing page + query string
- Columns: Session medium
- Filter: Session default channel group contains
Social - Sort by Key events descending, then set row limit to 100
What to look for: pages with high sessions and near-zero key events. That is a message-to-landing-page mismatch, not a bad channel.
Exploration B: The Dark Social Estimate
This one estimates how much of your Direct traffic is really social.
- Technique: Free form
- Dimensions: Session default channel group, Landing page + query string, Device category, New / returning
- Metrics: Sessions, Engagement rate, Key events
- Filter: Session default channel group exactly matches
Direct - Segment: build a session segment for New users on mobile
Now scan the landing pages. A brand new mobile visitor landing directly on a deep article URL with a long slug did not type that address. Almost all of it is dark social or messaging apps. Note the volume, compare it to the day you published on social, and you have a defensible estimate you can present.
Bonus: a comparison instead of a filter
In any standard report, click Add comparison + and create one for Organic Social and one for Paid Social. You get both trend lines on the same chart, which is far more useful in a monthly review than two separate screenshots.

Step 5: Build a Custom Social Channel Group (Optional but Powerful)
If your platform mix is unusual, GA4’s default grouping may not match how you think. In Admin > Data display > Channel groups, copy the default group and add your own rules, for example:
- A Community channel for Reddit, Discord, Slack and forum referrals
- A Creator channel for influencer links identified by
utm_term - A Messaging channel for tagged links you distribute in WhatsApp or Telegram
Custom channel groups apply retroactively in most reports, which makes them one of the few GA4 settings you can add later without losing history. Keep the number small, or nobody will use it.
A Monthly Social Reporting Routine That Takes 20 Minutes
- Traffic Acquisition, filtered to Social, dimension set to Session source / medium, compared to the previous period. Note volume shifts.
- Check for stray rows: capitalisation duplicates,
(not set), or paid traffic sitting in Organic Social. Fix the tagging at source. - Open Exploration A. Identify the top three converting landing pages and the top three high-traffic, zero-conversion pages.
- Open Exploration B. Log the Direct-mobile-new-user volume so you can trend dark social over time.
- Cross-check one key event against the Advertising > Attribution > Conversion paths report to see where social sits as an assist rather than a closer.

Quick Troubleshooting Table
| Symptom | Likely cause | Fix |
|---|---|---|
| Social sessions look far lower than platform click counts | Platform counts taps, GA4 counts loaded sessions; plus dark social and consent-declined visits | Expect a gap. Track the ratio over time rather than the absolute numbers |
Traffic appears as Unassigned |
Medium value GA4 does not recognise | Use standard mediums: social, paid_social, cpc, referral |
| Ads showing under Organic Social | Missing or non-paid medium in ad URLs | Set utm_medium=paid_social at the campaign template level |
| Two rows for the same platform | Mixed casing or referral plus UTM versions coexisting | Standardise a naming sheet; optionally group them in a custom channel group |
| Zero conversions from social | Last-click model, or key event not firing on mobile webviews | Check conversion paths, then test the key event inside the Instagram in-app browser |
FAQ
Where exactly do I see social media traffic in GA4?
Reports > Acquisition > Traffic acquisition, then look at the Organic Social and Paid Social rows in the Session default channel group column. Switch the dimension to Session source / medium to see individual platforms.
Why is my Instagram traffic showing as Direct?
Instagram’s in-app browser often does not pass a referrer, and links copied into messaging apps lose it entirely. Add UTM parameters to your bio link and Story links so the attribution travels with the URL instead of depending on the referrer header.
Can GA4 tell me which individual post drove a visit?
Not by itself. GA4 sees the platform, not the post. Use utm_content or utm_campaign with a unique value per post or per creative, then read it in Traffic Acquisition or an exploration.
Is Organic Social the same as Referral?
No. Organic Social means the referring domain is on Google’s list of social sources or the medium is social. Referral is the catch-all for other websites. Some social redirect domains, like l.instagram.com or lnkd.in, can occasionally land in Referral, which is a good reason to filter on channel group containing “Social” rather than an exact medium match.
Do I still need a separate social analytics tool?
Yes, for on-platform metrics like impressions, reach, saves and follower growth, because GA4 never sees those. GA4 owns everything that happens after the click: sessions, engagement, key events and revenue. Use both, and stop expecting the click counts to match.
How far back can I analyse social traffic in GA4?
Standard reports keep aggregated data long term, but user-level and event-level data in Explorations is limited by your data retention setting. Check Admin > Data settings > Data retention and set it to the maximum available for your property, since anything already expired cannot be recovered. How To Use Google Analytics for Social Media is a useful companion to this.
The Takeaway
GA4 will detect most social traffic on its own, but “most” is where reporting arguments come from. The teams that get credit for social are the ones that tag every link they control, keep their source and medium values disciplined, and can show a defensible estimate of dark social sitting inside Direct. Set up the two explorations above once, save them, and your monthly social report stops being guesswork.
