Channel taxonomy — sources and mediums

How Ordinary maps raw UTM values to canonical channel names so reports consolidate variant spellings, and how to customize the mapping.

Ordinary Written by The Ordinary Team · Updated
On this page

A channel taxonomy is a rule book that turns messy UTM values from the real world into clean, consistent labels in your reports.

The problem

Marketers (and agencies, and influencers, and Meta’s auto-UTM generator, and your own past self a year ago) don’t agree on how to tag URLs. Real examples from a single merchant’s attribution data:

  • utm_source=facebook
  • utm_source=Facebook
  • utm_source=fb
  • utm_source=meta
  • utm_source=facebook_ads
  • utm_source=FB
  • utm_source=facebook_paid

All are the same thing. Without consolidation, your UTM breakdown shows 7 separate rows and each looks smaller than the real Facebook spend.

What Ordinary does

Every UTM value gets resolved through a 3-step lookup:

  1. Per-org overrides — your customized mappings (highest priority).
  2. Global defaults — seed mappings that apply to every org (cover common aliases like fb → facebook, ig → facebook).
  3. Fallback to raw lowercased value — if no rule matches, the raw value is used as-is, lowercased.

The resolved value is a canonical name. Reports group by the canonical name, so all Facebook variants collapse into one row.

Global defaults

Ordinary ships with a seed set covering the usual aliases. Examples:

  • Source: fb, facebook_ads, meta → facebook
  • Source: ig, instagram → facebook — Instagram is part of Meta, so Instagram traffic groups with Facebook under the Meta label in reports.
  • Source: gads, adwords → google
  • Source: yt → youtube
  • Medium: cpc, ppc, paid, paid_social → cpc
  • Medium: email, eml → email

These are read-only from your side. If you need a different canonical on any of them, add a per-org override that wins.

Per-org overrides

Add on Settings → Channel Taxonomy. Starter and higher only.

Channel Taxonomy settings: raw UTM source aliases mapped to a canonical channel, each with an Override button. Demo data.

Fields:

  • Alias — the raw UTM value you want to rewrite (case-insensitive).
  • Kind — source or medium.
  • Canonical — what it should become in reports.

Examples:

  • Alias tiktok_paid, kind source, canonical tiktok — collapses your paid TikTok variants.
  • Alias influencer_X, kind source, canonical influencer — groups all your influencer campaigns under one source.
  • Alias newsletter, kind medium, canonical email — so “newsletter” and “email” don’t split into separate rows.

When mappings apply

  • Channel reports — Marketing Mix and the attribution reports look up your source mappings when they load, so a new source mapping regroups past orders there straight away. If you add an override tomorrow for fb → facebook, historical orders whose touch had utm_source=fb consolidate under “facebook” in those reports. No backfill needed.
  • Visit-level data — each visit is stored with the canonical values that applied when it was recorded. A new mapping applies to visits recorded after you save it; earlier visits keep their original value in visit-level views.

The “direct” and “unknown” buckets

  • Rows with no utm_source at all fall under direct/none — usually direct URL visits, email clients that strip tracking, or customers reopening a browser tab.
  • Rows where the source resolves to an empty string or “null” are lumped into unknown. Usually a tagging accident.

Both are visible in the attribution report so you can size how much of your traffic isn’t attributable to a source.

Did this answer your question?

Thanks for your feedback! 🙌

Related articles