UTM parameters are the tags you append to every marketing link so analytics tools know where the click came from. They’re the difference between ‘78% of your traffic is Direct’ (which means you don’t know) and ‘the email newsletter drove 23% of last week’s conversions’ (which is actionable). Most SMBs tag links inconsistently and lose the data they’re supposed to be collecting. Here’s the convention we run.
The five UTM parameters
- `utm_source` — where the click came from. Use a single canonical name per source (`google` not `google.com`, `instagram` not `IG` or `Instagram`).
- `utm_medium` — the channel type. Use a small fixed list (see below).
- `utm_campaign` — the specific campaign name. Use a consistent format.
- `utm_content` — the specific creative or placement. Optional but useful for distinguishing variations.
- `utm_term` — the keyword (paid search) or audience segment. Optional, paid-search-specific.
The canonical utm_medium list
Stick to a fixed list. Don’t invent new mediums per campaign. GA4 has standard channels it groups by medium — using non-standard mediums kicks traffic into ‘Other’ and breaks reporting.
- `cpc` — paid search (Google Ads, Bing Ads).
- `social` — organic social posts.
- `paid_social` — paid social ads (Facebook Ads, LinkedIn Ads, etc.).
- `email` — email campaigns.
- `affiliate` — affiliate links.
- `referral` — links from another site you don’t control (handled automatically by GA4; don’t override with UTM unless you have a reason).
- `display` — display advertising (programmatic, banner ads).
- `video` — video ad placements (YouTube ads).
- `organic` — organic search (handled automatically by GA4; don’t override).
The utm_campaign naming convention
We use `[year]_[quarter]_[campaign-name]` for everything. `2026_q2_spring_promo`, `2026_q2_lead_gen`, `2026_q3_brand_awareness`. Year and quarter at the start so they sort chronologically; campaign name in kebab-case. Consistent format across email, paid, social.
Real examples
# Email campaign
https://yoursite.com/contact?utm_source=mailchimp&utm_medium=email&utm_campaign=2026_q2_spring_promo&utm_content=hero_cta
# Facebook ad
https://yoursite.com/lp/spring?utm_source=facebook&utm_medium=paid_social&utm_campaign=2026_q2_lead_gen&utm_content=video_15s_a
# Google Ads (auto-tagged by gclid usually, but utm works too)
https://yoursite.com/services/kitchen?utm_source=google&utm_medium=cpc&utm_campaign=2026_q2_kitchen_remodel&utm_term=kitchen+remodel+dallas
# Newsletter link
https://yoursite.com/blog/seo-cost?utm_source=newsletter&utm_medium=email&utm_campaign=2026_05_monthly_digestWhat NOT to do
- Don’t tag internal links. UTMs on your own site overwrite the original source attribution. A user landed via Google search, clicked a UTM-tagged button on your homepage, and Google credit gets erased.
- Don’t mix case. `Google` and `google` are different sources in GA4. Pick lowercase and stick to it.
- Don’t use spaces. URL-encoding makes them ugly. Use kebab-case or underscores.
- Don’t include PII. The campaign name should describe the campaign, not the recipient.
- Don’t use UTMs for organic search (GA4 detects it automatically) or direct referrers (GA4 detects them too).
Google Ads: gclid vs utm
Google Ads can auto-tag clicks with `gclid` instead of UTMs. GA4 detects gclid and attributes correctly. UTMs are still useful for human-readable reporting (campaign name in the URL is easier to debug). We use both: gclid for Google Ads attribution, UTMs for everything else.
Building a UTM template
Use a spreadsheet or a tool (Google’s Campaign URL Builder, Bitly’s UTM builder, Hubspot’s tracking URL builder). Generate UTMs from a template instead of hand-typing — that’s where typos and inconsistencies come from.
Tracking offline campaigns
Direct mail, billboards, radio — anything offline that drives traffic to your site. Use a vanity URL or a short URL that redirects to a UTM-tagged landing page. `yoursite.com/dallas` → 301 to `yoursite.com/services/kitchen?utm_source=billboard&utm_medium=offline&utm_campaign=2026_q2_dallas_billboard`. Now you know that billboard drove that traffic.
QR codes
Same pattern: the QR code encodes a UTM-tagged URL. We tag QR codes by physical location when used in stores or events. `qr_store_01`, `qr_trade_show_2026_05` as `utm_content` values.
Reading the UTM data
GA4 → Acquisition → Traffic acquisition. Source/Medium is the default grouping. Add Campaign as a secondary dimension to see which campaigns produced the traffic. The cleanest single-screen view is: Source/Medium, Sessions, Conversions, Conversion rate, weighted by Campaign. We have this saved as a custom report on every FH client property.
Common attribution issues UTMs cause
- Internal UTM-tagged links overwriting original source. Audit your site for any UTMs on internal links and remove them.
- Inconsistent capitalization splitting one source into multiple. Use a UTM-cleaning rule in GA4 to normalize.
- UTMs persisting in shareable URLs. When a user copies the URL with UTMs and shares it, the new clicker inherits the original UTMs. Set a session-based clean-up rule or strip UTMs after the first pageview.
- Forgetting UTMs entirely on a major campaign. Three months later you can’t answer ‘did the campaign work.’
How this lands across FH client work
Every FH client gets a UTM convention document at the start of an engagement: the canonical source names, the medium list, the campaign naming format. Every marketing touchpoint we control (email sends, paid campaigns, social posts) follows it. The result is GA4 reporting that doesn’t need three asterisks of caveat. If your UTM data is messy, book a consultation — the convention + cleanup is a one-day engagement that compounds across every report after.