Guide
UTM parameters, and the naming discipline that makes them worth using
UTM parameters are the oldest and most reliable piece of campaign attribution on the web. Five query parameters, appended to a destination URL, telling analytics where a visit came from. The mechanism is trivial. The failure mode is entirely human.
UTM values are free text and case-sensitive. Nothing validates them. Facebook, facebook, and FaceBook are three distinct sources in GA4, and once all three exist in the same report the channel is fragmented permanently — you cannot merge them retroactively.
What each parameter is for
- utm_source
- Where the traffic comes from:
google,facebook,newsletter,partner_name. A specific platform or publication, always lowercase. This is the parameter people most often over-think — it is the where, not the what. - utm_medium
- The marketing channel type:
cpc,email,paid_social,affiliate,referral. This is the one that matters most, because GA4 channel groupings key off it. Non-standard mediums are why traffic lands in "Unassigned", and that is the single most common UTM mistake there is. - utm_campaign
- The campaign name:
spring_sale_2026. Pick a convention and hold it — most teams use a name plus a period. Consistency here decides whether year-over-year comparison is possible at all. - utm_term and utm_content
utm_termcarries the paid keyword and is largely legacy where auto-tagging is in use.utm_contentdistinguishes variants within one campaign —carousel_aversuscarousel_b,header_ctaversusfooter_cta— and is the parameter that makes creative-level analysis possible.
The five mistakes that break campaign reporting
Inconsistent case
The most common and the most damaging, because it is invisible while you are making it. Lowercase everything, always, and let the template enforce it rather than relying on whoever pastes the link.
Non-standard mediums
GA4 channel groupings recognise a specific set of medium values. Invent
facebook-adsinstead of usingpaid_socialorcpcand that traffic falls into Unassigned, where nobody looks. Fix the convention before the campaign, not after.Tagging internal links
Putting UTMs on links between pages of your own site starts a new session and overwrites the original attribution. The paid click that brought the user in is credited to your own homepage banner. Never UTM-tag an internal link.
UTM-tagging Google Ads with auto-tagging on
Auto-tagging with
gclidis richer than anything manual UTMs carry. Adding UTMs on top overrides it and loses the Google Ads integration detail. If auto-tagging is on, leave Google Ads links alone — the GA4 audit checks for exactly this conflict.Spaces and special characters
spring salebecomesspring%20salein one report andspring+salein another. Use underscores or hyphens, pick one, and never mix them within a property.
Why templates beat documentation
Every team that has been burned by inconsistent UTMs writes a naming convention document. Almost none of them follow it, for a simple reason: the person building the link is usually not the person who wrote the document, is often at an agency, and is always in a hurry.
Templates move the convention from a document people should read into the tool people actually use. Source and medium are fixed per channel; the person building the link fills in only the campaign-specific parts. The convention holds because following it is the path of least resistance.
Bulk generation matters for the same reason. A campaign with four placements across three channels is twelve links, and twelve links built by hand at 5pm is where inconsistency enters. Generating them from one template is both faster and structurally safer.
Link history is the part people miss
Six months after a campaign, someone will ask what q2_promo_v2 was, where it pointed, and which creative used it. Without a record, the answer is archaeology through a shared drive. Saved history makes it a search, and it lets the next campaign copy a known-good structure instead of improvising a new one.