{"id":48,"date":"2026-10-16T19:46:26","date_gmt":"2026-10-16T17:46:26","guid":{"rendered":"https:\/\/themarketingopsmanager.com\/blog\/utm-parameters\/"},"modified":"2026-10-22T20:25:10","modified_gmt":"2026-10-22T18:25:10","slug":"utm-parameters","status":"publish","type":"post","link":"https:\/\/themarketingopsmanager.com\/blog\/utm-parameters\/","title":{"rendered":"UTM Parameters Explained: The Complete Guide With Examples"},"content":{"rendered":"\n<div class=\"ok-byline\"><div class=\"ok-who\"><span class=\"ok-avatar\" aria-hidden=\"true\">MB<\/span><div><strong>Written by Max Benz<\/strong><span>Updated <time datetime=\"2026-10-16\">October 16, 2026<\/time> \u00b7 15 min read<\/span><\/div><\/div><ul class=ok-chips><li class=\"ok-chip ok-chip--ok\">Checked against Google Analytics Help<\/li><li class=\"ok-chip ok-chip--ok\">Examples you can copy<\/li><li class=\"ok-chip ok-chip--ok\">Written for marketing ops<\/li><\/ul><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">UTM parameters are short tags added to the end of a link that tell your analytics tool which campaign, source and medium sent a visitor. UTM stands for Urchin Tracking Module (a few older sources say Urchin Traffic Monitor), a name that goes back to Urchin, the web analytics software Google later developed. A tagged link looks like this: <code>https:\/\/www.example.com\/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=summer-sale<\/code>. When someone clicks it, Google Analytics reads the three values and files the visit under that campaign. Without them, the same click often lands in \"direct\" or a vague referral row.<\/p>\n\n\n\n<div class=\"ok-tldr\"><strong class=\"ok-tldr__h\">UTM parameters in five points<\/strong><ul><li>There are five standard parameters: utm_source, utm_medium, utm_campaign, utm_term and utm_content. Google Analytics also reads utm_id, utm_source_platform, utm_creative_format and utm_marketing_tactic.<\/li><li>Always set utm_source, utm_medium and utm_campaign together. If one is missing, Google Analytics 4 (GA4) reports show (not set).<\/li><li>Values are case sensitive, so Email and email become two different rows. Pick lowercase and write the rules down.<\/li><li>The utm_medium value decides which GA4 default channel a visit lands in. A made-up medium such as newsletter can end up in Unassigned.<\/li><li>A tag only helps if it survives to your customer relationship management (CRM) system. Check redirects, forms and hidden fields before a campaign goes live.<\/li><\/ul><\/div>\n\n\n\n<nav class=\"ok-toc\" aria-label=\"On this page\"><p class=\"ok-toc__h\">On this page<\/p><ol><li><a href=\"#what-are-utm-parameters\">What are UTM parameters?<\/a><\/li><li><a href=\"#what-are-the-five-utm-parameters\">What are the five UTM parameters?<\/a><\/li><li><a href=\"#how-do-you-add-utm-parameters-to-a-url\">How do you add UTM parameters to a URL?<\/a><\/li><li><a href=\"#what-is-a-good-utm-naming-convention\">What is a good UTM naming convention?<\/a><\/li><li><a href=\"#how-do-utm-parameters-affect-ga4-channel-groups\">How do UTM parameters affect GA4 channel groups?<\/a><\/li><li><a href=\"#do-utm-parameters-work-with-google-ads-auto-tagging\">Do UTM parameters work with Google Ads auto-tagging?<\/a><\/li><li><a href=\"#how-do-utm-parameters-get-into-your-crm\">How do UTM parameters get into your CRM?<\/a><\/li><li><a href=\"#what-breaks-utm-tracking\">What breaks UTM tracking?<\/a><\/li><li><a href=\"#utm-qa-checklist-before-you-launch\">UTM QA checklist before you launch<\/a><\/li><li><a href=\"#keeping-utm-tracking-from-silently-breaking\">Keeping UTM tracking from silently breaking<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><\/li><\/ol><\/nav>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-are-utm-parameters\">What are UTM parameters?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">UTM parameters are name and value pairs that follow a question mark in a URL, so analytics software can tell which marketing activity produced a visit, but they only work if the tool reading them recognizes the names. According to the <a href=\"https:\/\/en.wikipedia.org\/wiki\/UTM_parameters\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">Wikipedia article on UTM parameters<\/a>, the tags identify the campaign that refers traffic to a specific website, and analytics tools such as Google Analytics and Adobe Analytics parse them to fill standard and custom reports.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The name is easy to misread. It's got nothing to do with the UTM map coordinate system that shows up in search results for the same letters. If your question was \"what does UTM mean in marketing\", the answer is short: a UTM is a tag on a link.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Why bother? One page can receive links from a newsletter, a LinkedIn post and a paid ad. Untagged, your analytics tool sees the browser's referrer at best. Tagged, you choose the labels, and the values you type become rows in the Traffic acquisition report, where Google Analytics shows session source, medium and campaign.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-are-the-five-utm-parameters\">What are the five UTM parameters?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wikipedia and Google Analytics Help name five standard UTM parameters: utm_source, utm_medium, utm_campaign, utm_term and utm_content. Only three of them do the daily work. Google's guidance says that whenever you add parameters to a URL you should always use source, medium and campaign, while term and content are optional extras.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>What it answers<\/th><th>Example value<\/th><\/tr><\/thead><tbody><tr><td>utm_source<\/td><td>Where did the visit come from? The referrer, such as a site, newsletter or platform.<\/td><td><code>google<\/code>, <code>newsletter4<\/code>, <code>linkedin<\/code><\/td><\/tr><tr><td>utm_medium<\/td><td>How was the link delivered? The marketing medium.<\/td><td><code>cpc<\/code>, <code>email<\/code>, <code>paid_social<\/code><\/td><\/tr><tr><td>utm_campaign<\/td><td>Which promotion or product push is this?<\/td><td><code>spring_sale<\/code>, <code>webinar-q4<\/code><\/td><\/tr><tr><td>utm_term<\/td><td>Which paid keyword triggered the ad?<\/td><td><code>running+shoes<\/code><\/td><\/tr><tr><td>utm_content<\/td><td>Which creative or link was clicked? Used to tell two versions apart.<\/td><td><code>toplink<\/code>, <code>blue-button<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Google Analytics reads four more parameters, according to the <a href=\"https:\/\/support.google.com\/analytics\/answer\/10917952?hl=en\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">Analytics Help page on URL builders<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>What it is for<\/th><th>Reported in GA?<\/th><\/tr><\/thead><tbody><tr><td>utm_id<\/td><td>A campaign ID that matches the IDs you use when uploading campaign data<\/td><td>Yes<\/td><\/tr><tr><td>utm_source_platform<\/td><td>The platform that directs traffic, such as a buying platform like Search Ads 360 or Display &amp; Video 360<\/td><td>Yes<\/td><\/tr><tr><td>utm_creative_format<\/td><td>Type of creative, such as display, native, video or search<\/td><td>Not currently reported<\/td><\/tr><tr><td>utm_marketing_tactic<\/td><td>Targeting criteria applied to a campaign, such as remarketing or prospecting<\/td><td>Not currently reported<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So the answer to \"what are the 5 UTM parameters\" is the first table, and the answer to \"how many UTM parameters are there\" depends on whose list you read: five in the classic set, nine in Google's current documentation. One practical note from the same page: if you set one UTM parameter, Google strongly recommends setting all the relevant ones, especially source, medium, campaign, utm_id and utm_source_platform, because missing parameters produce (not set) values in reporting.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-do-you-add-utm-parameters-to-a-url\">How do you add UTM parameters to a URL?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Add a question mark after the page address, then write each parameter as <code>name=value<\/code>, and join the pairs with ampersands. Google's page puts it the same way: separate the parameters from the URL with a question mark, list parameter and value pairs separated by an equal sign, and separate each pair with an ampersand. You can add parameters in any order.<\/p>\n\n\n\n<ol class=\"ok-steps\"><li><h3 class=\"wp-block-heading\" id=\"start-from-the-final-url\">Start from the final URL<\/h3><p>Copy the exact address of the destination page, including <code>https:\/\/<\/code>. When that page already has a query string, join your pairs to it with <code>&amp;<\/code> rather than a second question mark.<\/p><div class=\"ok-steps__meta\">Owner: campaign owner \u00b7 1 min<\/div><\/li><li><h3 class=\"wp-block-heading\" id=\"choose-the-values-from-your-naming-list\">Choose the values from your naming list<\/h3><p>Source, medium and campaign come from your list of allowed values, never from memory. utm_content earns its place only when two links or creatives need telling apart, and utm_term only when a paid keyword is involved.<\/p><div class=\"ok-steps__meta\">Owner: campaign owner \u00b7 2 min<\/div><\/li><li><h3 class=\"wp-block-heading\" id=\"build-the-url\">Build the URL<\/h3><p>Google offers a Campaign URL Builder for websites and a Play Campaign URL Builder for Android app ads; typing the pairs by hand or filling a spreadsheet works too. Locking the spreadsheet values to a dropdown stops typos before they start.<\/p><div class=\"ok-steps__meta\">Owner: campaign owner \u00b7 3 min<\/div><\/li><li><h3 class=\"wp-block-heading\" id=\"test-the-link\">Test the link<\/h3><p>In a private window, confirm that the page loads and the parameters stay in the address bar. Then find your own visit in the Realtime report or a tag debug view.<\/p><div class=\"ok-steps__meta\">Owner: campaign owner \u00b7 5 min<\/div><\/li><li><h3 class=\"wp-block-heading\" id=\"shorten-only-after-testing\">Shorten only after testing<\/h3><p>A shortener adds a redirect, so click the shortened version once more and confirm the tags survived.<\/p><div class=\"ok-steps__meta\">Owner: campaign owner \u00b7 2 min<\/div><\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The screenshot shows the builder with the newsletter example filled in; it writes the same URL you would type by hand.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/themarketingopsmanager.com\/blog\/wp-content\/uploads\/2026\/10\/campaign-url-builder.png\" alt=\"The Google Campaign URL Builder filled in with source newsletter, medium email and campaign name summer-sale, showing the generated URL with utm_source, utm_medium and utm_campaign\" loading=\"lazy\"\/><figcaption class=\"wp-element-caption\">Google's Campaign URL Builder turns the three required values into a tagged link.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Here are three examples taken from the same pattern Google shows, adapted to different channels:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Channel<\/th><th>Tagged URL<\/th><\/tr><\/thead><tbody><tr><td>Newsletter<\/td><td><code>https:\/\/www.example.com\/?utm_source=newsletter1&amp;utm_medium=email&amp;utm_campaign=summer-sale<\/code><\/td><\/tr><tr><td>Blog referral<\/td><td><code>https:\/\/www.example.com\/?utm_source=exampleblog&amp;utm_medium=referral&amp;utm_campaign=summer-sale<\/code><\/td><\/tr><tr><td>Newsletter, second link<\/td><td><code>https:\/\/www.example.com\/?utm_source=newsletter1&amp;utm_medium=email&amp;utm_campaign=summer-sale&amp;utm_content=toplink<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The last row shows why utm_content exists. Google's example: two call-to-action links in the same email can carry different utm_content values, so you can see which version is more effective.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Where you can look at the result: in Google Analytics, session source\/medium, session medium, session source and session campaign appear in the Acquisition, Traffic acquisition report.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-a-good-utm-naming-convention\">What is a good UTM naming convention?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A good convention is a short written list of allowed values, in lowercase, with one separator, and one owner who'll approve new values. The reason is mechanical, and it's costly. Google's documentation states that parameter values are case sensitive: <code>utm_source=google<\/code> is different from <code>utm_source=Google<\/code>, and Meta and meta are treated as different values. Each variant becomes its own row, so one campaign can split into several rows, which isn't what anyone wants in a report.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Google's own best-practice table for Analytics points the same way:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Field<\/th><th>Rule from Google's best practices<\/th><th>What it prevents<\/th><\/tr><\/thead><tbody><tr><td>utm_source<\/td><td>One unique value per platform, such as a separate value for Facebook and Instagram<\/td><td>Merged or mislabeled platforms<\/td><\/tr><tr><td>utm_medium<\/td><td>One unique value per channel, such as <code>paid_social<\/code> and <code>organic_search<\/code><\/td><td>Channels landing in the wrong group<\/td><\/tr><tr><td>utm_campaign<\/td><td>One unique name that matches the exact campaign name<\/td><td>One effort split across several rows<\/td><\/tr><tr><td>utm_content<\/td><td>Unique to the specific creative or format, with consistent naming<\/td><td>Unreadable creative comparisons<\/td><\/tr><tr><td>utm_term<\/td><td>Unique, strict and consistent keywords, for example all lowercase<\/td><td>Keywords grouped incorrectly<\/td><\/tr><tr><td>Dynamic parameters<\/td><td>Use dynamic UTMs in platforms that support them, to avoid manual entry errors<\/td><td>Typos at scale<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The template below is ready to copy into a spreadsheet. The values are examples of the structure, not a standard, so don't treat them as rules. Change them to fit your channels and keep one list for everyone.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Field<\/th><th>Format<\/th><th>Allowed values or pattern<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td>utm_source<\/td><td>lowercase, no spaces<\/td><td><code>google<\/code>, <code>linkedin<\/code>, <code>newsletter<\/code>, <code>partner-name<\/code><\/td><td><code>linkedin<\/code><\/td><\/tr><tr><td>utm_medium<\/td><td>lowercase, underscore<\/td><td><code>cpc<\/code>, <code>email<\/code>, <code>paid_social<\/code>, <code>organic_social<\/code>, <code>referral<\/code>, <code>affiliate<\/code><\/td><td><code>paid_social<\/code><\/td><\/tr><tr><td>utm_campaign<\/td><td>lowercase, hyphen, topic first<\/td><td><code>product-launch<\/code>, <code>webinar-q4<\/code>, <code>spring-sale<\/code><\/td><td><code>webinar-q4<\/code><\/td><\/tr><tr><td>utm_content<\/td><td>lowercase, hyphen<\/td><td>creative or placement name<\/td><td><code>video-a<\/code><\/td><\/tr><tr><td>utm_term<\/td><td>lowercase, plus for spaces<\/td><td>the paid keyword<\/td><td><code>utm+tracking<\/code><\/td><\/tr><tr><td>utm_id<\/td><td>as in your campaign import<\/td><td>the ID from your ad platform or CRM<\/td><td><code>cmp-2047<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Two habits keep the list alive, and they're cheap. Put the campaign name in the project brief before anyone builds links, so the value exists before the first ad is live. And review the list each quarter, because every platform you add brings new source values that someone will invent on the fly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-do-utm-parameters-affect-ga4-channel-groups\">How do UTM parameters affect GA4 channel groups?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Google Analytics assigns every session to a default channel group using rules on the source and medium, so the utm_medium value you choose decides whether a visit lands in Email, Paid Social, Display or Unassigned. Google's help page on default channel group definitions says the channel definitions aren't case sensitive and can't be edited, and that Unassigned is the value used when no other channel rule matches the event data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The table below shows the manual-traffic rules from that page for the mediums marketers use most.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>utm_medium (or source)<\/th><th>Channel it lands in<\/th><th>Rule from Google's definitions<\/th><\/tr><\/thead><tbody><tr><td><code>email<\/code><\/td><td>Email<\/td><td>Source or medium equals email, e-mail, e_mail or e mail<\/td><\/tr><tr><td><code>cpc<\/code>, <code>ppc<\/code>, <code>paid_social<\/code>, <code>paid-social<\/code> with a social or search source<\/td><td>Paid Social or Paid Search<\/td><td>Source matches a list of social or search sites AND medium matches `^(.<em>cp.<\/em>\\<\/td><td>ppc\\<\/td><td>retargeting\\<\/td><td>paid.*)$`<\/td><\/tr><tr><td><code>social<\/code>, <code>social-network<\/code>, <code>social-media<\/code>, <code>sm<\/code><\/td><td>Organic Social<\/td><td>Medium is one of those values, or source matches the list of social sites<\/td><\/tr><tr><td><code>display<\/code>, <code>banner<\/code>, <code>expandable<\/code>, <code>interstitial<\/code>, <code>cpm<\/code><\/td><td>Display<\/td><td>Medium is one of those values<\/td><\/tr><tr><td><code>affiliate<\/code><\/td><td>Affiliates<\/td><td>Medium equals affiliate<\/td><\/tr><tr><td><code>referral<\/code>, <code>app<\/code>, <code>link<\/code><\/td><td>Referral<\/td><td>Medium is one of those values<\/td><\/tr><tr><td><code>sms<\/code><\/td><td>SMS<\/td><td>Source or medium exactly matches sms<\/td><\/tr><tr><td><code>organic<\/code><\/td><td>Organic Search<\/td><td>Medium exactly matches organic<\/td><\/tr><tr><td>Anything else, such as <code>newsletter<\/code> or <code>post<\/code>, with a source that matches no rule<\/td><td>Unassigned<\/td><td>No rule matches<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<aside class=\"ok-callout ok-callout--tip\"><p><strong>Use the mediums GA4 already understands<\/strong> Before you invent a medium, check it against the table. <code>email<\/code> goes to Email, <code>cpc<\/code> or <code>paid_social<\/code> go to the paid channels, and <code>newsletter<\/code> doesn't match any rule on its own. Google also maintains the list of social, search, video and shopping sites that the source rules use, so a source such as linkedin helps the Social channels match.<\/p><\/aside>\n\n\n\n<p class=\"wp-block-paragraph\">If a row says (not set), a parameter was missing. Google's page says missing UTM parameters result in (not set) values in reporting. If you've found a large Unassigned or (not set) bucket in your Traffic acquisition report, compare the medium values in it with the table above first.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"do-utm-parameters-work-with-google-ads-auto-tagging\">Do UTM parameters work with Google Ads auto-tagging?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">UTM parameters work with Google Ads auto-tagging, but the two don't carry equal weight. Google's help page on auto-tagging benefits states that when you use manual tagging and auto-tagging together, the source, medium and other traffic classification dimensions use the auto-tagged values, while your manual utm_content and utm_term values feed the Manual Ad Content and Manual Term dimensions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That has a practical consequence, and it's easy to miss. For Google Ads clicks, you don't need UTM source and medium at all, and Google recommends leaving auto-tagging on. Its documentation lists the reasons: you can import Analytics key events into Google Ads, you save the work of tagging each final URL, you remove typo risk (<code>utm_source=Google<\/code> against <code>utm_source=google<\/code> is Google's own example), you can build audiences from Google Ads dimensions such as ad group, and you see extra dimensions like ad group name, keyword text and query. Google adds that reporting features coming in the future will only be available with auto-tagging.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use UTM parameters for everything auto-tagging doesn't cover: email, organic social, partners, other ad platforms, QR codes and offline-to-online links. If you also want your own campaign labels on ad platform clicks, Google Ads has ValueTrack parameters for tracking templates. Per Google's page, a tracking template must contain a parameter that inserts your final URL, such as <code>{lpurl}<\/code>, or the landing page URL will break. A template like <code>{lpurl}?matchtype={matchtype}&amp;device={device}<\/code> appends several parameters with ampersands, and <code>{campaignid}<\/code> inserts the campaign ID.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-do-utm-parameters-get-into-your-crm\">How do UTM parameters get into your CRM?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">UTM values sit in the URL until something saves them. Your CRM learns about a tagged visit only if a form field, a tracking script or a native integration stores it, so check that handoff for every form. It's where good tagging usually goes to waste.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two common setups behave differently:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>System<\/th><th>How UTM data gets in<\/th><th>What to check<\/th><\/tr><\/thead><tbody><tr><td><span class=\"ok-tchip\"><span class=\"ok-fav ok-fav--xs\"><img src=\"\/blog\/wp-content\/uploads\/opskit\/fav\/hubspot.png\" alt=\"\" width=\"13\" height=\"13\" loading=\"lazy\" decoding=\"async\"><\/span>HubSpot Marketing Hub<\/span><\/td><td>HubSpot's own tracking URLs save the parameters of a visit when someone arrives from a tracking URL. You pick a campaign, a source category and optional medium, term and content values.<\/td><td>The campaign is required, and the source you choose decides where the visit is bucketed. Test with the tracking code validator before the campaign goes live.<\/td><\/tr><tr><td>Salesforce<\/td><td>Out of the box, a Lead has one Lead Source field and no UTM fields. Teams add custom text fields and hidden form inputs filled by a script from the URL.<\/td><td>Fields must exist on Lead and be mapped to Contact and Opportunity on conversion, and the script has to survive page changes.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Salesforce setups depend on custom work, so ask whoever owns the form to show you a test submission. If your CRM is HubSpot synced to Salesforce, our guide to the <a href=\"\/blog\/hubspot-salesforce-integration\/\">HubSpot Salesforce integration<\/a> shows how field mapping decides which value wins. A practical check is to submit a test lead from a tagged link and confirm that the record carries the source, medium and campaign you typed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To get UTM values into a CRM record, work through these four steps for each form:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Create a field for each of the five standard parameters on the lead or contact record.<\/li><li>Add matching hidden fields to the form and fill them from the URL with a script or the form tool's built-in option.<\/li><li>Keep the values in a first-party cookie if visitors move across pages before they convert.<\/li><li>Submit a tagged test lead and check that the record shows all five values.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">If your team keeps first-touch and last-touch values, store them in separate fields. Otherwise the next tagged visit overwrites the first one and you'll lose the original source.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-breaks-utm-tracking\">What breaks UTM tracking?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, a UTM tag can break, for example when a redirect drops the query string, and most failures are silent: the page still loads, the ad still spends, and the report quietly fills with wrong rows. The table lists the common causes and how to spot each one.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Failure<\/th><th>What you see<\/th><th>How to fix it<\/th><\/tr><\/thead><tbody><tr><td>Mixed case or spelling variants<\/td><td>The same campaign appears in several rows (<code>Email<\/code>, <code>email<\/code>, <code>e-mail<\/code>)<\/td><td>Lowercase naming list, builder with dropdowns<\/td><\/tr><tr><td>Missing medium or source<\/td><td>(not set) values in reports<\/td><td>Always set source, medium and campaign together<\/td><\/tr><tr><td>Medium outside GA4 rules<\/td><td>Visits in Unassigned or in the wrong channel<\/td><td>Use mediums from the channel table<\/td><\/tr><tr><td>UTMs on internal links<\/td><td>A visit that came from an ad shows as coming from your own site<\/td><td>Tag links you share outside your site, not links between your own pages<\/td><\/tr><tr><td>Redirect drops the query string<\/td><td>Clicks happen, but the landing page shows no campaign<\/td><td>Click the final shortened or redirected link and read the address bar<\/td><\/tr><tr><td>Auto-tagging and manual tags disagree<\/td><td>Google Ads source and medium differ from what you typed<\/td><td>Leave source and medium to auto-tagging for Google Ads<\/td><\/tr><tr><td>Form never saves the values<\/td><td>Leads reach the CRM with an empty source<\/td><td>Test a submission end to end, see the CRM section<\/td><\/tr><tr><td>A tag manager change removes the event<\/td><td>UTMs are fine but conversions stop<\/td><td>Monitor the conversion event, not only the link<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Should you use UTM parameters on internal links? No, as a rule. The internal-link row is common practitioner advice rather than something Google's UTM page spells out. It's still a rule worth following, because a link between your own pages that carries a campaign tag can replace the real source in reports.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"utm-qa-checklist-before-you-launch\">UTM QA checklist before you launch<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run this list for every campaign. Ten minutes here saves a week of cleaning data, and it's the cheapest check you'll do. To confirm that a test click really fires your tags, follow our guide to <a href=\"\/blog\/google-tag-assistant\/\">using Google Tag Assistant<\/a>.<\/p>\n\n\n\n<div class=\"ok-check\"><strong class=\"ok-check__h\">UTM checklist before you launch<\/strong><ul><li>Source, medium and campaign are all set on every tagged link<\/li><li>Every value comes from the naming list, in lowercase, with no spaces<\/li><li>The medium is one GA4 understands, such as email, cpc or paid_social<\/li><li>Auto-tagging stays on for Google Ads, and UTMs are used for other channels<\/li><li>Internal links between your own pages carry no UTM tags<\/li><li>The final URL, after any shortener or redirect, still shows the parameters<\/li><li>A test click shows up with the right source, medium and campaign in the Realtime report<\/li><li>A test form submission reaches the CRM with the source, medium and campaign filled in<\/li><li>The campaign name exists in the project brief or tracker before the first link is shared<\/li><li>One person owns the naming list and approves new values<\/li><\/ul><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"keeping-utm-tracking-from-silently-breaking\">Keeping UTM tracking from silently breaking<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A clean naming convention fixes the first half of the problem, the data you create. It doesn't fix the second. The second half is what happens after launch: a tag manager publish removes an event, a form field gets renamed, a CRM connection expires, and the tagged links keep working while the numbers go quiet. That's the gap between campaign setup and reporting, and it's why many marketing ops teams add regular checks next to the naming list. For the background on the function that owns this work, see our guide to <a href=\"\/blog\/what-is-marketing-operations\/\">what marketing operations is<\/a>. If you're picking the tools that sit around your campaigns, our roundup of <a href=\"\/blog\/marketing-operations-software\/\">marketing operations software<\/a> compares them. And if you'd like an AI assistant to help with the checks, our explainer on the <a href=\"\/blog\/model-context-protocol\/\">Model Context Protocol<\/a> shows how Claude and ChatGPT connect to those systems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"ok-tchip\"><span class=\"ok-fav ok-fav--xs ok-fav--ours\"><img src=\"\/blog\/wp-content\/uploads\/opskit\/fav\/mops.svg\" alt=\"\" width=\"13\" height=\"13\" loading=\"lazy\" decoding=\"async\"><\/span>The Marketing Ops Manager<\/span> checks the steps a UTM-tagged click passes through. It monitors landing pages, tracking, forms, CRM connections and sales handoffs on a schedule, opens an incident with evidence when a step fails, and works in Claude, ChatGPT or any MCP client. It's read-only by default and every write needs human approval. Signup is invite-only right now.<\/p>\n\n\n\n<aside class=\"ok-product ok-wide\" id=\"the-marketing-ops-manager\"><span class=\"ok-fav ok-fav--md ok-fav--ours\"><img src=\"\/blog\/wp-content\/uploads\/opskit\/fav\/mops.svg\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\"><\/span><div><p class=\"ok-product__eyebrow\">What these tools don&#x27;t catch<\/p><p class=\"ok-product__head\">A live campaign stops tracking and nobody notices<\/p><p>The Marketing Ops Manager checks each journey from ad click to sales handoff on a schedule, opens an incident with evidence and lets an AI agent in Claude or ChatGPT propose a fix that a person approves.<\/p><\/div><a class=\"ok-product__cta\" href=\"https:\/\/themarketingopsmanager.com\/\">See how it works<\/a><\/aside>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What are the 5 UTM parameters?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Source, medium, campaign, term and content. In Google Analytics Help the list has grown to nine, adding utm_id, utm_source_platform, utm_creative_format and utm_marketing_tactic, though the last two are not currently reported.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What does UTM stand for?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>UTM stands for Urchin Tracking Module, although a few older sources say Urchin Traffic Monitor. Urchin was a web analytics program from Urchin Software Corporation that Google later developed. The letters are unrelated to the UTM map coordinate system.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Which UTM parameters are required?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Three: utm_source, utm_medium and utm_campaign. Leaving any of them out gives you (not set) values in reports.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Are UTM parameters case sensitive?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes, UTM parameter values are case sensitive. Google's documentation states that parameter values are case sensitive, so utm_source=google and utm_source=Google are different values and show up as separate rows. Use lowercase for every value and keep one written list of allowed values.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Do UTM parameters work with Google Ads auto-tagging?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes, but auto-tagging wins on source and medium. Keep it on for Google Ads and save manual tags for other channels.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Why do my UTM visits show as Unassigned in GA4?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Google Analytics uses Unassigned when no default channel rule matches the session. The usual cause is a utm_medium value the rules don't recognize, such as newsletter. First compare your medium with the channel table in this guide, then switch to a recognized value such as email, cpc or paid_social, and retest the link.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>UTM parameters explained: the five tags, how to add them to a URL, a naming template, GA4 channel rules and a QA checklist to keep tracking clean.<\/p>\n","protected":false},"author":1,"featured_media":49,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-48","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guides"],"_links":{"self":[{"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/posts\/48","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/comments?post=48"}],"version-history":[{"count":2,"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/posts\/48\/revisions"}],"predecessor-version":[{"id":115,"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/posts\/48\/revisions\/115"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/media\/49"}],"wp:attachment":[{"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/media?parent=48"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/categories?post=48"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themarketingopsmanager.com\/blog\/wp-json\/wp\/v2\/tags?post=48"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}