GA4’s channel reports don’t read utm_medium on its own. Paid Search, Organic Social, Email: every label in that report comes out of the Default Channel Group, a set of rules matching source and medium combinations against known patterns. Send utm_medium=cpc from a recognized ad platform and it slots straight into Paid Search. Send a value the rules have never encountered (a typo, something invented for internal shorthand, a medium that means something to your team but nothing to Google’s rule set) and there’s nothing there to catch it.
The hit still gets recorded. Nothing errors, nothing drops. What happens is quieter: the session lands in Unassigned, GA4’s default bucket for traffic that didn’t match any channel rule. It’s not gone: the raw source and medium are still sitting in the underlying data, queryable in Explore; it’s just no longer next to Paid Search and Organic Social in the report someone’s actually scanning each morning.
A healthy account always has some Unassigned traffic; it’s not a red flag by itself. The problem is how it grows: a one-off value here, an inconsistent internal campaign there, until someone eventually notices it’s bigger than it should be and has to go reconstruct, after the fact, what all of it actually was.