Glossary

Google Lists Seven Separate Causes of not set in GA4

Taras Shynkarenko
Taras Shynkarenko
•Updated: •7 min read
Google Lists Seven Separate Causes of not set in GA4Google Lists Seven Separate Causes of not set in GA4

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.

DimensionGoogle's documented causeWhat to change
Google Ads dimensionsAds 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 groupPaired 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_groupUnpair content group from those events, stop sending an empty string
Custom defined User IDA user ID registered as a custom dimensionUse 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_visitWait out the 24 hours, recheck
Consent modeThe 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 grantedCall 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.

A marketing team reviews traffic source data on a laptop screen, the kind of session where source/medium turns up (not set).

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.

One week, one report
Total sessions84,000
(not set) sessions12,480
Conversions with no channel250
A 14.86 percent (not set) share at a 2 percent conversion rate works out to 250 conversions with no channel attached.

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.

A person calculates percentages on paper next to a laptop, the manual check needed before trusting a (not set) share.

Flowsery
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.

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

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

Related Articles