·4 min read·Guides
UTM Parameters Explained, and Why GA4 Shows "Unassigned" Traffic
How UTM parameters work in Google Analytics 4, the naming rules that keep reports clean, and how to stop campaign traffic landing in the Unassigned channel.
UTM parameters are tags on a link (utm_source, utm_medium, utm_campaign) that tell Google Analytics where a visit came from. GA4 sorts visits into channels using fixed rules based on source and medium. Traffic lands in "Unassigned" when the combination matches none of those rules, most often because the medium is non-standard, such as "print" or "insta_story". Use standard mediums like social, paid_social, cpc, email, referral or affiliate.
Do it now, free and without uploading anything: UTM Builder, QR Code Generator, WhatsApp Link Generator.
You run an Instagram ad, send a newsletter and print a flyer, and a week later Google Analytics shows most of the visits as "Direct" or "Unassigned". UTM parameters fix that, but only if they are named the way GA4 expects.
What UTM parameters are
UTM parameters are labels added to the end of a link:
https://example.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=diwali_sale
When someone clicks, GA4 reads the labels and records the visit against that source, medium and campaign. Without them, visits from email apps, WhatsApp, messaging apps and many mobile apps arrive with no referrer and are counted as Direct.
| Parameter | Records | Example |
|---|---|---|
| utm_source (required) | Where the click came from | newsletter, instagram, google |
| utm_medium (required) | The type of traffic | email, social, paid_social, cpc |
| utm_campaign (required) | The campaign or promotion | diwali_sale_2026 |
| utm_content | Which link, ad or button | header_link, video_ad_a |
| utm_term | The paid keyword | running shoes |
| utm_id | Campaign ID for cost imports | cmp_0425 |
How GA4 assigns channels
GA4 puts every visit into a default channel group, such as Organic Search, Paid Social, Email or Referral, using fixed rules that look at source and medium. Some examples of how the rules behave:
| Source | Medium | GA4 channel |
|---|---|---|
| facebook, instagram, linkedin | paid_social, cpc, paid… | Paid Social |
| google, bing | cpc | Paid Search |
| facebook, instagram, whatsapp | social | Organic Social |
| any (e.g. newsletter) | ||
| a partner's name | affiliate | Affiliates |
| a website's name | referral | Referral |
| an ad network | display, banner, cpm | Display |
| flyer | Unassigned |
GA4 matches known social, search, video and shopping sites by name, which is why "instagram" with medium "social" is recognised but a made-up source and medium are not.
Why traffic ends up in "Unassigned"
The channel is Unassigned when a visit matches none of the rules. The common causes:
- A non-standard medium. "print", "poster", "influencer", "insta_story" and "bio_link" are not mediums GA4 knows. This is by far the most common cause.
- A near-miss medium with an unrecognised source. Medium "social" counts as Organic Social with any source, but "social_post" only does if GA4 recognises the source as a social site. With a source like "influencer-anna", it is Unassigned.
- Missing or mistyped parameters, such as utm_source without utm_medium, or "utm_medum".
- Data sent without session information, for example some server-side or Measurement Protocol events.
The fix for the first three is the same: use a standard medium, a recognisable source, and put your own detail into utm_campaign or utm_content instead of inventing new mediums.
Build links that land in the right channel
- Open the UTM builder and enter the page address.
- Pick a quick start such as Instagram ad, Instagram bio, Email newsletter or WhatsApp, or type your own source and medium.
- Add the campaign name, and content for the specific link or ad.
- Read the GA4 channel line under the link. If it says Unassigned, change the medium before you share the link.
- Copy the link, or tap Make a QR code for this link for print.
Values are lowercased by default, so you never split "Facebook" and "facebook" into two sources.
Naming rules for clean reports
- Lowercase everything. GA4 reports values exactly as written.
- No spaces. Use hyphens or underscores; the builder converts spaces for you.
- Standard mediums only: social, paid_social, cpc, email, referral, affiliate, display, sms.
- Detail goes in campaign and content, for example campaign "diwali_sale_2026" and content "story_swipe_up".
- Keep a shared list of the sources and mediums your team uses, so links are consistent.
Offline and print
Flyers, packaging and posters have no GA4 channel of their own, so even a well-tagged printed QR code is reported as Unassigned or under your chosen medium. Two workable approaches:
- Tag print links consistently, for example source "flyer" or "packaging", medium "print", and analyse them by source and campaign rather than by channel.
- Create a custom channel group in GA4 with an "Offline" channel that matches your print medium.
Make the code itself with the QR code generator, from the tagged link. For WhatsApp campaigns, the WhatsApp link generator creates the chat link, and the message itself can say where the customer came from.
Common mistakes
| Mistake | Effect | Fix |
|---|---|---|
| Inventing a medium per campaign | Traffic lands in Unassigned | Standard medium; detail in campaign or content |
| Mixed capitalisation | One source split into several rows | Lowercase everything |
| UTMs on internal links | Real sources overwritten | Only tag links coming from outside your site |
| Manual UTMs on Google Ads | Conflicts with auto-tagging | Leave auto-tagging on, no manual UTMs |
| Different names for the same source | "ig", "insta" and "instagram" counted separately | Agree a list and stick to it |