Back in August I blocked googletagmanager.com at the network layer and loaded a product page on a store running server side tracking. No _ga cookie got set, because Google’s tag never ran. The browse events left anyway, each one carrying an id that had been invented locally a second earlier.
From the reporting end that shows up as a block of new users whose Country, Landing page and Session source all read (not set), or Unassigned for the source. No page_view anywhere, just browse events. Every one counts as an active user, so the totals move and the reports underneath stop making sense. Merchants can usually name the day it started: the day a server side tracking tool went live.
It reads like a bot wave. Mostly it is not one.
The question came from a merchant before I went looking at it myself. The post stops before a fix list deliberately: the remedies differ per tool, and one of those tools is ours.
Geography has a boring answer. Events reaching GA4 through the Measurement Protocol arrive from whichever server sent them, and GA4 works out country and city from the IP on the request. The protocol carries an ip_override field so a server can pass the real one through. Leave it unset and the only address Google sees is the sender’s, so Country comes back blank.
Identity accounts for the other two columns. Google’s tag is what hands a visitor an id GA4 already recognises, and a hit arriving without one has no earlier session to inherit a landing page or a campaign from.
So who are those visitors?
Not bots, in large part. People. Anyone on uBlock or AdGuard, on Brave, on Firefox with strict protection, or behind a Safari content blocker never loads Google’s tag, and on plenty of storefronts that is a real slice of desktop traffic. Shopify’s own first party pixel does load for them, since it is not on anyone’s blocklist. So the day the server side tool goes on is the first day those customers appear in your reports, stripped of what the tag would have supplied. The traffic was always there. Your ability to see it is what changed.
Real crawlers are in there too. GA4 screens known bots on the IP and user agent of the request it receives, and that request now comes from a server, so the ones that run JavaScript get a pass.
Before filtering any of it, two checks. Exclude Country = (not set) and see whether what remains looks like your normal store, which tells you whether you have isolated the bucket or lost your data. And leave a partial day alone for a day or two, since attribution keeps settling and Unassigned shrinks on its own.
The split is the part I cannot give you. On a given store, what share of that block is a blocked browser and what share is a crawler? If anyone has pulled theirs apart I would like to hear how, because I have not found a clean way from inside GA4.