Published by Terminus, the marketing taxonomy governance platform.
The 2026 UTM Tagging Guide: A Complete, Dated Reference for Marketing Teams
Last updated
UTM tagging in 2026 is no longer the casual exercise it was in 2015. The parameters themselves have not changed (the original five Urchin Tracking Module fields plus utm_id are still what every analytics platform reads), but the surfaces those parameters travel through have. Google Analytics 4 reads them differently from Universal Analytics. iOS Link Tracking Protection strips some adjacent identifiers. ChatGPT and Perplexity now show up as referrers. And the number of people inside a typical marketing team who can tag a link has roughly doubled. This guide is the current, dated reference for marketing teams who want their UTM data to be trustworthy for the next year.
TL;DR
- UTMs are six query-string parameters (
utm_source,utm_medium,utm_campaign,utm_term,utm_content,utm_id) that you append to destination URLs so analytics platforms can attribute the resulting session to a campaign.- GA4 reads UTMs into both session-scoped and user-scoped dimensions, with different attribution behaviour from Universal Analytics. The differences matter for reporting.
- Naming conventions are the work, not the parameters. A taxonomy that survives a quarter is lower-case, dash-separated, controlled-vocabulary at the source and medium level, and dated where useful.
- UTMs and platform click IDs (
gclid,fbclid,msclkid,ttclid, etc.) coexist. They answer different questions and need different handling under iOS Link Tracking Protection and Consent Mode v2.- AI-era referrers (ChatGPT, Claude, Perplexity, Copilot, Gemini) require an explicit channel grouping in GA4 because the default grouping classifies most of them as Organic Search or Referral.
- Governance, not creativity, is what makes a tagging programme last. Controlled vocabularies, a single source of truth for source and medium values, and validation at link-creation time prevent the slow rot every team eventually hits.
What UTMs are and what they are not
UTM parameters are five (now six) named query-string fields originally specified by the Urchin Software Corporation, which Google acquired in 2005. The names are stable: utm_source, utm_medium, utm_campaign, utm_term, utm_content, and the more recent utm_id. You append them to a destination URL like this:
https://example.com/landing?utm_source=newsletter&utm_medium=email&utm_campaign=2026-summer-sale
When a browser loads that URL, the analytics platform reads the parameters off the request, attributes the resulting session to a named campaign, and (in most platforms) hangs the rest of the user’s behaviour off that attribution.
That is what UTMs are. It helps to be equally clear on what they are not.
UTMs are not an identity layer. They tell you a session came from a campaign, not who the user is or whether they have been here before. Identity is handled by analytics user IDs, CRM contact IDs, or first-party cookies, all of which are separate problems with their own privacy considerations.
UTMs are not a click-tracking mechanism. They are a session-tagging mechanism that gets activated when the destination URL loads. If a user clicks a link and the page never loads (network drop, ad block redirect, bot scrub), no UTM is recorded because no session began.
UTMs are not automatically populated by ad platforms. Google Ads’ auto-tagging populates gclid, not UTM fields. Meta’s redirects do not populate UTMs unless you tell them to. Every ad platform requires either manual UTM tagging or platform-specific URL templates that expand to UTMs at click time. Mixing manual UTMs with auto-tagging on the same Google Ads campaign is the single most common cause of source fragmentation in GA4.
UTMs are not standardised across organisations. The parameter names are universal; the values are not. Two companies’ utm_source=newsletter mean different things, and any vendor selling a “standard taxonomy” is selling their opinionated version of one. Standardisation is an internal-governance problem, not a syntax problem.
The six parameters with current GA4 behaviour
There are six UTM parameters in active use. Five are the original Urchin fields. The sixth, utm_id, was added with GA4 to serve as the join key for the GA4 cost-data import workflow (Search Ads 360 and generic CSV cost imports both rely on it).
utm_source
The platform or publication that sent the traffic. Examples: google, facebook, linkedin, newsletter, partner-acme. In GA4, the value populates the session_source dimension and contributes to channel grouping logic. Source is the most important parameter because it is the one channel logic hangs off of.
A common failure mode is letting source values fragment. Google, google, Google.com, google-ads, and googleads will all show up as separate sources in a default GA4 report. The fix is a controlled vocabulary at the source level (more on this in the naming conventions section).
utm_medium
The marketing channel or technical category of the traffic. Examples: cpc, email, social, display, affiliate, referral, qr. GA4’s default channel grouping reads utm_medium first to decide whether a session is Paid Search, Organic Social, Email, and so on. The default groupings use specific medium strings, so if you write paid-social and GA4 expects cpc or paid (with a matching source), you may land in the Unassigned channel.
The minimum medium controlled vocabulary every team needs:
cpc(paid search, including Google Ads, Microsoft Advertising)paid-socialorcpm(paid social and display)email(any email campaign)social(organic social)referral(when you control the link and want to tag it explicitly)affiliate(affiliate partners)qr(offline QR codes)direct-mail(postal)
Anything else needs to be a deliberate addition, not an ad-hoc invention.
utm_campaign
The named campaign the link is part of. This is the parameter that varies most per team. Common patterns include 2026-q2-product-launch, summer-sale-2026, or nurture-stage-3. GA4 stores this in session_campaign and uses it to pivot sessions, conversions, and revenue.
The single biggest mistake at the campaign level is using human-readable phrases with spaces, capitals, and punctuation. Summer Sale 2026! becomes Summer%20Sale%202026%21 on the wire, displays inconsistently across tools, and breaks any downstream regex you write against it.
utm_term
Originally for paid search keywords. With auto-tagging on, most teams do not populate utm_term manually for Google Ads or Microsoft Advertising. Some teams repurpose it for audience or ad-set names, but doing so makes cross-platform reporting harder because the field’s meaning is no longer consistent. The safest stance is to leave utm_term for keyword data only and use utm_content for variant identification.
utm_content
The specific creative, variant, or placement. Examples: header-cta, footer-link, ad-variant-b, image-square-blue. GA4 stores this in session_manual_ad_content. It is the parameter teams use to A/B test creative without polluting the campaign name. Treat it as free-form within a per-campaign convention rather than a global controlled vocabulary, since variants change every campaign.
utm_id
Added with GA4 to identify a unique campaign for the GA4 cost-data import workflow. If you import cost data into GA4 from a non-Google ad platform, GA4 joins the cost rows to session rows on utm_id. If you do not import cost data, utm_id is optional and most teams skip it. When you do use it, it should be a stable, unique identifier per campaign (a UUID or your internal campaign-management-system ID), not the campaign name.
Current GA4 attribution behaviour worth knowing
A few specifics about how GA4 handles UTMs that differ from older Google Analytics behaviour:
- GA4 maintains two scopes for UTM-derived dimensions: session-scoped (
session_source,session_medium,session_campaign) and user-scoped (first_user_source,first_user_medium,first_user_campaign). Reports built on user-scoped dimensions reflect acquisition; reports on session-scoped reflect engagement. - For event-scoped conversions, GA4’s data-driven attribution is the default model. Even with clean UTMs, the data-driven model assigns fractional credit across touchpoints, which means a single conversion can appear distributed across multiple source/medium pairs in attribution reports.
- The
(direct) / (none)source/medium pair is GA4’s default for unattributable traffic. A spike indirect / (none)is almost always a tagging problem, not a brand-awareness signal. - Channel grouping rules in GA4 are evaluated in a specific order. The “Cross-network” group catches anything Google Ads tags with
gclidand a correspondingutm_source=googleandutm_medium=cpc. Beneath that, Paid Search, Organic Search, Paid Social, Organic Social, Email, Referral, and Direct have their own rules.
Naming conventions that survive a quarter
The parameters are easy. The values are where every team eventually trips. A naming convention is a written set of rules about which values are allowed in each parameter and what they mean. A convention “survives a quarter” when, three months in, you can still pull a clean report without manually deduplicating ten variants of the same source name.
Lowercase, always
UTM values are case-sensitive in every major analytics platform. Facebook and facebook are two different sources in GA4, Adobe Analytics, Mixpanel, and Snowflake alike. Pick lowercase, document it once, and enforce it at link-creation time. This single rule eliminates roughly 30 percent of taxonomy drift, an illustrative estimate based on practitioner consensus rather than measured data.
Dashes, not underscores or spaces
product-launch reads cleanly in URLs, displays consistently across analytics UIs, and survives copy/paste. Underscores work, but mixing the two within a single value (product_launch-v2) is a source of bugs. Spaces are encoded as %20 on the wire and look broken in every downstream report.
Controlled vocabularies at source and medium
Source and medium need a fixed list of allowed values, written down somewhere a marketer can see when they create a link. Twenty source values is reasonable for most B2B teams. Six to twelve medium values is reasonable for most teams.
Campaign and content can be free-form within naming patterns. Term is usually unused or auto-populated. utm_id is either auto-generated or skipped.
Date your campaigns
Including a year or quarter in the campaign name (2026-q2-product-launch, 2026-06-summer-sale) makes year-over-year reporting trivial and stops the slow accretion of campaign names that look identical to a 2024 one but are not. Teams that skip dating their campaigns eventually have to do a one-time archaeology project to figure out which summer-sale was which.
A field-order convention for campaign names
For campaign names with multiple semantic parts, pick a field order and stick to it. A workable pattern is {region}-{quarter}-{program}-{tactic}, for example na-2026q2-product-launch-webinar. The order matters more than the specific fields. Once the order is fixed, you can parse campaign names in BigQuery or a warehouse later.
Decide what you will not encode
UTMs are not infinite. Every additional semantic field you cram into the campaign name makes the name longer, harder to read, and more error-prone. Decide explicitly what the UTM carries and what stays in your CRM, ad platform, or campaign-management system. A common split: UTM carries source, medium, campaign, content. Region, product line, persona, buying stage live in the CRM and join in later via lookup tables in a warehouse.
Where UTMs go and how they get read
UTMs travel as query-string parameters on the request URL. Every analytics platform reads them slightly differently. The differences matter when you build cross-platform reports or pipe data into a warehouse.
Google Analytics 4
GA4 reads UTM parameters off the initial page load of a session and writes them into both session-scoped and user-scoped dimensions. The mapping is:
utm_sourcebecomessession_sourceandfirst_user_sourceutm_mediumbecomessession_mediumandfirst_user_mediumutm_campaignbecomessession_campaignandfirst_user_campaignutm_termbecomessession_manual_termandfirst_user_manual_termutm_contentbecomessession_manual_ad_contentandfirst_user_manual_ad_content
Those names are the GA4 UI dimension display names. If you query GA4 via the BigQuery export instead, the underlying field names in the traffic_source and collected_traffic_source structs (and the event_params keys) are different: term, content, campaign_id, and manual_* variants without the session_ or first_user_ scope prefix. The scope is implicit in which struct you read from. Check the GA4 BigQuery export schema reference before writing queries.
utm_idbecomessession_manual_campaign_id
Channel grouping logic operates on session_source and session_medium. The default grouping rules are documented in the GA4 help center under “Default channel group”. Custom channel groups can be created under Admin, then Data display, then Channel groups.
Adobe Analytics
Adobe Analytics does not consume UTMs natively. You configure a processing rule, or a VISTA rule, to copy specific URL parameters into Adobe eVars and props. A common pattern: utm_source to eVar1, utm_medium to eVar2, utm_campaign to eVar3. Marketing Channel Processing Rules then build channel attribution from those eVars.
The implication for cross-platform reporting: UTM values are platform-agnostic, but the dimensions you query in Adobe are eVars, not session_source. Document the mapping once and reuse it.
Mixpanel
Mixpanel captures UTM parameters automatically when the mixpanel-js library loads on a page with UTMs in the URL. The values land on the user profile as $initial_utm_source, $initial_utm_medium, and so on for the first-touch values, and on each event as utm_source, utm_medium, etc. for the current-session values. Mixpanel does not have a built-in channel grouping concept; you build channel logic in cohorts or lookup tables.
Warehouses (BigQuery, Snowflake, Redshift)
If you export GA4 to BigQuery, UTM values appear in the event_params repeated record on every event. Source, medium, and campaign are exposed via traffic_source (user-scoped first-touch) and via per-event params for the current event. A common pattern is to write a session-scoped view that picks the first event’s UTM values per ga_session_id.
If you load raw page-view logs into Snowflake or Redshift from a tag manager or server-side capture, you parse the query string yourself. A typical pattern uses a regex extraction or PARSE_URL function to pull each UTM into its own column.
Email service providers and CRMs
ESPs (Klaviyo, Mailchimp, HubSpot, Iterable, Customer.io) all let you append UTMs to outbound links, either as a global default or per-campaign. CRMs (Salesforce, HubSpot CRM, Pipedrive) capture UTMs on form submissions if you configure hidden form fields and a JavaScript layer that reads them off the URL and the document referrer. Marketing automation platforms (Marketo, Pardot, Account Engagement) have their own form-field syntax for the same job.
The pattern is consistent across all of these: UTMs travel on the request URL, get captured by a script or form handler, and persist into a CRM record. The places they break are the boundary points: form posts to a different domain, popup forms with stale referrer data, iframe embeds that lose the parent URL.
UTMs alongside platform click IDs
UTMs are not the only thing on the query string. Most ad platforms append their own click ID parameter on every click, which the platform uses for conversion attribution back to their ads. The current list:
- Google Ads:
gclid(andwbraid,gbraidfor iOS-cooperative tracking) - Microsoft Advertising:
msclkid - Meta (Facebook, Instagram):
fbclid - LinkedIn Ads:
li_fat_id - TikTok Ads:
ttclid - Snap Ads:
sccidon the destination URL (and theclick_idvalue inside Conversions APIuser_data) - Pinterest:
epik - X / Twitter Ads:
twclid - Reddit Ads:
rdt_cid
Click IDs and UTMs answer different questions. The click ID lets the ad platform reconcile a conversion back to the specific ad creative, bid, and auction. UTMs let your analytics platform attribute the resulting session to a named campaign in your reporting.
Both can and usually should be present on the same URL. The cross-link article UTM vs gclid vs fbclid vs ttclid goes deeper on which click ID belongs to which platform, how each one is generated, and how they survive (or do not survive) various privacy mechanisms.
The common failure mode at this boundary: Google Ads auto-tagging on, plus manual UTMs that contradict the auto-tag (utm_source=adwords instead of utm_source=google, for example). GA4 sees both, and the resulting source attribution depends on rule precedence you probably did not set deliberately. The cleanest pattern for Google Ads is to set the Final URL Suffix at the account level to your standard UTM template, leaving gclid to auto-tag for ad-platform attribution. For Meta, LinkedIn, and TikTok, add UTMs in the platform’s ad-builder template fields, which keeps UTMs and click IDs aligned automatically.
The privacy era: iOS LTP, Consent Mode v2, server-side persistence
Three privacy mechanisms shape what survives between the click and the analytics row in 2026: iOS Link Tracking Protection, Google’s Consent Mode v2, and the broader move toward server-side persistence.
iOS Link Tracking Protection
Introduced with iOS 17 and expanded through iOS 17.4 and iOS 18, Link Tracking Protection (LTP) strips a community-sourced list of tracking parameters from URLs in specific contexts. The strip list and the contexts are both worth being precise about, because over-attribution to LTP is a common diagnostic mistake.
Where LTP operates:
- Mail.app
- Messages.app
- Safari, in Private Browsing mode only
Where it does not operate:
- Safari in regular browsing mode
- In-app browsers (the WebView inside the Twitter, LinkedIn, Instagram, Facebook, and other apps)
- Third-party browsers on iOS (Chrome, Edge, Firefox, Brave)
- Mac Safari outside Private Browsing
The strip list is community-sourced (PrivacyTests.org maintains the most reliable version). Apple does not publish an official list. Reported entries include gclid, fbclid, msclkid, mc_eid, igshid, and mkt_tok. UTM parameters (utm_source, utm_medium, utm_campaign, utm_term, utm_content, utm_id) are not on the reported strip list. gbraid and wbraid are Google’s iOS-cooperative replacements for gclid and have not been reliably confirmed as strip-list members.
What this means in practice: UTMs survive LTP. Click IDs may not, depending on the context. The mitigation is to keep UTMs as the authoritative campaign-attribution signal, use Final URL Suffix on Google Ads so UTMs travel even when gclid is stripped, and capture click IDs server-side at the moment of click (not the moment of page load) where possible.
A separate article goes deeper on this: see iOS 17 Link Tracking Protection: what survives for the strip list, the contexts where LTP operates, and the mitigations that hold up.
Consent Mode v2
Google’s Consent Mode v2, mandatory in the European Economic Area since March 2024 for advertisers using Google’s measurement and ad products, has two consent signals: ad_storage and analytics_storage, plus ad_user_data and ad_personalization added in v2. When a user denies analytics_storage, GA4 receives “cookieless pings” with limited data; UTMs, when present on the URL, are still sent because they are URL parameters, not cookie data.
Practical implication: UTMs are the most privacy-resilient signal you have. Cookies expire and get blocked; UTMs travel on the URL and survive consent denial.
Server-side persistence
The trend through 2024 to 2026 has been toward server-side tag management (Google Tag Manager Server-Side, Stape, Adobe Edge) for several reasons: better data quality, ITP/LTP resilience, and longer cookie lifetimes set as first-party from the same root domain. UTM capture works the same way under server-side tagging; the parameters still ride the URL, but the tag-firing logic that reads them and forwards to downstream platforms (GA4, Meta CAPI, LinkedIn Conversions API) runs server-side.
For UTM governance specifically, server-side tag management changes very little. What it does change is the persistence layer: first-party cookies set server-side via the Set-Cookie HTTP header can carry UTM values into the CRM with longer windows and higher hit rates than client-side, JavaScript-set cookies, which Safari ITP caps at seven days (and at 24 hours when set after a cross-site tracker redirect).
AI-era surfaces: ChatGPT, Claude, Perplexity referrals
The newest wrinkle in the UTM picture is that LLM-driven traffic sources (ChatGPT, Claude.ai, Perplexity, Microsoft Copilot, Google Gemini) have become measurable referrers in their own right. They are not on GA4’s default channel grouping, which means their traffic defaults to Organic Search, Referral, or Unassigned depending on the specific hostname they send.
The hostnames to know in 2026:
chatgpt.com(OpenAI’s ChatGPT web app)chat.openai.com(legacy ChatGPT URL, still seen)claude.ai(Anthropic’s Claude)perplexity.aiandwww.perplexity.aicopilot.microsoft.com(Microsoft Copilot)gemini.google.com(Google Gemini)you.com(you.com AI search)
These show up in GA4’s session_source dimension when the user clicks through from the AI tool’s interface to your site. They do not carry UTM parameters because the AI tool is not appending any; you are receiving them as a referrer, which GA4 reads off the HTTP Referer header.
The right way to handle this is to build a custom channel grouping in GA4 that recognises AI hostnames and routes them to a dedicated “AI Traffic” channel. A separate article covers the exact setup: see Tracking AI Referral Traffic for the regex, the UI path, and the verification steps.
For UTM tagging specifically, the AI era introduces one new question: should you UTM-tag content with the expectation that it will be cited by LLMs? Two practical answers:
-
Your own content (blog posts, documentation) does not get UTM-tagged because UTMs are appended at the link source, not the destination. You tag the outbound links from your campaigns; the link inbound to your content from ChatGPT carries whatever the LLM decided to include, which is usually nothing.
-
Links you place in third-party properties that you expect AI search to surface (Reddit answers, Stack Overflow posts, your own social profiles) can be UTM-tagged. If the LLM includes the link as-is in a citation, the UTM travels. If the LLM rewrites or summarises the link, the UTM does not. Worth tagging, not worth depending on.
Governance: what changes when more than one person tags links
A solo marketer with a spreadsheet and discipline can run a clean UTM programme indefinitely. Add a second person, and the wheels start to wobble. Add a third, and you have a governance problem.
The failure modes are predictable:
- Source values drift.
linkedin,linkedIn,LinkedIn, andlinked-inall appear in the same week. - Mediums get invented. Someone writes
utm_medium=newsletterwhen the medium isemailand the source isnewsletter. GA4’s channel grouping puts the session in Referral instead of Email. - Campaign names duplicate. Two team members tag the same press push with
summer-launch-2026and2026-q2-launch. The data lives in two campaigns that should have been one. - Hidden links escape entirely. A salesperson shares an untagged link in an outbound email. The resulting traffic is
(direct) / (none)in your reports, indistinguishable from organic brand traffic.
The fix is not more training (training fades; the next hire was not in the room). The fix is structural: a controlled source for all tagged links, with the convention enforced at the moment of link creation. There are three common patterns:
-
A shared spreadsheet with allowed-value dropdowns. Works for small teams; breaks at scale because the spreadsheet has to be opened, fields have to be typed, and there is no validation of values that get pasted in.
-
A custom internal tool, usually built on Airtable, Notion, or a Retool front end. Better governance, but the team has to maintain it, and integrations with downstream tools (link shorteners, ad platform templates, CRM picklists) need their own engineering.
-
A purpose-built UTM management platform, which is what Terminus, the marketing taxonomy governance platform does. It defines a taxonomy (allowed values for source, medium, and patterns for campaign and content), generates links against it, and rejects values that violate the convention before they reach production traffic. Worked example below.
Worked example: the source-fragmentation cleanup
A marketing team of eight runs a typical mid-market B2B SaaS programme: paid search, paid social on LinkedIn and Meta, organic social, email through HubSpot, partner co-marketing, webinars, and the occasional sponsored newsletter. After eighteen months, the team pulls a source-by-medium pivot in GA4 and finds 47 distinct source values. The expected number, given the channel mix, is around 12. (Illustrative numbers for the framework, not measured data.)
The drift breakdown looks like this:
linkedin,LinkedIn,linked-in,linkedin.com,linkedin-ads,linkedin-organic(six values, should be one or two:linkedinfor organic,linkedinplusutm_medium=cpcfor paid)google,Google,google-ads,googleads,adwords(five values, should be one:google)newsletter,Newsletter,nl,email-newsletter, plus per-newsletter names likemorningbrew,axios-pro(the named newsletters are legitimate; the synonyms are not)partner,partner-acme,partners,Partner Co-Marketing(four values, should be one root withutm_campaigncarrying the partner name)
The cleanup has two parts. First, retroactive in the warehouse: a SQL view that normalises historic source values to canonical ones. Second, forward-looking at the source: a controlled vocabulary documented and enforced at link creation. In Terminus, this looks like a taxonomy with a fixed list of allowed source values, a fixed list of allowed mediums, and a pattern for campaign names. Links generated through Terminus inherit the controlled vocabulary; links pasted in from elsewhere are flagged in audit.
The first cleanup is a one-time project. The forward-looking governance is the work that prevents the next one.
A starter taxonomy you can adopt today
A starter taxonomy is the smallest set of conventions a team can adopt without overengineering, with room to grow. The taxonomy below is opinionated and intentionally minimal. Adapt it; do not adopt it verbatim without thinking about your channels.
Allowed values for utm_source
A flat list. Twenty or so entries covers most B2B SaaS programmes:
google(any Google property: Search, Display, YouTube, Discover)bing(Microsoft Advertising)facebook,instagram,linkedin,tiktok,twitter,reddit,pinterest,snapchat,youtube(social platforms; treat the platform as the source regardless of organic vs paid, and letutm_mediumcarry that distinction)newsletter(your own newsletter; the campaign name carries the issue)email(transactional or lifecycle email outside the newsletter)partner-{name}(per-partner; reserve the prefix and use the partner’s slug after the dash)event-{slug}(per-event; e.g.event-saastr-2026)webinar-{slug}(per-webinar)direct-mail(postal)print(offline magazine, billboard, etc.)
Allowed values for utm_medium
cpc(paid search)paid-social(paid social, all platforms)email(any email)social(organic social)referral(when you control the link)affiliateqr(offline QR)display(programmatic display)video(paid video outside YouTube paid search)
Pattern for utm_campaign
{year}-{quarter}-{program}-{tactic}, lowercase, dash-separated. Examples:
2026-q2-product-launch-press2026-q3-customer-conference2026-q1-evergreen-product-pages
Year and quarter make YoY and QoQ slicing trivial. Program names should match what your campaign-management system uses, so reports across tools line up.
Pattern for utm_content
Free-form within the campaign, lowercase, dash-separated. Use it to identify creative variants, placements, or A/B test arms. Examples:
header-ctafooter-linkvariant-a,variant-bimage-square,image-landscapeposition-1,position-2
utm_term and utm_id
Leave utm_term empty unless you have a deliberate use for it. Auto-tagging populates the keyword field for paid search separately.
Use utm_id only if you are importing cost data into GA4 from non-Google ad platforms. If you are, generate a stable unique ID per campaign in whatever tool is the system of record (Asana, a campaign-management system, your project tracker). Do not use the campaign name as utm_id.
Where to write this down
A taxonomy that lives in a Google Doc gets stale within two quarters. The minimum durable home is a system where:
- The allowed values are enforceable at link creation, not just documented.
- The taxonomy itself is versioned (you can see what changed and when).
- Changes go through review (a new medium does not get added because one person typed it in a campaign).
That is what a UTM management platform provides. It is also what a well-designed internal tool can provide, with more engineering effort.
FAQ
What is the difference between UTM parameters and click IDs?
UTM parameters are six named query-string fields (utm_source, utm_medium, utm_campaign, utm_term, utm_content, utm_id) that you append to URLs so your analytics platform can attribute the resulting session to a named campaign. Click IDs (gclid, fbclid, msclkid, ttclid, etc.) are platform-specific identifiers that ad platforms append to outbound clicks to reconcile conversions back to the specific ad in their own attribution systems. Both can be present on the same URL, and most well-tagged paid links carry both.
Do UTM parameters affect SEO?
UTM parameters do not negatively affect SEO in any direct way Google has publicly documented. Google’s crawlers treat URLs with UTMs as the same canonical URL when a rel=canonical tag is present, which is standard on most CMSes. The practical caveat is that you should not link to your own internal pages with UTMs, because doing so can fragment session attribution for users who click an internal UTM-tagged link. Use UTMs on inbound links from external campaigns only.
What happens if a user lands on a page without UTM parameters?
The session is attributed by GA4 (or your analytics platform) using the next-best signal: the document.referrer HTTP header if one is present, or (direct) / (none) if the referrer is empty. Direct traffic in this sense includes typed-in URLs, bookmarks, app-to-browser handoffs that strip referrers, and any campaign that should have been UTM-tagged but was not. A high (direct) / (none) share is usually a tagging-discipline problem, not a brand-strength signal.
Should I use utm_id?
Only if you are importing cost data into GA4 from a non-Google ad platform. In that case, utm_id is the join key between your imported cost rows and GA4’s session rows. If you are not importing cost data, you can skip utm_id without losing any reporting capability. Most teams in 2026 do not use it.
How do UTMs interact with Google Ads auto-tagging?
Google Ads auto-tagging adds gclid to every click on a Google Ads link. The gclid is what Google Ads uses for its own conversion attribution. UTMs are separate and can be added in two ways: at the campaign or ad-group level in the Google Ads UI, or via Final URL Suffix at the account level. The cleanest pattern is Final URL Suffix with your standard UTM template, leaving gclid to auto-populate. Mixing manual UTMs that contradict the auto-tagged values is the most common source of source fragmentation in GA4 for paid search.
Are UTMs case-sensitive?
Yes, in every analytics platform that reads them. Facebook, facebook, and FACEBOOK are three different values in GA4, Adobe Analytics, Mixpanel, and any warehouse that ingests them. Adopt lowercase as a universal rule and enforce it at link creation. Case drift is the single most common cause of inflated unique-source counts.
Do UTMs survive iOS Link Tracking Protection?
UTMs are not on the reported community-sourced strip list and survive LTP in the contexts where LTP operates (Mail.app, Messages.app, Safari Private Browsing). Click IDs are a different story; gclid, fbclid, mc_eid, and several others have been reported as stripped. The mitigation pattern for paid attribution is to keep UTMs as the authoritative source-of-truth at the analytics layer, use Final URL Suffix on Google Ads so UTMs travel even when click IDs are stripped, and capture click IDs server-side at the moment of click where possible.
How long should a utm_campaign value be?
There is no formal limit. Browsers and servers handle URL query strings well into the thousands of characters, and analytics platforms accept reasonably long values. The practical limit is human readability. Campaign names over about 60 characters become hard to scan in GA4’s UI and in warehouse reports. Aim for descriptive but compact: 2026-q2-product-launch-press is 27 characters and parseable. our-amazing-summer-2026-product-launch-with-influencer-partners is 60 and unwieldy.
Can I use UTMs in email subject lines or social bios?
UTMs only function when they are on the URL the user clicks. They have no effect in plain text. The places they belong are: outbound links in email templates, outbound links in social posts (in the link itself, not the post text), QR codes that resolve to URLs, and any redirect link where the final destination resolves to your site.
What is the right way to tag links shared by individual employees?
Personal share links from employees (LinkedIn posts, internal sales emails, individual social shares) are the most common source of untagged traffic. A workable convention: provide employees with a shortener or link-tagging tool that auto-appends a UTM with utm_source=employee-share and utm_medium=social or utm_medium=email, and a utm_campaign value that identifies the program rather than the individual (2026-q2-sales-outbound, not the salesperson’s name). This keeps attribution clean without making each employee a separate source value.
Last updated: 2026-06-09
- 3 Users
- 5 Projects
- 2 Custom Domains
- Simple Taxonomy
- UTM Rules
- Presets
- Labels
- Notes
- Custom Parameters
- Multi-tag UTM Builder
- Auto-shortening
- Click Reports
- Fine-grained User Permissions
- Auditing Tools
- Chrome Extension
- Custom Domain SSL
- URL Monitoring
- Redirect Codes / Link Retargeting
- Bulk Operations
- 5 Users
- 10 Projects
- 3 Custom Domains
- All Taxonomy Types
- Bulk URL Cloning
- QR Codes
- Conventions
- Grid Mode URL Builder
- Email Builder
- Auto-generated Tracking IDs
- Automated Exports
- API Access
- Custom Users
- Custom Projects
- Custom Domains
- Single Sign-On (SSO)
- Invoice Billing
- Signed Agreement
- SOC 2 Type 2