UTM Parameters
Chapter 8 — Creating a UTM Naming Convention
A tight UTM naming convention prevents broken attribution and messy reports. These rules define allowed values, construction patterns, and alignment with GA4 so every link speaks the same language.
utm_medium values like “cpm,” GA4 may place traffic in Unassigned. Use a controlled list (e.g., paid-social, cpc) to lock clean channels.The Four Locks Framework (keep decisions simple)
- Lock 1 — Vocabulary: Approve a finite
utm_mediumlist. - Lock 2 — Sender: Define how
utm_sourcenames platforms and partners. - Lock 3 — Pattern: Standardize
utm_campaignwith fields and separators. - Lock 4 — Detail: Set patterns for
utm_contentandutm_termfor creative and targeting depth.
What a good naming convention answers
- What values are allowed for each parameter
- How values are constructed (order, separators, casing)
- How to avoid collisions and ambiguity
- How values align with analytics channel groupings (GA4)
Lock the vocabulary for utm_medium
Decide a finite list. Treat it like a controlled dictionary.
utm_medium (approved) |
When to use |
|---|---|
| All marketing and sales emails (newsletters, nurtures, sequences). Example: a nurture series to MSSP prospects. | |
| social | Organic social posts. Example: a product tip on a LinkedIn company page. |
| paid-social | Paid ads on social platforms. Example: LinkedIn Sponsored Content to CFOs. |
| cpc | Paid search and keyword-targeted ads. Example: Google Ads for “manufacturing MRP software.” |
| display | Programmatic/banner placements. Example: placements on industry news sites via DV360. |
| affiliate | Affiliate or partner-driven traffic. Example: a reseller’s tracked link. |
| referral | Sponsored listings that behave like referrals. Example: a G2 profile button using UTMs. |
| video | Paid or sponsored video placements. Example: YouTube pre-roll. |
| audio | Podcast ads and audio networks. Example: a sponsored CFO podcast episode. |
| events | Traffic from event QR codes or event portals. Example: a trade show banner QR to a demo page. |
| direct-mail | Offline mail or printed collateral. Example: a brochure QR to a landing page. |
Rules
- Use lowercase only.
- Do not invent new mediums mid-campaign. Propose updates centrally and version your list.
- If a platform could map to multiple mediums, choose one based on objective and buying method, then stay consistent. For example, LinkedIn Ads = paid-social; organic LinkedIn posts = social.
Define utm_source: who sent the traffic
Use the platform, publisher, or partner name—never the campaign.
| Medium | utm_source examples |
Notes |
|---|---|---|
| hubspot, marketo, salesloft | Use the sending system for marketing or sales emails. | |
| social | linkedin, twitter, github, mastodon | Organic posts from brand handles or communities. |
| paid-social | linkedin, meta, x-ads, reddit | Use the ad platform’s canonical name. |
| cpc | google, bing | Search engines for paid search. |
| display | dv360, thetradedesk, industry-daily | DSPs or named publishers. |
| affiliate | impact, cj, partner-name | Network or partner slug (e.g., northtech-partners). |
| referral | g2, capterra, stackshare | Directories and software review sites. |
| video | youtube, vimeo | Video platforms for paid placements. |
| audio | megaphone, spotify, podbean | Podcast networks. |
| events | rsa-conference, dreamforce | Event sites or portals. |
| direct-mail | postcard, brochure, catalog | Print format if no platform exists. |
Rules
- Lowercase; use hyphens for multiword sources (e.g., search-engine-journal).
- Use the canonical platform name your team agrees on; do not switch between linkedin and li.
Set a single utm_campaign pattern—then never break it
Pick one pattern and apply it universally.
Recommended patterns
- Enterprise ABM: [fy][yy]_[q#]_[objective]_[product]_[audience]_[region]
- Always-on demand gen: [fy][yy]_[objective]_[product]_[region]
- Launches/time-bound: [fy][yy]_[q#]_[launch-name]_[product]_[region]
Field guidance
- objective: awareness, demand, abm, retention, upsell
- product: short code for the solution (erp, siem, cdn, bi-cloud)
- audience: role or segment (cxo, secops, devops, smb, enterprise)
- region: ISO country (us, de) or geo cluster (na, emea, apac)
- q#: q1–q4 aligned to your fiscal calendar
Sample values that fit the pattern
- fy26_q1_abm_erp_cxo_us
- fy26_demand_siem_emea
- fy26_q2_launch_edge-analytics_cio_na
Rules
- Lowercase, words separated by underscores; use hyphens only inside product names if required.
- Use consistent dictionaries for objective, product, audience, and region.
Standardize utm_content and utm_term
This section sets naming patterns, not analytics behavior.
utm_content pattern: [format]_[variant]_[cta]
- format: banner, carousel, singleimage, textad, email, webinar, pdf
- variant: v1, v2, a, b (tie to your creative sheet)
- cta: demo, ebook, pricing, contact
- Example: carousel_v1_demo or email_v2_pricing
utm_term pattern (when used): [keyword-or-list] or [segment-id]
- For search: the-keyword or a token like kw_erp_software
- For lists/segments: abm-list-a, list_enterprise-50
- Example: siem-software or abm-list-chemicals
Case, separators, and special characters
- Case: all lowercase across every parameter.
- Separators: underscores between fields; hyphens within multiword values (edge-analytics). This improves readability and reduces channel misclassification.
- No spaces; no punctuation beyond hyphen/underscore.
- Length: keep each field concise (ideally under 25 characters).
Dates and timeframes
- Put fiscal year first (fy26) to keep reporting consistent across calendar differences.
- Quarters are optional for always-on programs; required for bursts and launches.
- For monthly specificity in email or social, append mmm (mar, apr) when needed.
- Example: fy26_q1_demand_siem_emea_mar
Geography and language
- Use ISO 3166-1 alpha-2 for countries (us, de) and standard region clusters (na, emea, apac).
- Add language only when content differs by language (en, de, fr) as a suffix to campaign or content.
- Example: fy26_demand_bi-cloud_dach +
utm_content=pdf_de
Product and solution codes
- Maintain a short, unambiguous product code list.
- Avoid synonyms (siem vs security-analytics). Pick one and enforce it.
GA4 default channel grouping alignment
If mediums do not match GA4 expectations, traffic can land in Unassigned. Align your utm_medium values as follows.
| Use case | Recommended utm_medium |
Example utm_source |
GA4 default channel |
|---|---|---|---|
| Google/Bing search ads | cpc | Paid Search | |
| Organic social post | social | Organic Social | |
| Paid social ad | paid-social | Paid Social | |
| Programmatic/banner | display | dv360 | Display |
| Email marketing | hubspot | ||
| Affiliate program | affiliate | impact | Affiliates |
| Sponsored directory/referral | referral | g2 | Referral |
| Podcast ad | audio | megaphone | Audio (may require custom rule) |
| Video ad | video | youtube | Video (may require custom rule) |
| Event QR | events | rsa-conference | Other (consider custom rule) |
| Direct mail QR | direct-mail | postcard | Other (consider custom rule) |
Note: GA4 channel rules evolve. Align with current GA4 documentation and keep a short translation table in your playbook.
Document the convention (the one-page UTM playbook)
Keep it short and enforceable.
| Section | What to include | Example snippet |
|---|---|---|
| Purpose & scope | Where this applies | “Applies to all links leaving TrackFunnels properties.” |
| Parameter rules | Medium, source, campaign, content, term | “utm_medium must be one of: email, social, paid-social, cpc, display, …” |
| Dictionaries | Approved values for objective, product, audience, region | objective: awareness, demand, abm; product: siem, erp, … |
| Patterns | Regex or templates for utm_campaign and utm_content |
utm_campaign: fy[0-9]{2}_(q[1-4]_)?(awareness|demand|abm|retention|upsell)_[a-z0-9-]+_([a-z0-9-]+) |
| GA4 mapping | Medium-to-channel table | See mapping above |
| Examples | 6–10 complete parameter sets | paid-social + linkedin + fy26_q1_abm_erp_cxo_us |
| Change log | Dated changes to dictionaries | “2026-03-15: added product code ‘edge-analytics’.” |
Complete parameter sets that obey the rules
LinkedIn ABM ad
utm_source=linkedinutm_medium=paid-socialutm_campaign=fy26_q1_abm_erp_cxo_usutm_content=carousel_v1_demoutm_term=abm-list-a
Google Ads demo offer
utm_source=googleutm_medium=cpcutm_campaign=fy26_demand_siem_emeautm_content=textad_a_demoutm_term=siem-software
Email nurture wave 2
utm_source=hubspotutm_medium=emailutm_campaign=fy26_q2_retention_bi-cloud_customer_nautm_content=email_v2_pricingutm_term=—
Event QR code at RSA
utm_source=rsa-conferenceutm_medium=eventsutm_campaign=fy26_q2_awareness_soar_secops_nautm_content=qr_v1_demoutm_term=—
Quick decision checklist
- Have we chosen a fixed
utm_mediumlist that maps to GA4? - Is
utm_sourcethe platform/publisher only? - Does
utm_campaignfollow a single documented pattern? - Are objective/product/audience/region values from approved dictionaries?
- Are all values lowercase with allowed separators?
- Do complete parameter sets exist in the playbook?
- Open a regex tester and paste the following ABM regex:
- Test these
utm_campaignvalues:fy26_q1_abm_erp_cxo_us(should match)FY26_Q1_ABM_ERP_CXO_US(should fail: casing)fy26_q1_demand_edge_analytics_cio_na(should fail: extra underscore vs hyphen)fy26_abm_siem_cxo_emea(should match if quarters are optional per your pattern)
- Adjust your product codes and region list in the regex, then retest.
- Save the final regex into your UTM builder.
^fy[0-9]{2}_(q[1-4]_)?(awareness|demand|abm|retention|upsell)_[a-z0-9-]+_[a-z0-9-]+_(us|ca|uk|de|fr|es|it|nl|se|no|dk|pl|cz|in|au|nz|jp|sg|hk|cn|kr|br|mx|ar|za|ua|ru|na|emea|apac)$
Test your knowledge
Loading quiz questions...