• Courses
    • Courses
    • Course bundles
  • Blog
  • Resources
    • Youtube channel
    • E-books and Guides
    • GTM Recipes
    • View All Resources
    • GTM Community
    • GA4 community
  • Services
  • About
    • About
    • Contact
  • Login
  • Courses
    • Courses
    • Course bundles
  • Blog
  • Resources
    • Youtube channel
    • E-books and Guides
    • GTM Recipes
    • View All Resources
    • GTM Community
    • GA4 community
  • Services
  • About
    • About
    • Contact
  • Login

July 16, 2025

Unassigned in Google Analytics 4 (and how to fix it)

Updated: July 16th, 2025

You open the Traffic Acquisition reports in Google Analytics 4 and see a mysterious Unassigned. What is it, and how can it be eliminated? There are many possible reasons. Some can be fixed, and some should be accepted (unless Google fixes underlying problems).

In this blog post, I will explain what Unassigned in Google Analytics 4 is and a bunch of ways how you can fix it (if that’s possible).

Subscribe and Get the Ebook - Increase data accuracy in google analytics 4

Table of Contents

Here are the reasons why you have Unassigned in GA4:

  • What is Unassigned in GA4?
  • How to identify what traffic is displayed as Unassigned?
  • #1. Your UTM parameters are not following Google’s rules
  • What if most of the Unassigned traffic is (not set)?
  • #2. You are using Measurement Protocol incorrectly
  • #3. Make sure Google tag fires first
  • #4. Streaming events from other platforms to GA4
  • #5. Audience triggers
  • #6. Google-Ads-related issues
  • #7. UTM parameters are incomplete/incorrect
  • #8. Data has not been fully processed by GA4 yet
  • #9. session_start event is missing
  • #10. It might be related to reporting identity
  • #11. Manually overriding session_id
  • #12. Recurring payments
  • #13. Bot traffic
  • #14. Not all GA tags use server_container_url
  • #15. Cookies and identification (SGTM)
  • #16. SGTM + hardcoded Google Tag
  • Final words

 

Video tutorial

If you prefer video content, here’s a tutorial from my Youtube channel.

 

What is Unassigned in Google Analytics 4?

First, we need to take a brief look at Default Channel Group. Google Analytics 4 can group various traffic sources into larger buckets that give you a general overview of which channels perform the best for your company.

For example, you might have the traffic coming from Bing organic search and Google organic search. Both of these traffic sources will be added to an Organic Search default channel group.

Currently, there are 18 default channel groups:

  • Affiliates
  • Audio
  • Cross-network
  • Direct
  • Display
  • Email
  • Mobile Push Notifications
  • Organic Search
  • Organic Shopping
  • Organic Social
  • Organic Video
  • Paid Other
  • Paid Search
  • Paid Shopping
  • Paid Social
  • Paid Video
  • Referral
  • SMS

And there are fixed rules for how Google assigns a particular traffic source to one of these groups. For example, if a visitor comes from a known social media site and utm_medium contains “cpc”, that will be added to Paid Social.

You can see a list of all rules here. Click this link and scroll down to the section about “Channels for manual traffic”.

But if a traffic source (its medium, source, or another dimension) is not covered by those rules, the Default Channel Group will be Unassigned (because Google Analytics 4 does not know to which group should that traffic source be assigned).

Now, we are a bit familiar with the concept of the default channel group. Let’s look at various situations of why you might get Unassigned in GA4 and possible solutions.

I want to emphasize that not all situations have known solutions (at least right now).

 

How to identify what kind of traffic is displayed as Unassigned?

Seeing a long list of potential causes can feel overwhelming, but remember that you do not have to solve everything at once. The best approach is to act like a detective, calmly investigating one clue at a time. This guide is your list of suspects. Start by examining the most common ones for your business, such as your campaign tagging or a recent change to your setup, and methodically work your way through the possibilities. Each item you check off the list brings you closer to a solution.

In Google Analytics 4, go to Reports > Acquisition > Traffic Acquisition. Since GA4 allows us to customize standard reports, your left sidebar might look different. So if you don’t see an Acquisition section on the left sidebar, just keep clicking and looking for a report that is related to Traffic Acquisition.

The default dimension in that report is Default Channel Group.

unassigned default channel group in google analytics 4

If you see Unassigned there, then keep reading the guide. The first step is to identify what kind of traffic is treated as unassigned. Click the Plus icon in the table and add the Session Source/Medium dimension.

Then in the search field above the table, enter Unassigned and hit Enter on your keyboard. This will show you all Source/Medium values that remained Unassigned.

unassigned in google analytics 4

Now, let’s take a look at the reasons (and possible solutions) for the Unassigned traffic.

Subscribe and Get the Ebook - working with reports in ga4

#1. Your UTM parameters are not following Google’s rules

For example, if you offer as many free e-books as I do, you might want to track if people click links in your e-books. For that, I am using utm_medium=pdf. Unfortunately, GA4 does not know to which channel group to add it. Thus, such traffic is displayed as Unassigned.

ga4 unassigned

But this is normal to me. I expect this behavior. However, sometimes, I see companies tagging their marketing campaigns with UTM parameters that are just incorrect. Instead of using, for example, utm_medium=email, they use utm_medium=em, or utm_medium=mail, etc. Neither “em” nor “mail” will be recognized by GA4; thus, you will have unassigned.

Maintaining consistent and correct UTM parameters across all your campaigns, often called good “UTM hygiene,” is a solid way to prevent Unassigned traffic. This often requires team-wide alignment. Even one team member using utm_medium=paid-ad while another uses utm_medium=cpc for paid social campaigns can cause confusion in your reports. Establishing a simple, shared document of approved UTM values for your organization is a practical step that can significantly improve the quality of your traffic data.

The correct utm_medium values for email marketing campaigns are “email”, “e-mail”, “e_mail”, “e mail”. If you use one of these, your email marketing campaign traffic will be assigned to the “Email” default channel group.

So always keep an eye on the list of rules from this documentation. If possible, try to use values that GA4 automatically recognizes.

Alternatively, you can create custom channel groups in GA4 that can recognize your custom UTM values. But in that case, keep in mind that Unassigned will remain in the default group.

Subscribe and Get the Ebook - conversion tracking handbook

But what if most of your Unassigned traffic is (not set) or (data not available)?

This part is a bit painful and irritating. Some things can be fixed, and some happen for no apparent reason.

not set - google analytics 4 unassigned

Let’s take a look at various options. You can also read the blog posts about “not set” or “data not available”.

 

#2. You are using Measurement Protocol incorrectly

Measurement protocol (MP) is one of the ways you can send data to GA4. It is designed to send data from your server (e.g., CRM) to Google Analytics 4. However, it is designed to enrich the data you have collected on a website, not to initiate new sessions or create new users/visitors.

If a visitor is on your site and starts a session, you can send some additional events from the server and attach them to that session. You can do that up to 72 hours in the past. Here’s a tutorial on how to work with it.

If your developers send data via MP to the currently active session on your site, each event must contain client_id and session_id parameters. If session_id is not included (or the session_id does not match the ID of the currently active session), the traffic source of that session will be not set.

If your developers send data via MP to the session that has already timed out (but is not older than 72 hours), they also need to send a timestamp_micros parameter. If that is not done, then you guessed it – the source/medium will be not set.

So, if you are using Measurement Protocol, watch this tutorial to ensure it is implemented correctly.

 

#3. Make sure Google tag (a.k.a. GA config tag) fires first

It looks like if a GA4 event tag fires before the Google tag, this might increase the number of “not set” source/medium too. So you could set the Google tag to fire on Initialization – All pages trigger. Then (if you have some event tags that fire on “Pageview” triggers), try to delay them, for example, by setting them to fire on DOM ready or Window Loaded triggers.

This is especially important for server-side GTM setups. In the Google tag, you have to set the URL of your server-side endpoint. If an event tag fires before the Google Tag does, it will not know your server’s URL, and various messy things will happen. One of the results is (not set).

 

#4. Streaming events from other platforms to GA4

Some tools/platforms offer a feature to stream events to GA4, such as Amplitude or Segment. I haven’t worked directly with these tools (to comment on the technical details), but I have seen projects where they were used, and I guess that they are (probably) also using GA4 measurement protocol.

Since they (probably) don’t send the session_id, all of those events will be attributed to the (not set) source/medium. Hence, you get Unassigned in GA4.

What to do? I am not an expert in Segment, so I cannot comment on that. Maybe you should consider a direct/standard installation of GA4 (via GTAG or Google Tag Manager).

As for Amplitude’s event streaming – don’t stream. Keep using Amplitude for your needs, but when it comes to GA4, implement its event tracking as Google recommends (via GTAG or GTM).

Subscribe and Get the Ebook - 20 GA4 mistakes

#5. Audience triggers

When Google Analytics 4 launched this feature, I was excited. It allowed us to create more complex audiences, and when a visitor enters the audience, GA4 will automatically dispatch the event.

Later, I noticed that audience triggers also increased the number of (not set) traffic sources. This does not always happen, so the results/scope of this issue will vary across different properties.

I noticed that if your audience trigger is related to a predictive audience, then most likely, the event will not be added to any existing session. Thus, the source/medium will be (not set) / (not set), which leads to Unassigned in Google Analytics 4.

Sometimes, even regular audience triggers (without the “predictive” component) cause this problem.

Unfortunately, there is no solution for this. Audience triggers are handled in the backend of Google Analytics 4. So if you are using triggers (do not confuse this with Google Tag Manager triggers), then accept the fact that you will get more (not set) traffic sources than usual.

 

#6. Google-Ads-related issues

If you are using Google Ads, then check the following things:

  • See if you have connected Google Ads to Google Analytics 4. If not, fix it.
  • Check if auto-tagging is enabled. If not, it’s highly recommended to do so.
  • I also talk a bit more about these issues in this blog post.

 

#7. UTM parameters are incomplete/incorrect

If you use UTM parameters, always use at least utm_source, utm_medium, and utm_campaign.

Most of the rules in the GA4 documentation look at utm_source and utm_medium. Some are looking at utm_campaign.

If links of your marketing campaigns have, for example, just utm_campaign (example.com/?utm_campaign=upsell), utm_medium and utm_source will be (not set). Consequently, this campaign will be Unassigned in Google Analytics 4.

So my rule of thumb is always to use at least 3 UTM parameters: utm_medium, utm_source, utm_campaign.

 

#8. Data has not been fully processed by GA4 yet

It takes Google Analytics a while to process the data (between 24 and 48 hours). So if you look at your reports and check yesterday’s or (most likely) today’s data, you might see a spike in Unassigned traffic. That’s because unprocessed traffic source data can be displayed as (data not available).

This is normal in GA4, and you should be more patient. Check the same date range tomorrow, and the Unassigned in Google Analytics 4 should have fewer sessions.

 

#9. session_start event is missing

This one is a mystery. When I find sessions that have (not set) traffic sources, they often don’t have the session_start event (which is automatically dispatched by GA4).

missing session_start in google analytics 4

The first reason that comes to my mind is server-side tagging. You might have a setup where this event is excluded and not sent from your tagging server to GA4. Or maybe your GA4 event tag(s) sometimes fire before the Google tag.

Unfortunately, I could not find precise other reasons why this happens and how to avoid it. And the more I investigate this, the more it looks like a GA bug.

 

#10. It has to do something with reporting identity, too

Google Analytics 4 uses various methods to identify the visitors (user id, cookies, Google signals, etc.). Once, I had a project that was facing large Unassigned numbers. After I had checked all the known solutions, I still could not identify the reason. So, I started tweaking various settings to see if anything helps.

Apparently, changing the reporting identity to Device-based (as I explain here) helped, and the number of Unassigned sessions significantly dropped. I still don’t know the exact reason for this, but I just wanted to mention that tweaking the reporting identity might also be an option.

 

#11. Manually overriding session_id and messing it up

This is more like an edge case, but maybe someone will find it useful. I have seen one situation where the GA4 config tag (a.k.a. Google Tag) contained an overwritten session_id parameter (for no good reason). Something like this:

To make things even worse, the variable used in this setup generated a random number every time this Google Tag was activated (on every page load). This caused a huge (not set) issue for the traffic source dimensions, which meant that all that traffic was included in “Unassigned”.

 

#12. Recurring payments

Technically, this tip is directly caused by Measurement Protocol, but I thought to mention it separately because some readers just skim the titles in the articles.

If you are selling subscriptions and you want to track all recurring purchases with Google Analytics 4, most of them will be Unassigned. Remember what I said about measurement protocol? You must attach the event to an existing session that happened in the last 72 hours.

If the user has not logged in for longer (or your backend system does not know the most recent session’s ID), that purchase event will not have any traffic source data. This means that (not set) will be included in the Unassigned channel group.

This is a very common scenario for subscription-based businesses and is often an expected part of the data. A recurring payment that happens automatically each month is not initiated by a user clicking a link from a specific campaign. Since there is no new session associated with that revenue, Google Analytics correctly determines that it cannot assign it to a marketing channel. While this swells the Unassigned category, it is not an error but rather a reflection of how this type of transaction occurs.

 

#13. Bot traffic

If you are seeing sudden spikes in your traffic and most of that traffic is displayed as Unassigned (source/medium is (not set)), then it’s possible that you are getting bot traffic.

Even though (in most situations) bot traffic is displayed as direct traffic, it’s possible that they are not set in your case. Google Analytics 4 does not offer an advanced filtering option to exclude such traffic from reports; thus, you might need to look for a solution elsewhere, for example:

  • If your website uses Cloudflare as a content delivery network (CDN), you can take a look at its security level settings. You can set them to stricter, which would increase the chance of blocking unwanted bots.
  • You could also talk with the website’s developers and ask him/her to check the IP addresses of those spikes. Maybe there are just several IP addresses that are always used. If yes, then you could either ask the developer to block those IPs or you can block them in Google Analytics 4 (by using the Internal Traffic filters). If you are using server-side tagging, then you could add a blocking trigger to all your SGTM tags and prevent them from firing if the IP address is one of those spikes.

 

#14. Not all tags in server-side GTM have the server_container_url configured

If your Google Analytics is installed via server-side Google Tag Manager, make sure that all Google Tags are sending data to your server container URL.

Even though it’s enough (in most cases) to just include the server_container_url in the Google Tag, I would highly recommend doing the same thing in all GA4 event tags, too.

You can simplify the process by adding that parameter in the GA4 event settings variable.

Why is this important? If some tags send data to your SGTM endpoint while others can send data directly to Google Analytics, this can mess up the attribution.

 

#15. Cookies and Client Identification (SGTM)

The previously mentioned issue (about server_container_url) becomes even more common if your GA4 client (in the server-side container) is using the Server Managed option of “Cookies and Client Identification”.

And in general, when using JavaScript Managed identification, the issue of Unassigned seems to be smaller in GA4 (that’s why I usually use “JavaScript Managed”.

Keep in mind that the Server Managed option is the default when you create a Google Analytics 4 client, so if you want to use the JavaScript option, you will change it in every new GA4 client you create.

 

#16. SGTM + hardcoded Google Tag

Here’s a situation: you have Google Analytics installed via GTM, and it sends data to server-side GTM. But it’s also possible that you have a hardcoded Google Tag (GTAG) somewhere in the website’s source code. Maybe a developer added the gtag.js code directly to the website’s source code. Or maybe there is a Google Analytics plugin installed on a website.

This will cause issues with your tracking and attribution.

How can you know if there’s a problem? Check the Network tab of the developer tools. If some requests are going to google-analytics.com (or another Google domain) while others are going to your custom endpoint (of the SGTM container), this will cause Unassigned traffic.

Ideally, if you are using Google Tag Manager to install GA4, then all the events (that are tracked by the hardcoded gtag) should also be moved to GTM. For example, if gtag is tracking the generate_lead event, you should create a tag and a trigger for this event in the Google Tag Manager container.

There is no easy way to “move” tracking from hardcoded snippets to Google Tag Manager. You will need to review all events (tracked with gtag), decide which ones are important, and then configure them in GTM. After that is done, the hardcoded GA4 codes (or plugin) should be removed from the website.

 

Unassigned in Google Analytics 4: Final words

I know this is a painful topic. Many GA4 users are facing this, not only you. I wish all situations listed in this article had a solution, but the reality is different.

The key takeaways:

  • Unassigned in Google Analytics 4 means that Google could not assign traffic source to a particular default channel group
  • If you are using a custom naming convention for the UTM parameters, you will have a lot of unassigned traffic.
  • If you don’t care about channel groups, you can customize the Traffic Acquisition report and change the default primary dimension to Session Source/Medium.
  • Alternatively, you can create custom channel groups to assign traffic sources according to your needs
  • Often, Unassigned appears because of the (not set) traffic source or (data not available). This can be caused by unprocessed (yet) data, measurement protocol, incorrect use of UTM parameters, incorrect linking between GA4 and Google Ads, etc.
Subscribe and Get the Ebook - Server-side tagging
Julius Fedorovicius
In Google Analytics Tips
12 COMMENTS
Roger
  • May 23 2023
  • Reply

Hi Julius!
Just wanted to point out a typo. First chapter.
" Paid Organic" in this sentence:-)

"...For example, if a visitor comes from a known social media site and utm_medium contains “cpc”, that will be added to Paid Organic."

    Julius Fedorovicius
    • May 24 2023
    • Reply

    Thanks, fixed

      Roger
      • May 24 2023
      • Reply

      It should be "Paid Social".

        Julius Fedorovicius
        • May 25 2023
        • Reply

        It looks like I need a vacation :)

Shahar Pitaru
  • May 27 2023
  • Reply

Hi Julius,
Regarding your note on session_start event is missing.

I've made 10 GA4 installations in some of Israel biggest ecommerce websites and thoroughly analyzed their data. I constantly see approximately 3-5% of sessions which are missing the session_start event. This problem is consistent across all the websites I'm analyzing.
It seems to me that this is a GA4 bug or alternatively a bug in the GA4 setting tag. I had an idea of manually sending the session_start event on the first page load of a session. Have you ever tried anything like that?
I'll be happy to collaboration on further investigating this issue.

Dana
  • Aug 29 2023
  • Reply

Hi Julius
I´m doing a measurment implementation for an App, and my client wanted to know where the traffic came from.
Do I have to use the same utm parameters as if I were measurement a web?

MrDenz
  • Jan 4 2024
  • Reply

This happened to me 3 times in the last 2 weeks, here is the reason why, maybe it will help someone.

If you are selling something, anything that could lead to a huge spike in views around the New Year, or, around Catholic and then Orthodox Christmas Day, basically the days of the year when we were expected to have at least double the views, in my case it went up to 10x, this will happen and you will see in GA4 "unassigned".
Wait a few hours, all 3 times in my case everything was solved in a few hours, max 24 hours.
So it's very simple if you have an example, 1000 views per day for the last 2 months, and around the new year it goes from 1k to 10k, of course, according to my knowledge, Google wants to check all those "extra views", at least I think so, that by chance these people do not come from some dubious black-hat things, but that they are legitimate, so until Google checks everything through their filters, all views will eventually be "released" and placed in their place, of course, if you do some black-hat methods, expect the worst.

Thank you Julius for all your hard work mate, keep it up!

Happy new year and all the holidays you celebrate or have celebrated ;)

Jeshua
  • Jan 10 2024
  • Reply

Hi Julius! Any news on this point: "#9. session_start event is missing
"?

I have seen in several articles that this is a GA4 bug, but I would like to know if there has been any progress or someone can shed some light.

Have you tried to register later the user's campaign data through the "campaign_details" event? I have seen that it presents parameters with which we can indicate source, medium, etc. I leave here more details on the subject: https://developers.google.com/analytics/devguides/collection/protocol/ga4/ua-feature-matrix?hl=es-419#traffic_sources.

In any case thank you very much in advance!

Koen
  • Apr 17 2024
  • Reply

Hi Julius,

Very helpfull blog.

I have unassigned traffic with the UTM's I created for influencers. This is an example, can you what's going wrong?

https://website.com?utm_source=influencer&utm_medium=meta&utm_campaign=infuencersname

Kind regards,
Koen from the Netherlands

    Julius Fedorovicius
    • Apr 17 2024
    • Reply

    Yes, you just came up with things like utm_source "influencer". That is not mentioned in the documentation of the default channel group. Hence you have "unassigned". Either use a different UTM source or use a custom channel group. Custom channel group is a better option.

Leeza Patel
  • May 29 2024
  • Reply

Hi Julius,
The channel grouping is at Source/ Medium level whereas unassigned is showing at Session Source/ Medium level. Even if the assignment in manual channel is correct it will always show Unassigned. Is there a way to fix it?

Chinonso Emma-Ebere
  • Feb 25 2025
  • Reply

On point #10 I can shed some light here. Inconsistent setting of the user_id can cause a spike in not set. Once a user_id is un-set, google does not stitch sessions and a new session id is generated primarily without a session_strat and hence no attribution

Leave a comment Cancel reply

Your email address will not be published. Required fields are marked *


 

Hi, I'm Julius Fedorovicius and I'm here to help you learn Google Tag Manager and Google Analytics. Join thousands of other digital marketers and digital analysts in this exciting journey. Read more
Analytics Mania
  • Google Tag Manager Courses
  • Google Tag Manager Recipes
  • Google Tag Manager Resources
  • Google Tag Manager Community
  • Login to courses
Follow Analytics Mania
  • Subscribe to newsletter
Recent Posts
  • Conversion rate in Google Analytics 4
  • Google Tag Manager Data Layer Explained
  • Cross-domain tracking in Google Analytics 4
Analytics Mania - Google Tag Manager and Google Analytics Blog | Privacy Policy
Manage Cookie Settings