Skip to main content
9 min read

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

ChannelWhat it means
DirectNo referrer and no campaign tags. Someone typed your address, used a bookmark, or arrived from an app that hides the source.
OrganicUnpaid visits from a search engine (Google, Bing, DuckDuckGo, Yandex, Ecosia, Brave Search, Baidu, Naver, and similar).
PaidAdvertising clicks. Ad platforms either attach a click ID automatically or you tag the link with a paid medium.
SocialSocial 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.
EmailNewsletter and campaign email, whether you tag it with utm_medium=email or send it from a recognized email platform.
ReferralA 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 TrafficVisits 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.

OrderSignalResult
1An ad click ID is present (gclid, fbclid, ttclid, msclkid, wbraid, gbraid, twclid, li_fat_id, dclid, yclid, epik)Paid
2utm_mediumSee the keyword table below
3utm_source (only if there is no utm_medium)Matched against known ad, social, and email platforms
4Referrer domainSearch engine to Organic, social platform to Social, webmail to Email, anything else to Referral
5In-app browser (the visit opened inside a social app)Social
6Nothing above matchedDirect

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 containsChannel
cpc, ppc, paid, display, banner, cpm, native, rich_mediaPaid
emailEmail
socialSocial
referral, affiliateReferral
organic, searchOrganic
any other valueReferral (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 likeChannel
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)Email
Anything elseReferral

Tag your links with these conventions and traffic lands in the channel you expect. Keep every value lowercase and consistent.

What you are linkingRecommended tagsLands in
Newsletter or broadcast emailutm_medium=email (plus utm_source= your email tool)Email
Paid search (Google Ads, Microsoft Ads)Usually automatic via the click ID. Otherwise utm_medium=cpcPaid
Paid social adutm_medium=paid-social or utm_medium=cpc, plus utm_source=facebookPaid
Organic social postutm_medium=social, utm_source=linkedinSocial
Display or banner adutm_medium=display (or banner)Paid
Affiliate or partner dealutm_medium=affiliateReferral
Sponsorship or other partner linkutm_medium=referralReferral

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_medium that contains the text paid matches the Paid rule, and Paid is checked before Social. Use utm_medium=social for 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 set utm_medium=email. Do not append ad click IDs to newsletter links.
  • An unknown utm_medium becomes Referral. A tagged visit is never Direct. If you invent a medium like partner, qr, or sms, it lands in Referral rather than a channel of its own.
  • Missing utm_source with a utm_medium set: the medium decides. utm_medium=email alone gives Email, utm_medium=cpc alone gives Paid, and utm_medium=anything-else alone gives Referral.
  • Missing utm_medium with a utm_source set: 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 as facebook-ads still reads as Social here (the word facebook matches the social list), which is why you should always add a paid utm_medium for 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, or mobile.twitter.com resolve to their parent platform and land in Social, not Referral.
  • Generic email words must match the whole source. utm_source=campaign, ghost, drip, or loops count as Email only when the value is exactly that word. A value like utm_source=summer-campaign is 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.co is 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=Email and utm_source=email both 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.

Was this page helpful?