Why your app traffic is filed as search
A link tapped in a mail app was being logged as organic search. The referrer was not missing, it was misleading.
The symptom
Organic search traffic that does not match anything in your search console, arriving on pages you have never ranked for, often deep in the site. Meanwhile a campaign you know produced clicks appears to have produced nothing.
What is happening
When a link is opened from inside a mobile app, the referrer is often set by the app platform rather than the app itself, and it frequently names the parent company's main domain. A tap in a mail client can arrive looking like it came from that company's search engine.
Naive classification then does what it is told. The referrer is a search domain, so it goes in the search bucket. The data is not corrupt, the interpretation is.
Why it matters
Two channels are wrong simultaneously and in opposite directions. Search looks better than it is, so you keep investing in it. Email or messaging looks dead, so you stop. The decision that follows is confidently wrong.
Fixing the classification
Do not classify on the referrer domain alone. Combine it with signals that distinguish a real search visit:
- A genuine search referral usually carries a recognisable search path, not a bare domain
- App traffic frequently carries campaign parameters, if you tagged the link
- Landing page is a strong hint: search sends people to indexed pages, an email sends them to whatever you linked
Where you cannot distinguish confidently, put it in an explicit unknown bucket. An honest unknown is more useful than a confident misattribution, because it stops you acting on it.
Fix it in one place
Classify once, at capture, and store both the raw referrer and the derived channel. Then when you discover a pattern like this, you can reclassify historic data because you kept the original. Systems that only store the derived value cannot be corrected, and you find that out at exactly the moment you need to.
Check your other sites
This kind of bug is copy-paste shaped. If the same tracking code runs on several properties, fix them together. Ours was corrected on one site and left broken on two others for days, which meant three sites reporting the same channel three different ways.
Need help with any of this?
These notes are free and always will be. If you would rather someone just set it up, or you are stuck on something similar, get in touch at hello@opsira.io.