Source: https://measuremy.site/blog/ga4-unassigned-traffic

[measuremy.site](https://measuremy.site/) / [Blog](https://measuremy.site/blog)

# Why GA4 shows your campaign traffic as Unassigned (and how to fix the links)

October 10, 2026 · 5 min read

You tagged the newsletter link, sent it, and a day later GA4's traffic acquisition report shows a new row called **Unassigned**. The visits arrived and the tags were read, but GA4 couldn't decide which channel they belong to, so they sit in a bucket that nobody looks at. Almost every time, the cause is in the link itself.

## How GA4 decides the channel

GA4 sorts every session into a channel (Email, Organic Social, Paid Search, Referral and so on) with a fixed list of rules called the default channel group. The rules look mostly at two values: `utm_medium` and `utm_source`. For example:

- Medium `email` (or `e-mail`, `e_mail`) goes to **Email**.
- Medium `social`, `social-media` or `sm` goes to **Organic Social**, and so does a known social site as the source.
- Medium `cpc`, `ppc` or anything starting with `paid`, with a search engine as the source, goes to **Paid Search**.
- Medium `referral`, `app` or `link` goes to **Referral**.

If a session matches none of the rules, it lands in **Unassigned**. Google publishes the full list in its "Default channel group" help article, and it is worth a read before you plan a campaign's tags.

## The five usual causes

- **A made-up medium.** `utm_medium=newsletter`, `bio-link`, `post` or `launch` make sense to you but match no rule. Use the standard values and put the detail in `utm_source` or `utm_campaign` instead: `utm_source=newsletter&utm_medium=email`.
- **A source with no medium.** A link with only `utm_source=reddit` gives GA4 half the information. Some sources are recognised on their own, many are not. Always send both.
- **Typos in the tag names.** `utm_meduim` or `utm-source` are not read as UTM tags at all, so GA4 sees a medium that isn't there.
- **Tags after the `#`.** Anything after the hash stays in the browser, so `example.com/#pricing?utm_source=x` sends no tags. Put the tags before the `#`.
- **Events GA4 can't tie to a session.** Hits sent from a server, or events that fire before the page view, can arrive without session details and end up unassigned too. If your links are clean and the row keeps growing, look at how the tag is installed.

## Check a link before you send it

The fastest way to catch all of this is to test the finished link, not the spreadsheet you built it from. The free [UTM link checker](https://measuremy.site/tools/utm-link-checker) takes up to 25 links, flags misspelled or duplicated tags, capital letters and tags after the `#`, and shows which GA4 channel each link will land in using Google's default rules. It can also open each link to make sure a redirect doesn't strip the tags on the way, which is the other common reason campaign visits vanish (they show up as Direct rather than Unassigned).

When you build new links, the [UTM link builder](https://measuremy.site/tools/utm-link-builder) lowercases everything, so `Email` and `email` never split into two rows.

## A short list of mediums to reuse

Pick from these and you'll rarely see Unassigned again:

- `email` for newsletters and one-off emails
- `social` for unpaid posts, and `paid_social` for social ads
- `cpc` for search ads
- `referral` for links on other sites, directories and partner pages
- `affiliate` and `display` where they apply

Put the specific place in the source (`reddit`, `hacker-news`, `october-newsletter`) and the push in the campaign (`launch-week`). The report then groups by channel and still lets you drill into each post.

## What about the visits already unassigned?

Fixed links only help new visits. To see which links caused the old ones, add Session source / medium as a secondary dimension to the Unassigned row in the traffic acquisition report: the raw values show which link was responsible, so you know which to replace. If you want those values counted under a channel, GA4 lets you create a custom channel group with your own rules; see Google's help on custom channel groups for how it applies to existing data.

If you'd rather not think about channel rules at all, measuremy.site credits each tracked link to the campaign you created it for, and your coding agent can tell you how a post did in one question. Either way, the habit that matters is the same: check the link before it goes out. See also [UTM tracking explained](https://measuremy.site/blog/utm-tracking-explained).

### See it on your own site

measuremy.site is cookieless analytics your coding agent can read. 30-day free trial, no card. Plans from $9/month.

[Start free trial](https://measuremy.site/login) [See the live demo](https://measuremy.site/share/measuremy.site)

Add measuremy.site analytics to this project: connect the measuremy.site MCP server at https://a.measuremy.site/mcp (it signs in with OAuth, no key), then tell me how to sign in. Details: measuremy.site/llms.txt

## Free tools

- [Free UTM link builder](https://measuremy.site/tools/utm-link-builder): Add utm_source, medium and campaign to any link.
- [UTM link checker](https://measuremy.site/tools/utm-link-checker): Find broken UTM tags and see which GA4 channel a link lands in.
- [Link shortener with click tracking](https://measuremy.site/tools/link-shortener): Short links with a click count by day and country.

[All free tools](https://measuremy.site/tools)

## More from the blog

- [How to calculate your website conversion rate, and what to compare it to](https://measuremy.site/blog/calculate-website-conversion-rate)
- [Is my A/B test result significant? A plain-English guide with a worked example](https://measuremy.site/blog/is-my-ab-test-significant)
- [What is bounce rate, how is it calculated, and is yours a problem?](https://measuremy.site/blog/what-is-bounce-rate)
- [How to add a visitor counter to your website or GitHub README](https://measuremy.site/blog/add-visitor-counter-to-website)
- [How much traffic does a website get? How to estimate any site's visits](https://measuremy.site/blog/how-much-traffic-does-a-website-get)
- [How to track QR code scans: count them, and see which poster worked](https://measuremy.site/blog/track-qr-code-scans)
- [How to see how many people clicked your link (without a paid shortener)](https://measuremy.site/blog/how-many-people-clicked-my-link)
- [How to check if your Google Analytics 4 tag is installed (and only counting once)](https://measuremy.site/blog/check-if-ga4-is-installed)
- [Does your redirect keep your UTM tags? How to check before a campaign goes out](https://measuremy.site/blog/redirect-drops-utm-tags)
- [How I built a self-hosted analytics MCP server on Cloudflare Workers and D1](https://measuremy.site/blog/analytics-mcp-server-cloudflare-workers)
- [UTM tracking explained: what the parameters mean and how to use them](https://measuremy.site/blog/utm-tracking-explained)
- [Conversion funnel analysis for small sites: a practical guide](https://measuremy.site/blog/conversion-funnel-analysis)
- [Sudden drop in website traffic? A checklist for finding the cause](https://measuremy.site/blog/sudden-drop-in-website-traffic)
- [What is an MCP server? A plain-English guide for people who run websites](https://measuremy.site/blog/what-is-an-mcp-server)
- [What Is the Urchin Tracking Module?](https://measuremy.site/blog/what-is-the-urchin-tracking-module-and-why-utm-stuck-around)
- [What Microsoft MCP servers actually do](https://measuremy.site/blog/microsoft-mcp-servers-explained)
- [UTM parameters for email newsletters](https://measuremy.site/blog/utm-parameters-for-email-newsletters)
- [Track Button Clicks Without Google Tag Manager](https://measuremy.site/blog/how-to-track-clicks-on-a-button-without-google-tag-manager)
- [How to track the results of a social media post without cookies](https://measuremy.site/blog/how-to-measure-the-results-of-a-social-media-post)
- [How to track traffic from a GitHub README](https://measuremy.site/blog/how-to-track-traffic-from-a-github-readme)
- [How to measure a product launch without guessing](https://measuremy.site/blog/how-to-measure-a-product-launch)
