Skip to main content
Terminus
Contents
FoundationsChapter 3 · ~9 min read

Your First Taxonomy

A simple, ready-to-use naming system with a starter template for your UTM parameters.

On this page

Chapter 1 gave you dimensions. Chapter 2 gave you the parameters that carry them. This chapter turns both into something your team can run tomorrow: a taxonomy, with approved sources, approved mediums, one campaign naming pattern, and the rules that keep all three clean.

Stride Footwear will build theirs in 45 minutes before the chapter is out.

What Is a Marketing Taxonomy?

A structured classification system for everything your marketing team does: campaigns, content, activities, across every channel. In practice, that means a common language plus the rules that govern your URL parameters and marketing metadata, so data collection stays consistent, reporting stays reliable, and teams stay aligned on what the words mean.

Applied well, the taxonomy becomes the single source of truth for campaign metadata. It eliminates data silos by defining precisely what each value means: “Channel: Social” and “Channel: Paid Social” are different things, and the taxonomy is where that difference is written down. That precision is what makes aggregation and comparison across campaigns, channels, and time periods trustworthy.

Without one, marketing data fragments into inconsistent labels, and meaningful analysis becomes nearly impossible.

What’s left is guessing with charts.

The Five Decisions Behind Every Naming Convention

Every naming convention makes the same five decisions, whether it lives in a two-tab spreadsheet or the most sophisticated enterprise taxonomy. Most teams make two of them by accident.

  1. What segments to include. Channel, source, campaign name, product, region, audience, objective, date: which dimensions does your reporting actually need? Start with the fewest that answer your key business questions. (Chapter 1 is how you find them.)
  2. What order they go in. When multiple dimensions share a single field (like utm_campaign), order decides readability and parsing. The dimension you filter by most goes first.
  3. What delimiter to use. Something has to separate segments from each other, and words within a segment. We recommend the two-delimiter convention: hyphens between segments, underscores within (summer_sale-shoes-2025_q2). Chapter 6 covers advanced delimiter strategies.
  4. What values are allowed for each segment. The controlled vocabulary: the approved list that stops facebook vs. Facebook vs. fb before it starts. A naming convention without a controlled vocabulary is just a suggestion.
  5. Who has authority to add new values. Someone owns the vocabulary or nobody does. Without a clear owner, new values appear organically and consistency degrades. Even a solo marketer should decide consciously when to add a new value versus reuse an existing one.

Decisions 1–3 define the structure. Decision 4 defines the content. Decision 5 defines the governance.

Most teams get 1–3 right and skip 4 and 5. That’s why their data fragments.

Don’t overthink the five on day one. The Flat approach below makes them for you, implicitly. As your taxonomy grows (Chapter 6), you’ll revisit each one deliberately.

The Flat Approach: Start Here

There are several ways to structure UTM values, and Chapter 6 covers the advanced ones. For most teams getting started, Flat is the right answer: human-readable values with no internal structure. You type whatever describes the campaign.

utm_source   = facebook
utm_medium   = social
utm_campaign = summer_sale

Intuitive, and zero tooling required. It also breaks down fast without governance: one person writes facebook, another writes Facebook, a third writes fb, and your analytics splits one source into three entries.

The fix is not complicated. An approved list of allowed values for each parameter, and everyone draws from it.

Starter Taxonomy: Copy This and Customize

Here’s that list: a ready-to-use set of approved values that works for most businesses. Copy it into a shared document or spreadsheet, then add or remove values for the channels and platforms you run.

Starter utm_source values:

ValueUse when traffic comes from…
googleGoogle Ads, Google organic
bingMicrosoft/Bing Ads
facebookFacebook organic or paid
instagramInstagram organic or paid
linkedinLinkedIn organic or paid
twitterX/Twitter organic or paid
tiktokTikTok organic or paid
youtubeYouTube descriptions, cards, ads
newsletterYour own email newsletter
promotional_emailOne-off promotional emails
partnerPartner or co-marketing (append partner name: partner-acme)
podcastPodcast show notes or ads
qr_codeQR codes on physical materials
direct_mailDirect mail pieces
eventConferences, trade shows, meetups

Starter utm_medium values:

ValueUse for…GA4 Channel Group (or equivalent)
cpcPaid search (Google Ads, Bing Ads)Paid Search
paid_socialPaid social ads (Facebook Ads, LinkedIn Ads)Paid Social
socialOrganic social postsOrganic Social
emailAll email (newsletters, promos, drip)Email
displayDisplay/banner adsDisplay
affiliateAffiliate linksAffiliate
referralPartner links, guest postsReferral
offlineQR codes, print, events, direct mail(Unassigned: custom grouping)
videoYouTube ads, video campaignsOrganic Video (“video” doesn’t match GA4’s paid rule)

Why paid_social uses the underscore, like everything else: One law covers every value in this taxonomy: underscores join words inside a value, and hyphens only ever separate values from each other. No exceptions, mediums included. The reason is that your medium travels. In a structured campaign name, hyphens are the split points. In an Adobe-style composite parameter, one cid carries medium, source, and campaign as hyphen-split segments. Put a hyphen inside the value and any parser that splits on hyphens reads two segments where you meant one; paid_social comes out whole everywhere. GA4 doesn’t care either way: its paid rule is a prefix pattern, anything starting with paid from a social source lands in Paid Social, so paid_social and paid-social classify identically. The trap to respect is GA4’s other rules, the exact-match lists: social-media is on the Organic Social list, social_media is not. We defuse that with vocabulary, not punctuation: multi-word mediums exist only in the paid family, and every organic medium is a single GA4-native token (social, email, display, referral). GA4’s channel grouping is a labeling layer your values should pass through cleanly, not the system your taxonomy serves. See Chapter 11 for the full list of GA4-recognized medium values.

A leaner alternative, for completeness: minimal mediums. Some teams collapse the whole paid family into a single paid value and let the source carry the channel (facebook + paid is paid social; google + paid is paid search). GA4 handles it fine (paid matches the same prefix rule), and the vocabulary gets smaller. The cost surfaces in the warehouse: every channel split now needs a source-to-category lookup joined in, where paid_social and cpc carry the channel on their own. We keep the richer mediums for that reason.

utm_campaign naming pattern:

One consistent structure: [initiative]-[product]-[yyyy_mm]

Examples:

  • spring_sale-shoes-2025_03
  • webinar-product_demo-2025_04
  • brand_awareness-2025_q2
  • newsletter_weekly-2025_03

The date sits in YYYY_MM format, so campaigns sort chronologically. Initiative and product are separate segments, so campaigns filter by either.

What if a campaign runs past its date? If spring_sale-shoes-2025_03 runs into April, keep the original value. Don’t create new UTMs mid-campaign. The date in your campaign name marks when the campaign launched, not when it ends; change values mid-flight and a single campaign becomes two line items in your reports, and total performance becomes impossible to see. If you regularly run campaigns spanning multiple months, use a quarter (2025_q2) or omit the month entirely. Match the date granularity to your actual campaign cadence: monthly launches get yyyy_mm, quarterly initiatives get yyyy_q#, and evergreen campaigns get the year alone or no date at all.

Industry-Specific Starter Segments

The starter taxonomy above is deliberately generic. Here’s how the utm_campaign segments typically differ by business type:

SegmentB2B SaaSE-commerceAgency (per client)
Channelpaid_search, paid_social, organic_social, email, webinar, partnerpaid_search, paid_social, organic_social, email, affiliate, influencerSame as client’s vertical
Campaign typebrand_awareness, demand_gen, product_launch, nurture, retentionprospecting, retargeting, seasonal, clearance, loyaltyDefined per client
Audienceenterprise, mid_market, smb, existing_customersnew_visitors, cart_abandoners, past_buyers, lookalikeDefined per client
Geographyus, emea, apac, latam (or country codes)us, uk, eu, au (or by shipping zone)Per client’s markets
Date / flight2025_q1 or 2025_01 (never both)spring_2025 or 2025_03 (align with seasons)Standardize across clients

These are starting points, not prescriptions. Pick the segments that answer questions your leadership actually asks. If nobody asks about geography, don’t track it. You can always add segments later.

Note: For complete industry-specific starter taxonomies with full controlled vocabularies, see the taxonomy templates in the Terminus template library.

Stride Footwear’s taxonomy runs live below. Dana assembles it in the next section, so open the dropdowns first and the approved values will already be familiar by the time she picks them.

Loading the live builder…

Follow Along: Stride Footwear

Dana sits down with her team and builds Stride’s taxonomy. She starts with her four board-meeting questions (Chapter 1) and works backward to the values she needs.

Stride’s approved sources: google, facebook, instagram, newsletter, promotional_email, qr_code-[location]

Stride’s approved mediums: cpc, paid_social, social, email, offline

Stride’s campaign naming pattern: [initiative]-[product]-[yyyy_mm]

She tests it against their upcoming spring campaign:

Channelutm_sourceutm_mediumutm_campaign
Facebook adfacebookpaid_socialspring_sale-runners-2025_03
Instagram adinstagrampaid_socialspring_sale-runners-2025_03
Weekly newsletternewsletteremailspring_sale-runners-2025_03
Google search adgooglecpcspring_sale-runners-2025_03
Retail display QRqr_code-fleet_feet_nycofflinespring_sale-runners-2025_03

Same utm_campaign everywhere. Source and medium change per channel. She puts the values in a shared Google Sheet, locks the cells, and tells the team: “If a value isn’t on this sheet, don’t use it. If you need a new one, ask me first.”

Total time: 45 minutes. Tagging the actual links is Chapter 4.

Naming Conventions: The Rules That Prevent Data Fragmentation

The starter taxonomy earns nothing on its own. It works when everyone follows the same rules, and these are the rules.

  • Consistency is paramount. Whatever conventions you choose, apply them uniformly: every campaign, every channel, every team member.
  • Lowercase. Always. No exceptions. (Chapter 5 shows why casing is one of the most common sources of data fragmentation.)
  • Underscores join words. Spaces get URL-encoded into %20 and produce ugly, error-prone values in reports; don’t use them at all. Write spring_sale, not spring sale. This is half of the two-delimiter convention used throughout this guide: underscores within values, hyphens between segments in structured campaign names (spring_sale-shoes-2025_03). The rule has no exceptions; multi-word mediums follow it too (paid_social). Start with underscores and your values work in both the Flat and Structured approaches (Chapter 6), no migration required.
  • No special characters. ?, &, =, #, +, and % have reserved meanings in URLs and will break your tracking.
  • Never tag internal links. UTM parameters are for external inbound links only. This is the single most damaging UTM mistake; Chapter 5 explains exactly how it breaks your data.
  • No redundancy. If utm_source=facebook, don’t set utm_medium=facebook_social. Each parameter carries its own distinct information.
  • Audit quarterly. Review your analytics for fragmented values, unapproved terms, and drift. Even good naming conventions degrade without maintenance.
  • Plan before launch. Define conventions before campaigns go live. Retroactively fixing bad data costs far more than preventing it.

One more rule holds the other eight together.

Document everything. Naming conventions, approved values, examples: all of it, in one shared document that everyone who creates links can find. That document is your Tracking Constitution: the written law of how your team tags, and the place every argument about a value goes to get settled. If a rule isn’t in the constitution, it isn’t a rule. It’s folklore.

Bad

  • ?utm_source=Facebook&utm_medium=Social Media&utm_campaign=Summer Sale 2025!
    • uppercase
    • spaces
    • spaces and special character

Good

  • ?utm_source=facebook&utm_medium=paid_social&utm_campaign=summer_sale-2025
    • lowercase
    • GA4-compatible
    • underscores within, hyphens between

The cost of breaking these rules is real. Tag utm_source as facebook, Facebook, FB, and facebook.com, and your reports show four distinct sources. Manually cleaning and aggregating them becomes a recurring tax on analyst time. Well-enforced naming conventions are the prerequisite for analytics you can scale and trust.

Governance Scales Down to One Person

Everything above (approved values, naming conventions, documentation, auditing) is taxonomy governance.

The word sounds enterprise-heavy. The practice scales all the way down to a team of one:

Just YouSmall Team (3–10)Large Org (50+)
ToolsSpreadsheet with approved valuesShared doc + link builder with dropdownsDedicated platform with controlled vocabularies
Who enforcesYou (self-discipline)Team lead or marketing opsTaxonomy guardian / data governance team
How you auditSpot-check GA4 quarterlyPull a report of all UTM values quarterlyAutomated validation + scheduled audits
What “good” looks likeNo duplicate sources in reportsZero unapproved values entering analyticsCross-team, cross-region consistency with audit trails

At every scale, the core job is the same: define the rules that produce clean analytics, then embed those rules into the way people already work. Growing doesn’t switch you to a different practice. It deepens the one you have.

If you want to feel what governance is like before committing to a tool, look for platforms with a sandbox or playground mode: an ephemeral workspace where you can try different taxonomy structures, test cascading dropdowns, and see how validation works without affecting real data.

For agencies

When you run taxonomies for multiple clients, don’t build one giant shared list: start each client from a locked base template and customize sources per client. The Agency Playbook covers the full architecture.

Small Teams: Keep It Simple, Keep It Consistent

If you’re a small business or a team of 1–3 people, you don’t need complex tooling or a multi-dimensional taxonomy. You need basic insight into which channels and campaigns drive traffic and conversions.

  • Three core UTMs. Use utm_source, utm_medium, and utm_campaign consistently. Add utm_content and utm_term only when you’re actively A/B testing or running paid search.
  • Simple values. Draw from the starter taxonomy above: a small, predefined list.
  • Consistency over sophistication. Always facebook, never FB. Even simple tracking breaks down without consistent naming.
  • One primary goal. Answer questions like “Is Facebook advertising or email driving more leads?”

For tooling, Google’s free Campaign URL Builder is sufficient at this scale.

Notice what’s missing from that sentence. We used to recommend starting with a spreadsheet. After watching dozens of teams try it, we think that’s bad advice. Start with a builder tool from day one: the spreadsheet never gets maintained. (Your Tracking Constitution still lives in a shared doc; the rulebook is fine there. It’s the link building where spreadsheets fail.)

The biggest risk at this size isn’t complexity. It’s no tracking at all. A simple, consistently applied taxonomy delivers far more value than an ambitious system that gets abandoned. Start simple, prioritize consistency, and expand as needs grow; Chapter 6 covers scaling when you’re ready.

And when a team has tracking but no shared rules, here’s what it costs.

A 40-person B2B SaaS company selling project management software had five marketers running campaigns across paid search, LinkedIn, email, and webinars, spending roughly $180K per quarter on paid channels. No shared naming convention. Their analytics showed facebook, Facebook, fb, and FB as four separate sources. LinkedIn appeared as linkedin, LinkedIn, li, and linked-in.

In the Q3 pipeline review, the VP of Marketing pulled up the channel performance slide and asked: “Should we shift budget from LinkedIn to Google next quarter?”

The analyst hesitated. She knew the LinkedIn data was split across four spellings. She couldn’t say by how much, not without hours of cleanup.

The room made the call anyway. $25K moved from LinkedIn to Google.

Then the team implemented a controlled vocabulary of allowed values for each UTM parameter, plus a centralized link builder that enforced those values through dropdown menus. Within one quarter, duplicate source entries dropped from 47 to zero. And when the analyst consolidated the historical LinkedIn data, the real numbers told a different story: LinkedIn had been generating 3x more pipeline per dollar than paid search.

The $25K shift had moved budget away from their best-performing channel.

Nobody could see it until the data was clean.

The fix was never a better analytics tool or a more sophisticated taxonomy. It was a shared list of approved values and a single place to create links. Governance at the point of creation eliminated the problem at the source, and with it, budget decisions made on fragmented data.


Key Points

  • Every naming convention comes down to five decisions: what segments, what order, what delimiter, what allowed values, and who owns them
  • Start with the Flat approach and the starter taxonomy above; it works for 80% of businesses
  • The naming rules (lowercase, the two-delimiter convention, no spaces, never internal links) are the difference between clean data and a mess
  • Consistency beats sophistication: a simple taxonomy used correctly outperforms an advanced one used inconsistently

Action Item: Copy the starter taxonomy table into a shared document; that’s page one of your Tracking Constitution. Review it with your team, adjust the values for your channels, and use it for your next campaign.

Next upChapter 4: Channel Playbook