TL;DR, Quick Answer
7 min read(not set) is Google's placeholder for a dimension that received no value, and Google's help article names a separate cause for each dimension that shows it: unlinked Google Ads accounts, a missing session_start event, a session with no page_view event, an empty content_group, a User ID registered as a custom dimension, a custom parameter younger than 24 hours, and consent mode calling default where it should call update. Google publishes no acceptable percentage of (not set), so measure the share yourself and fix the dimension that owns it.
What does not set in GA4 mean?
Google Analytics writes not set in GA4 into a report row when it received no value for the dimension in that row, and the cause changes from one dimension to the next. Google's definition is one sentence: "(not set) is a placeholder name that Analytics uses when it hasn't received any information for a dimension." Name the dimension first, because the repair for a Google Ads row and the repair for a landing page row have nothing in common.
The same article flags a neighbour: "The '(data not available)' value is a related value that can appear in reports." The two point in opposite directions. (not set) blames your collection setup. (data not available) blames Google holding a figure back.
Is (not set) the same as a blank value?
No. GA4 reserves the placeholder for the case where nothing arrived. Google's dimensions and metrics reference draws the line: "(not set) is a placeholder used when data hasn't been received for a dimension. When you send an empty value to Analytics, you will see a blank value instead of (not set); (not set) appears when no value is sent." A column of blanks means your tag fired and sent an empty string; a column of (not set) means the parameter never reached Google.
Content group breaks that rule, and Google documents the exception itself: "(not set) can also appear when your event sends the content_group parameter but it's an empty value, for example (content_group: "")." Treat the blank rule as the default and content group as the one named exception.
Which dimensions produce (not set), and what causes each one?
Google's help article splits the answer across seven dimensions, each with its own cause. Nothing outside this list is documented, so anything you read elsewhere is somebody's inference.
| Dimension | Google's documented cause | What to change |
|---|---|---|
| Google Ads dimensions | Ads and Analytics are not linked, auto-tagging is off, traffic arrives from unlinked Google Ads accounts, or destination URLs carry "incomplete or incorrect UTM parameters" | Link the accounts, switch auto-tagging on, repair the tags |
| Session source / medium | "sessions where the automatically collected event session_start is missing" | Move the Google tag onto the Initialization - All Pages trigger |
| Landing page | "a session doesn't have a page_view event" | Confirm page_view fires on entry pages |
| Content group | Paired with automatically collected events such as session_start and first_visit, which "don't accept the content_group parameter", or the event sends an empty content_group | Unpair content group from those events, stop sending an empty string |
| Custom defined User ID | A user ID registered as a custom dimension | Use the User-ID feature instead |
| Custom parameters | "the first 24 hours after you register a custom parameter", and values absent from the first event that triggered session_start or first_visit | Wait out the 24 hours, recheck |
| Consent mode | The default command used where update belongs, so "the initial event with the session_start parameter is lost", or events sent with denied consent after consent was granted | Call update after the banner interaction |
Three of those rows are tagging faults, and UTM tagging is the one you can audit today without touching code. The consent mode row is the one to check against your banner, which Google consent mode v2 covers in full.

Why is session source / medium (not set)?
Session source / medium turns (not set) when the session has no session_start event, which Google traces to a Google tag firing on the wrong trigger type instead of "Initialization". The knock-on effect is the part teams miss: Google states that when session source / medium is (not set), "your traffic will be shown as Unassigned in the default channel group as there are no channel rules that match the event data." Unassigned and (not set) are one failure seen from two reports, which is also why teams confuse both of them with direct / none in GA4.
Google documents one more session-level case: sessions carrying the srsltid parameter without a google.com referrer, which Google attributes to "actions like sharing modified URLs" and states are "not classified as organic." Check your landing page URLs for srsltid before you blame the tag.
How do you calculate the (not set) share of a report?
Divide the rows holding the placeholder by the total for the same dimension over the same date range.
(not set) share = (not set) sessions / total sessions x 100
Take a week with 84,000 sessions where 12,480 sit in the (not set) row for session source / medium. 12,480 / 84,000 = 0.1486, so 14.86 percent of the week has no attributable source. At a 2 percent conversion rate that is 250 conversions with no channel attached, which is the number to take into a budget meeting. Google publishes no acceptable percentage for (not set), so the figure only means something against your own previous weeks.
Do (other) and data thresholds create (not set) rows?
No. Three labels, three mechanisms, and mixing them up sends you fixing the wrong thing. The (other) row appears "when the number of rows in a table exceeds the table's row limit", at which point Analytics "surfaces only the most common dimension values and condenses less common values under the (other) row". Google's cardinality guidance sets the trigger at "more than 500 unique values in one day" and the property ceiling at "a cardinality limit of 50,000 values. Thereafter, cardinality control is implemented."
Data thresholds are the third label. Google withholds rows "to prevent anyone viewing a report or exploration from inferring the identity or sensitive information of individual users", and states that "Data thresholds are system defined. You can't adjust them." Read the mechanics in GA4 data thresholding before you call a shrinking report a tagging bug.

Flowsery
Start FREE Trial
Real-time dashboard
Goal tracking
Cookie-free tracking
What does Google not document about (not set)?
Three claims circulate widely and appear nowhere in Google's documentation. Ad blockers and Safari's tracking protection are not named as causes of (not set) in the help article, so treat that link as an inference, not a documented rule. No acceptable percentage of (not set) is published anywhere in Google's docs, which makes every "under 5 percent is fine" benchmark somebody's house rule. And Universal Analytics' (not provided) for organic keywords is a separate value from a separate product, absent from the GA4 article entirely.
If a cause is not on Google's list, prove it in a debug session before you rewrite your tagging.
How do you stop losing sessions to (not set)?
Fix the dimension that owns the row, then verify against a real session, not a report. Every cause on Google's list is a collection problem, so the evidence you need is what the browser sent, not what the aggregate table shows a day later.
Flowsery records every user session and runs cookie-free and EU-hosted with no data sampling, so a session with a broken source becomes a replay you can watch, not a row you cannot open. It detects JavaScript errors, rage clicks and drop-offs on its own and sends each issue to Slack, Linear or Jira with the replay attached. If the unit itself is still fuzzy, what is a session sets the boundary.
Frequently asked questions
Does (not set) mean my GA4 tracking is broken?
Not on its own. Google defines the value as a placeholder for a dimension that received no information, and several documented causes are configuration choices, not faults, such as a custom parameter registered less than 24 hours ago. Match the dimension to Google's list before you call it a break.
Can I filter (not set) out of a GA4 report?
You can hide the row with a report filter, but the sessions stay in the property and the missing value does not come back. Google warns about the same trap for the (other) row: the data quality warning shows "but no (other) row appears in the report" because a filter hid the grouped results. Hiding a row changes the view, not the collection.
Why does Unassigned appear next to (not set)?
They come from the same gap. Google states that if session source / medium is reported as (not set), "your traffic will be shown as Unassigned in the default channel group as there are no channel rules that match the event data." Fix the missing session_start event and both labels shrink together.
Does consent mode cause (not set)?
Google names two consent mode errors. Using the default command to set all consent values, including updates after the banner interaction, means "the user_engagement event isn't sent, and the initial event with the session_start parameter is lost". Events sent with denied consent after consent was granted are "treated as a separate session, which won't have a session_start event". Use the update command for post-banner changes.
Is (not set) the same as (other)?
No. (not set) means no value was received for the dimension. (other) means values were received but the table exceeded its row limit, so Analytics condensed the least common ones into one row. Google notes both "other" and "(other)" express high cardinality with "no significant difference between them".
How long does a new custom parameter show (not set)?
Google gives a figure for this one: (not set) can appear "during the first 24 hours after you register a custom parameter", after which "you should have the expected parameter values". If the placeholder outlives 24 hours, the parameter is not reaching Google and the fault is in your tag.
What causes (not set) for Google Ads dimensions?
Google Ads dimensions turn (not set) when the two products are not linked, when auto-tagging is switched off, when traffic comes from an unlinked Google Ads account, or when destination URLs carry incomplete or incorrect UTM parameters. Link the accounts, turn auto-tagging back on, and check every landing page URL for a broken tag. Any of the four breaks attribution the same way, so audit all four before you decide which one is at fault.
What is the difference between (not set) and (data not available)?
Google's own article names them as a related pair pointing in opposite directions. (not set) means your collection setup never sent the value, while (data not available) means Google is holding a figure back on its own end. Confusing the two sends you fixing a tag that was never broken.
Why does content group show (not set) even when other dimensions show blank instead?
Google documents content group as the one named exception to its own rule. Every other dimension shows a blank when the tag sends an empty value and reserves (not set) for when nothing arrives, but content group shows (not set) even for an empty string, for example content_group: "". The same row also turns (not set) when it is paired with an automatically collected event such as session_start or first_visit, since those events do not accept the content_group parameter.
Does the srsltid parameter cause (not set) in GA4?
Google documents a separate session-level case for it. A session carrying the srsltid parameter without a google.com referrer traces back to actions like sharing modified URLs, and Google states that traffic is not classified as organic. Check your landing page URLs for srsltid before you blame the session_start tag for a source/medium problem.
Was This Article Helpful?
Let us know what you think!
See us more often in Google
One click marks Flowsery as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.
Before you go...
Flowsery
Revenue-first analytics for your website
Track every visitor, source, and conversion in real time. Simple, powerful, and cookie-free.
Real-time dashboard
Goal tracking
Cookie-free tracking
Related Glossary Terms


What direct / none in GA4 Means and How It Differs From (not set)
Seeing direct / none in GA4 means a session arrived with no referrer and no campaign tag. How it differs from (not set), Unassigned and the Direct channel.


Reading Engagement Rate in Google Analytics 4
GA4 reports engagement rate as engaged sessions divided by total sessions. A session counts as engaged at 10 seconds, one key event, or two page views.


What the Numbers Say About Average Bounce Rate by Industry
Nine tracked industries return a documented average bounce rate by industry ranging from 35.76% to 48.38%, sourced from Databox data dated September 2024.


What Average Session Duration Actually Measures
In classic analytics, average session duration gives zero recorded time to the very last pageview of every session, which quietly drags the average down.


Why Direct Traffic Is the Bucket for Everything Analytics Could Not Attribute
Sessions land in direct traffic when no referrer and no campaign tag survive the hop. The real causes: referrer policies, apps, PDFs, redirects, QR codes.


One Page of Traffic Settles Bounce Rate vs Exit Rate
Reading bounce rate vs exit rate comes down to two denominators. One pricing page returns a 40% exit rate and a 15% bounce rate in the same week.
Related Articles


Why Pageviews vs Sessions vs Users Never Match on One Report
Comparing pageviews vs sessions vs users shows three separate counts that roll up into each other and rarely land on the same number twice.


What the Safari 7 Day Cookie Limit Actually Restricts
Apple's Safari 7 day cookie limit caps script-set first-party cookies, and a shorter 24 hour cap applies after certain cross-site link clicks.


How Session Timeout Rules Quietly Inflate Your Analytics
A session timeout closes an idle visitor's session, and the default 30-minute rule is why the same traffic reports different counts.

