On this page+
A UTM parameter is a label glued to a URL that tells your analytics tool where a visit came from. It is not magic, it is not proprietary, and it does almost nothing on its own. The work is in naming the labels consistently across every campaign your team runs, so that six months from now your GA4 reports are still legible.
This is the long version of the rules we follow at Trakl. It covers the five parameters, what each one is for, the naming conventions that hold up, the GA4 setup that lets you act on the data, and the half-dozen mistakes that turn a clean tracking plan into landfill.
The five parameters, in one paragraph
There are five UTM parameters and you only need three of them on most links: utm_source (where the click came from, like linkedin or mailchimp), utm_medium (the channel category, like social or email), and utm_campaign (the marketing initiative, like q2-launch). Two more parameters exist but are optional: utm_term (originally for paid keywords, now mostly used for ad-group identifiers) and utm_content (for a/b variant identifiers, ad creatives, or link positions inside a single email).
That covers the entire UTM specification. There is no utm_audience, no utm_segment, no utm_subchannel. Anything else you want to track gets folded into one of the five parameters using your naming convention, or it gets pushed to a custom dimension in GA4.
utm_source vs utm_medium
This is the parameter pair people get wrong. utm_source is the specific origin: facebook, mailchimp, partner-newsletter, youtube. utm_medium is the category that origin falls into: social, email, referral, video. One source, one medium, every time.
The reason it matters: GA4's default channel grouping reads utm_medium to bucket your traffic into Paid Social, Email, Organic Search, etc. If you write utm_medium=facebook instead of utm_medium=social, your Facebook traffic gets dumped into the "Other" channel and vanishes from the report you actually look at.
We wrote a longer piece on the difference at utm_source vs utm_medium including a lookup table for the channels GA4 recognizes by default.
utm_campaign
utm_campaign is the parameter most teams under-use. The campaign value should be a stable string for the entire initiative, including across channels. If you run a Q2 product launch with email, paid social, and a partner blast, all three should share the same utm_campaign value, like q2-launch. That is what makes the campaigns workspace inside any analytics tool actually useful: you can see one row per initiative across all channels, instead of trying to reconstruct the campaign by squinting at five different source-medium combos.
A common pattern is to encode date and channel intent into the campaign value: 2026q2-launch-email, 2026q2-launch-social-paid, 2026q2-launch-partners. That works, but it pushes work into the campaign field that belongs in source and medium. We prefer one stable campaign value per initiative, and let source-medium do the channel slicing.
utm_term and utm_content
utm_term was originally for paid search keywords, on the theory that you would manually tag every Google Ads keyword with the term that triggered the click. Google now does this automatically through auto-tagging, so utm_term is mostly used for ad-group identifiers, audience segments, or whatever else you want to slice by.
utm_content is the field that varies most by team. Two common patterns:
- A/B variant identifier, like
utm_content=variant-aorutm_content=hero-cta. - Position-in-email or position-on-page, like
utm_content=header-bannerorutm_content=footer-link.
Pick one pattern per team and apply it across every link. Mixing patterns inside the same utm_content field gives you values you cannot interpret six months later.
Naming conventions that hold up
Every team that has clean GA4 data has a written naming convention. Every team with messy data does not. The convention does not have to be elaborate. Three rules cover most of the leakage:
- 01
Lowercase everything.
GA4 is case-sensitive. utm_medium=Email and utm_medium=email are two different rows. Pick lowercase and apply it on every link. - 02
Use hyphens.
Spaces become %20 in URLs and look terrible in reports. Underscores survive but are harder to read. Hyphens are the convention used by Google's own URL Builder. - 03
One stable taxonomy for source and medium.
Write down which sources map to which mediums. linkedin maps to social. linkedin-newsletter maps to email. linkedin-pulse maps to referral. Put the table in a doc, link it from your campaign brief.
The piece at utm naming conventions has the full table we use, including the channels GA4 recognizes by default.
Setting up GA4 to read your tags
GA4 reads UTM parameters automatically. You do not need to add them to a custom configuration. The default channel grouping and the Traffic Acquisition report both use the source-medium-campaign trio out of the box.
Two settings are worth changing on day one:
- Session timeout. Defaults to 30 minutes of inactivity. If your funnel is longer (B2B research, video content), bump it to 60 or 90 minutes so a single visit does not get split into two attributions.
- Cross-domain tracking. If your campaign sends users from a marketing site to a separate app domain (e.g.
trakl.apptoapp.trakl.app), enable cross-domain measurement under Admin → Data Streams → Configure tag settings → Configure your domains. Without this, the second domain shows up as a referrer and your UTM attribution gets clobbered.
The piece at utm tracking in GA4 walks through the setup with screenshots.
The link-builder problem
The reason most UTM data is messy is that links get retyped, copied across email drafts, and built ad-hoc when the campaign launches at 11pm on a Sunday. The fix is mechanical: a single link builder used by every person on the team.
That is what Trakl is for. Every link your team creates passes through the same form, with source and medium dropdowns powered by your taxonomy, and the final URL is generated rather than typed. Casing is enforced. Spaces are caught. The output is a short branded link that captures the click and writes it to your dashboard, with the UTMs preserved on the redirect to the destination.
Free UTM Builder
Build a clean, validated UTM URL in seconds. No signup, no shortening, just the parameters and a copy button. Use it before your team has a process.
What to do about the data once it lands
Tagging is half the work. The other half is deciding what to look at. The reports we run weekly:
- Traffic Acquisition by Default Channel Group. First sanity check. If Paid Social is suddenly half what it was last week, the tagging or the campaign broke.
- Sessions by source / medium for the active campaign. Drilldown on the campaign workspace. Numbers should match what the ad platform says, within 10 to 20 percent. Bigger gap means there is a tracking issue (cross-domain, blocked third-party cookies, ad-blocker erosion).
- Conversions by campaign. The only number that matters for the post-mortem. The campaign with the most clicks is rarely the campaign with the most conversions.
If the GA4 numbers and the ad-platform numbers diverge by more than 20 percent, the piece at why your utm data is messy covers the half-dozen common causes (auto-tagging vs manual UTM conflict, cross-domain misconfig, server-side redirect that strips the query string).
A worked example
A SaaS company runs a Q2 product launch. The campaign goes out across email, paid LinkedIn, and an organic LinkedIn post from the founder.
| Channel | Source | Medium | Campaign | Content |
|---|---|---|---|---|
| Customer email | mailchimp | q2-launch | hero-cta | |
| LinkedIn paid | paid-social | q2-launch | carousel-v1 | |
| LinkedIn organic | social | q2-launch | founder-post |
Three different medium values, one shared campaign value, distinguishable source for paid vs organic LinkedIn. In GA4 the campaign workspace shows one row for q2-launch with three sources contributing. Traffic Acquisition shows the email line, paid social line, and organic social line cleanly separated. That is what good UTM data looks like.
Common mistakes, in order of frequency
- Mixed casing inside a single campaign.
utm_medium=Emailandutm_medium=emailare two rows. Lowercase everything. - Channel name in
utm_medium.utm_medium=facebookinstead ofutm_medium=social. Breaks GA4 default channel grouping. - Free-text spaces in values.
utm_campaign=Q2 LaunchbecomesQ2%20Launchin URL andQ2 Launchin reports, but only sometimes. Hyphens always. - One-off
utm_campaignper channel.q2-launch-email,q2-launch-social,q2-launch-paid. Now you cannot see the campaign as a whole. - No utm tags at all on internal links. A user clicks an email link, lands on your homepage, then clicks a hero button. The hero button has no UTMs, so the original attribution gets reset on the next pageview. The fix is either to keep UTMs on internal links inside the same session, or to use referral exclusion.
Where to go from here
If your team is starting from zero: pick the three required parameters, write down a naming taxonomy, put every link through a single builder. Skip utm_term and utm_content until you have a reason to want them.
If you are cleaning up an existing mess: start with the campaigns workspace in GA4. Group rows by utm_campaign and look for duplicates that are the same campaign with different casings. Those are the easy wins. Then look for utm_medium values that fall outside the default channel grouping. Those are the rows hiding in "Other".
For the practical end of this work, the free UTM Builder generates clean URLs without any setup. The full Trakl product takes the next step and gives you short branded links plus per-link analytics on top of the same naming rules.
Frequently filed
Common questions.
Q.01What are UTM parameters?+
UTM parameters are five query-string tags appended to a URL (utm_source, utm_medium, utm_campaign, utm_term, utm_content) that GA4 reads to label the traffic source of a session. They were created by Urchin Software, which Google bought in 2005 and turned into Google Analytics.
Q.02Are UTM parameters case sensitive?+
Yes. utm_medium=Email and utm_medium=email are two different values in GA4. The fix is a single naming convention applied consistently, plus a canonical lowercase rule on every link the team builds.
Q.03Do UTM parameters affect SEO?+
No. Search engines should treat the canonical URL as the indexable page, ignoring the tagged variant. UTM parameters are for analytics attribution only. To stay safe, set a canonical link tag on landing pages that strips the query string.
Q.04How long do UTM parameters last?+
The tags themselves never expire. The session GA4 attributes to those tags expires according to your session-timeout setting, which defaults to 30 minutes of inactivity. New sessions get a fresh attribution unless the user clicks another tagged link.
By the byline
Trakl TeamEditorial team
We build Trakl, a link shortener and UTM tracker for marketing teams. We write here from the cleanup work, support tickets, and campaign reviews that fill the rest of our week. Specifics over slogans, and we cite the source.
Photo: Luke Chesser on Unsplash



