Channels & UTM Classification
Every visit Zenovay records is sorted into a channel: a short label that answers "where did this visitor come from?" Channels are what power the Sources breakdown, so getting them right is mostly a matter of tagging your links consistently. This page explains the channels, the exact order Zenovay uses to pick one, the UTM conventions that keep your reports clean, and the edge cases that trip people up.
The channels
| Channel | What it means |
|---|---|
| Direct | No referrer and no campaign tags. Someone typed your address, used a bookmark, or arrived from an app that hides the source. |
| Organic | Unpaid visits from a search engine (Google, Bing, DuckDuckGo, Yandex, Ecosia, Brave Search, Baidu, Naver, and similar). |
| Paid | Advertising clicks. Ad platforms either attach a click ID automatically or you tag the link with a paid medium. |
| Social | Social and community platforms (Facebook, Instagram, X, LinkedIn, TikTok, YouTube, Reddit, Pinterest, Discord, Threads, Mastodon, and more), including links opened inside a social app's built-in browser. |
Newsletter and campaign email, whether you tag it with utm_medium=email or send it from a recognized email platform. | |
| Referral | A link from another website that is not search, social, or email. This is also the fallback for any tagged visit whose tags do not match a more specific channel. |
| AI Traffic | Visits that arrived from an AI assistant or answer engine (ChatGPT, Claude, Perplexity, Gemini, Microsoft Copilot, and others). This is tracked alongside the channel above, so an AI visit is also counted as Organic or Referral depending on how the platform links out. |
AI Traffic is a separate flag, not a replacement for the channel. A visitor from Perplexity is counted as Organic in the channel breakdown and also appears in the AI view; a visitor from ChatGPT is counted as Referral and also appears in the AI view.
How Zenovay picks a channel
Zenovay checks a series of signals in priority order and stops at the first one that matches. All text matching is case-insensitive.
| Order | Signal | Result |
|---|---|---|
| 1 | An ad click ID is present (gclid, fbclid, ttclid, msclkid, wbraid, gbraid, twclid, li_fat_id, dclid, yclid, epik) | Paid |
| 2 | utm_medium | See the keyword table below |
| 3 | utm_source (only if there is no utm_medium) | Matched against known ad, social, and email platforms |
| 4 | Referrer domain | Search engine to Organic, social platform to Social, webmail to Email, anything else to Referral |
| 5 | In-app browser (the visit opened inside a social app) | Social |
| 6 | Nothing above matched | Direct |
Step 2: utm_medium keywords
If a utm_medium is present, Zenovay looks for these keywords inside the value (a substring match, so paid-social matches paid):
If utm_medium contains | Channel |
|---|---|
cpc, ppc, paid, display, banner, cpm, native, rich_media | Paid |
email | |
social | Social |
referral, affiliate | Referral |
organic, search | Organic |
| any other value | Referral (a tagged visit is never Direct) |
Step 3: utm_source fallback
utm_source is only consulted when there is no utm_medium. The source is matched against curated platform lists:
utm_source looks like | Channel |
|---|---|
An ad platform (googleads, google_ads, adwords, bingads, bing_ads, dv360, amazon_ads) | Paid |
A social platform (facebook, instagram, twitter, linkedin, tiktok, youtube, pinterest, reddit, snapchat, discord, threads, bluesky, mastodon, whatsapp, telegram) | Social |
| An email platform (Mailchimp, Klaviyo, HubSpot, ActiveCampaign, Brevo, ConvertKit, MailerLite, Beehiiv, Customer.io, Substack, Resend, Loops, and many more) | |
| Anything else | Referral |
Recommended UTM conventions
Tag your links with these conventions and traffic lands in the channel you expect. Keep every value lowercase and consistent.
| What you are linking | Recommended tags | Lands in |
|---|---|---|
| Newsletter or broadcast email | utm_medium=email (plus utm_source= your email tool) | |
| Paid search (Google Ads, Microsoft Ads) | Usually automatic via the click ID. Otherwise utm_medium=cpc | Paid |
| Paid social ad | utm_medium=paid-social or utm_medium=cpc, plus utm_source=facebook | Paid |
| Organic social post | utm_medium=social, utm_source=linkedin | Social |
| Display or banner ad | utm_medium=display (or banner) | Paid |
| Affiliate or partner deal | utm_medium=affiliate | Referral |
| Sponsorship or other partner link | utm_medium=referral | Referral |
Either utm_medium=email or a recognized email-platform utm_source is enough to land in Email. You do not need both. The same is true for social and paid platforms: a clear utm_medium is the most reliable signal.
For paid social, always include a paid utm_medium such as cpc or paid-social. If you tag only utm_source=facebook with no medium, the visit is read as organic Social, not Paid, because the source alone looks like a normal social platform.
Edge cases
These are the real gotchas, each with the exact behavior.
- "paid-social" and similar count as Paid, not Social. Any
utm_mediumthat contains the textpaidmatches the Paid rule, and Paid is checked before Social. Useutm_medium=socialfor organic posts, and accept that paid social lands in Paid (which is usually what you want for ad reporting). - An ad click ID beats every UTM. If a link carries
gclid,fbclid,ttclid,msclkid, or another known ad click ID (wbraid,gbraid,twclid,li_fat_id,dclid,yclid,epik), the visit is Paid even if you also setutm_medium=email. Do not append ad click IDs to newsletter links. - An unknown
utm_mediumbecomes Referral. A tagged visit is never Direct. If you invent a medium likepartner,qr, orsms, it lands in Referral rather than a channel of its own. - Missing
utm_sourcewith autm_mediumset: the medium decides.utm_medium=emailalone gives Email,utm_medium=cpcalone gives Paid, andutm_medium=anything-elsealone gives Referral. - Missing
utm_mediumwith autm_sourceset: the source decides, matched against the known ad, social, and email platform lists. Unrecognized sources become Referral. Note that a paid-ad source name such asfacebook-adsstill reads as Social here (the wordfacebookmatches the social list), which is why you should always add a paidutm_mediumfor ads. - Untagged email often shows as Direct. Most email clients send no referrer, so an untagged newsletter link looks like Direct. Gmail on the web and Outlook on the web are detected and counted as Email even without tags, but native and mobile mail apps usually are not. Tag every newsletter link with
utm_medium=email. - Platform subdomains count as Social. Links from platform subdomains such as
m.facebook.com,l.instagram.com,out.reddit.com, ormobile.twitter.comresolve to their parent platform and land in Social, not Referral. - Generic email words must match the whole source.
utm_source=campaign,ghost,drip, orloopscount as Email only when the value is exactly that word. A value likeutm_source=summer-campaignis not an email signal and lands in Referral. Distinctive platform names (mailchimp,klaviyo,newsletter, and similar) still match inside longer values. - Link shorteners follow their destination. X's
t.cois recognized as Social. Other shorteners redirect to the final site, so the channel follows whatever referrer the browser ends up reporting. - Self-referrals count as Direct. If the referring page is your own site (an internal link), the visit is treated as internal navigation and counted as Direct, not Referral.
- Some AI engines appear under Organic. Perplexity, You.com, and Brave Search are treated as search engines for the channel, so they show under Organic while also being flagged as AI Traffic. Most other assistants (ChatGPT, Claude, Gemini) show under Referral plus the AI Traffic flag.
- Casing creates duplicate sources. Classification is case-insensitive, so
utm_source=Emailandutm_source=emailboth land in the Email channel. But the raw tag is stored exactly as written, so the two appear as separate rows in the Source breakdown. Always lowercase your tags.
FAQ
Why does my email traffic show as Direct?
The link had no utm_medium=email and no recognized email-platform source, and the mail client sent no referrer. Add utm_medium=email to every newsletter link and the problem goes away for future sends.
Why is my "bing" + "cpc" campaign labeled "Bing Ads" on the Revenue tab?
The Revenue tab uses friendly display names. When utm_source is a known search engine (google, bing, yahoo, duckduckgo) and the visit is marked as paid, it shows "Bing Ads" style labels; the same engine seen organically shows "Bing (Organic)". The paid label appears when the medium contains any paid keyword (cpc, ppc, paid, display, banner, cpm, matched case-insensitively) or when the click carried an ad click ID.
Why did my "Paid Social" campaign land in Paid instead of Social?
Any utm_medium containing paid matches the Paid rule, which is evaluated before the Social rule. Use utm_medium=social for organic posts. Paid social ads intentionally count as Paid.
Why is my Google Ads click Paid when I did not add any UTMs?
Google appends a gclid click ID to ad clicks automatically, and a click ID always classifies as Paid. You do not need to tag Google or Microsoft ad links manually.
Why do Perplexity and You.com visits show under Organic? They are treated as answer and search engines for the channel. They are also flagged as AI Traffic, so you can still isolate them in the AI view.
Why are "email" and "Email" two different sources? Casing. The channel is the same for both, but the stored source string is kept verbatim, so different capitalizations split into separate rows. Lowercase everything to keep one clean row per source.