Documentation Index
Fetch the complete documentation index at: https://docs.linkutm.com/llms.txt
Use this file to discover all available pages before exploring further.
Why this matters
Every marketer on your team types UTMs differently.Newsletter vs newsletter vs news_letter creates three separate rows in GA4. Six months later, your channel attribution is split across dozens of near-duplicate source/medium combos and no one can tell you what drove pipeline last quarter.
A naming convention costs 30 minutes to set up. The cleanup it prevents costs weeks.
This is an opinionated default. Pick the parts that fit your team, enforce them with UTM Rules, and update the vocab list quarterly. A convention that gets followed beats a perfect one that doesn’t.
The format
- Lowercase only:
googlenotGoogle - Hyphens between words:
q2-launchnotq2_launchnotQ2 Launch - No spaces, no slashes, no special characters
- No dates inside
utm_campaign(the date is in your analytics tool, not your UTM) - No PII: no email addresses, user IDs, or names
Parameter guide
utm_source: where the traffic came from
Use the platform name, lowercase, hyphen-separated. Lock this to a fixed vocab list.| Value | Use for |
|---|---|
google | Google Ads, Google Shopping |
meta | Facebook Ads, Instagram Ads |
linkedin | LinkedIn Ads |
tiktok | TikTok Ads |
x | X (Twitter) Ads |
newsletter | Your own email sends |
youtube | YouTube Ads or organic video |
podcast | Podcast sponsorships |
affiliate | Affiliate/referral partners |
partner-{name} | Named partnerships, e.g. partner-hubspot |
direct | QR codes, offline, vanity URLs |
organic-social | Non-paid social posts (Instagram, LinkedIn, X) |
allowed_values rule on utm_source in UTM Rules. Anyone using an off-list value gets a rejection on save, not a messy row in GA4 three weeks later.
utm_medium: what kind of traffic
Medium = the marketing mechanism, not the platform.| Value | Use for |
|---|---|
cpc | Cost-per-click paid search (Google, Bing) |
paid-social | Any paid social placement |
email | All email: newsletter, nurture, outbound |
display | Banner/programmatic display |
video | Pre-roll, connected TV, YouTube TrueView |
affiliate | Revenue-share or performance partner links |
organic-social | Non-paid social posts |
podcast | Audio sponsorship read |
qr | QR codes (physical → digital) |
referral | Inbound from other sites (unpaid) |
GA4 uses
medium to populate the Default channel grouping report. Stick to these values and your channels will auto-group correctly. Invent your own and they fall into “Unassigned.”utm_campaign: what campaign this link belongs to
Pattern:{quarter}-{theme}
- Always start with the quarter (
q1/q2/q3/q4) orevergreenfor always-on - Theme is 1-3 words, hyphen-separated, describing the campaign’s purpose
- No year in the value; your analytics date filter handles that
- Same campaign name across all channels that belong to one campaign
utm_content: which creative or placement
Useutm_content to tell variants apart within a campaign + channel combo.
Common patterns:
| Pattern | Example | Use for |
|---|---|---|
{creative-name} | hero-cta-blue | A/B ad creative variants |
{placement} | sidebar footer inline | Placement within a page/email |
{subject-line-variant} | subject-a subject-b | Email subject line tests |
{cta-copy} | start-free-trial see-pricing | CTA copy variants |
{format} | video static carousel | Ad format |
utm_content blank in templates; fill it per link. If you bake it into a template, every link inherits the same content value and the variant data is useless.
utm_term: paid search keywords only
utm_term = the keyword that triggered the ad. Used almost exclusively for paid search.
utm_term for audience segments or targeting notes; that data belongs in your ad platform, not your UTM.
Channel cheatsheet
Copy-paste starting points per channel. Fillutm_campaign and utm_content per link.
- Google Ads
- Meta Ads
- LinkedIn Ads
- Affiliate / Partner
- QR Codes / Offline
{keyword} as a literal ValueTrack parameter in Google Ads; it auto-populates the triggering keyword.Bad to good examples
| Before | Problem | After |
|---|---|---|
utm_source=Email | Caps → splits from email in GA4 | utm_source=newsletter |
utm_source=email | Ambiguous. Which email type? | utm_source=newsletter |
utm_medium=Social Media | Spaces + caps | utm_medium=paid-social |
utm_campaign=Q2 2025 Campaign | Spaces, caps, year | utm_campaign=q2-brand-awareness |
utm_campaign=newsletter_may_19_2025 | Date baked in, will duplicate each week | utm_campaign=q2-weekly-digest |
utm_content= (empty) | No way to tell creative variants apart | utm_content=hero-cta |
utm_term=linkedin | Term field used for channel | Delete; that’s what source/medium is for |
utm_source=FB | Abbreviation, won’t match meta filter | utm_source=meta |
utm_campaign=test | Will pollute prod data, no meaning | Block with UTM Rules prohibited values |
Enforce it with UTM Rules
Setting this convention once doesn’t help if someone ignores it two weeks later. Pair this playbook with UTM Rules to make the convention self-enforcing. Minimum ruleset to configure:Force lowercase + hyphen
Enable
forceLowercase: true and set spaceCharacter: "-". This catches 80% of drift automatically.Lock utm_source to your vocab
Add a Required Field rule:
validationType=allowed_values on utm_source. Paste in your approved source list. Anyone using FB, Email, or Insta gets rejected on save.Lock utm_medium to your vocab
Same rule on
utm_medium. Your allowed list: cpc, paid-social, email, display, video, affiliate, organic-social, podcast, qr, referral.Require utm_campaign
Required Field rule:
validationType=not_empty on campaign. No campaign name, no link saved.Block test / draft values
Add
prohibitedValues: ["test", "draft", "tbd", "todo", "xxx"]. Prevents test links from leaking into production data.Governance
A naming convention rots if no one owns it. Assign these before you ship.| Role | Responsibility | Cadence |
|---|---|---|
| Convention owner (usually MOPs lead) | Approves new source/medium values, updates UTM Rules allowed lists, resolves disputes | On-demand + quarterly review |
| All link creators | Use linkutm templates for every new link; never hand-type UTMs | Per link |
| Analytics owner | Flags new GA4 “Unassigned” rows as signal that convention has drifted | Weekly |
- Convention owner approves the new value
- Add it to the
allowed_valueslist in UTM Rules - Create a new template for the channel (see Create a template)
- Update this playbook
utm_source=IG takes one week to create and six months to clean up.
Quick-start checklist
Copy the allowed source and medium lists above
Edit them to match your actual channels. Delete any you don’t use.
Configure UTM Rules
Minimum:
forceLowercase, source allowed_values, medium allowed_values, campaign not_empty.Create templates for your top 5 channels
Newsletter, Google Ads, Meta, LinkedIn, and your highest-volume partner. See Create a template.
Run your existing links through the audit
Filter GA4 → Source/Medium report → look for rows with caps, spaces, or off-list values. Those are your cleanup targets.