BlogHow X (how-to)

How to Set Up UTM Parameters: Complete Guide 2026

Step-by-step setup of UTM parameters for Google Ads, Meta Ads, TikTok, and email: static, dynamic values, generators, common mistakes, and GA4 analysis.

Published:
How to Set Up UTM Parameters: Complete Guide 2026

What are UTM parameters and what do they include

UTM parameters are tracking codes appended to your URL after the question mark (?). They capture five pieces of information: utm_source (where traffic comes from), utm_medium (the type of traffic), utm_campaign (campaign name), utm_content (specific ad or creative), and utm_term (keyword). The first three are required, the last two optional. The parameters don't change the destination page—users land exactly where you want them. But Google Analytics 4 (GA4) and other analytics platforms use these parameters to organize traffic data and show you exactly where visitors came from.

iWhy you need UTM parameters

Without UTM tracking, analytics platforms lump all your paid traffic into generic categories like "direct / none" or "referral." You see 500 visitors arrived—but from which campaign, which ad, and which budget spent? UTM parameters solve this. Each click gets tagged, and your reports instantly show the source.

Let's break down a real example:

https://admetric.pro/?utm_source=google&utm_medium=cpc&utm_campaign=blog_utm&utm_content=hero_button&utm_term=how_to_set_utm

The base URL is https://admetric.pro/. The question mark (?) separates the URL from the parameters. After the question mark come key-value pairs joined by ampersands (&). Here's what this means: the visitor came from Google (utm_source=google) via a paid click (utm_medium=cpc), as part of a blog UTM campaign (utm_campaign=blog_utm), and clicked the button in the hero section (utm_content=hero_button) after searching for "how to set utm" (utm_term=how_to_set_utm). The page loads normally—parameters are invisible to users and only visible to your analytics system.

Five parameters: three required, two optional

ParameterWhat it meansExample valueRequired
utm_sourceWhere traffic originates (ad platform, partner site)google, meta, tiktok, linkedinYes
utm_mediumType of traffic—paid click, display, email, social, QRcpc, cpm, email, social, qrYes
utm_campaignCampaign name or IDsummer_promo, brand_2026q1Yes
utm_contentAd or creative identifier (for A/B tests)banner_top, video_30s, ad_123No
utm_termKeyword (for search ads)how_to_set_utm, marketing_analyticsNo

One rule: if you tag a link, fill in all three required parameters. Leave one blank and your analytics will misattribute the data to another source. Fill in every one of them deliberately rather than copying values between campaigns.

Static vs. dynamic values

Static values stay the same: utm_source=google always remains "google." Dynamic values are auto-filled by the ad platform using macros—special codes in curly braces. For example, utm_term={keyword} in Google Ads automatically gets replaced with the actual search term that triggered the click: "how to track UTM," "UTM parameter guide," and so on. This is perfect for campaigns with hundreds of keywords—you don't have to tag each one manually. We'll cover the macro syntax for different platforms later in this guide.

Before you start: Planning your UTM strategy

Before creating tags, build a values dictionary: utm_source=google (not Google or Google Ads), utm_medium=cpc (Cost Per Click—paid clicks) or cpm (display ads) or email (email campaigns) or social (social platforms). Always use lowercase Latin letters; separate multi-word values with underscores. Next, set up a shared tracking table (Google Sheets, Notion, or Excel) where your team logs each new campaign and pulls ready-made links. Without a consistent dictionary, you'll end up with six different variations of "google" in your analytics within a month, and you won't be able to group reports.

Decide what level of detail you need

Ask yourself: do you need to see "traffic from Google Ads"—or do you also need to break it down by specific ad, keyword, and landing page? Your answer determines how granular you make utm_campaign, utm_content, and utm_term. Finer granularity means more manual work, but also sharper analytics. Find the balance that works for your team size.

Create a values dictionary (source = google, not Google)

Real example: a team of four tags a single campaign, and your analytics suddenly show google, Google, Google_Ads, and google_ads as four separate sources. Combining those reports takes an hour. To avoid this, document your tagging rules in one place:

  • utm_source: lowercase Latin letters, one word or with underscores (google, meta_ads, tiktok_ads). Transliteration only if necessary.
  • utm_medium: stick to standard values—cpc, cpm, email, social, qr, offline, sms, push. Don't invent custom ones.
  • utm_campaign: format as "type-goal-period," e.g., promo-summer-2026q2 or launch-integrations-2026.
  • No non-Latin characters, spaces, or special symbols in values—they'll break the link when copied.

Set up a tracking spreadsheet

Here's what a simple tracking table looks like. One person maintains it; everyone else pulls ready-made links from it:

CampaignLanding pageutm_sourceutm_mediumutm_campaignReady-made link
Summer promo in Google Ads/pricing/googlecpcpromo-summer-2026q2admetric.pro/pricing/?utm_source=google&utm_medium=cpc&utm_campaign=promo-summer-2026q2
Integration launch on TikTok Ads/integrations/tiktoksociallaunch-integrations-2026admetric.pro/integrations/?utm_source=tiktok&utm_medium=social&utm_campaign=launch-integrations-2026

Use Google Sheets, Notion, ClickUp—whatever works. Assign one person to keep it current (usually a marketing or paid-traffic specialist) so new campaigns get added on day one, not weeks later.

How to create a UTM parameter manually: Step-by-step guide

Building a UTM tag takes four steps. Start with a clean URL. Add a question mark. Type in utm_source, utm_medium, and utm_campaign separated by ampersands. Optionally add utm_content and utm_term. Finally, open the link in an incognito browser window (private browsing with no cached sessions or stored data) and make sure the page loads without a 404 error or unexpected redirect.

It sounds complex in theory, but you'll build your first tag in 60 seconds and the tenth in 20. The trick is understanding the structure: the question mark opens the parameter block, and ampersands separate key-value pairs. That's it.

  1. 1

    Start with a clean URL

    Open the page you want to drive traffic to and copy the URL from the address bar. Remove anything after the ? if it's already there—those are leftover parameters from a previous session. Example: admetric.pro/pricing/

  2. 2

    Add the three required parameters

    Add a ? and enter utm_source, utm_medium, and utm_campaign separated by &. Result: admetric.pro/pricing/?utm_source=google&utm_medium=cpc&utm_campaign=summer_promo. Order doesn't matter; case does.

  3. 3

    Add utm_content and utm_term if needed

    If you have multiple ads or keywords in one campaign, add utm_content (to distinguish ads) and utm_term (keyword). Append with &: ...&utm_content=banner_top&utm_term=how_to_set_utm

  4. 4

    Test in incognito mode

    Open the full link in a private browser window. The page should load without a 404 or redirect to a different URL. If a redirect strips the parameters, that's a server configuration issue—the tag won't work.

!The # anchor issue

If your landing page has an anchor (admetric.pro/pricing/#tariff-mini), the UTM tag goes BEFORE the anchor, not after. Correct order: domain + path, then ?, then parameters, and finally # with the anchor. A working example: admetric.pro/pricing/?utm_source=google&utm_medium=cpc&utm_campaign=summer#tariff-mini. Put the parameters after the anchor and the browser will ignore them, the scroll will break, and the tag won't reach your analytics.

Here's a complete example for Google Ads—a pricing-tier campaign split across multiple ads:

https://admetric.pro/pricing/?utm_source=google&utm_medium=cpc&utm_campaign=mini_spring&utm_content=banner_top&utm_term=marketing_analytics

Copy this string into your ad platform's destination URL field when creating an ad. For deeper breakdowns of each parameter and ready-made templates for different platforms, check our complete UTM guide, which covers Google Ads, Meta Ads, TikTok Ads, email campaigns, and more.

Pro tip: create two or three working templates and keep them in your notes. Typing utm_source=google by hand every time is a shortcut to typos. And a typo in the tag (goggle instead of google) sends traffic to a completely separate analytics row, making you think you have two different sources.

Create UTM parameters with a generator: two free tools worth knowing

Using a UTM generator is faster: it automatically adds the question mark and ampersands, encodes spaces so the link doesn't break, and prevents you from accidentally entering non-ASCII characters. We recommend AdMetric's free UTM Builder (works without signup, has presets for Google Ads, Meta Ads, and TikTok Ads) and Google's own Campaign URL Builder for a simple, vendor-neutral option. Manual assembly is only needed when you're writing a dynamic template with platform macros for an entire campaign at once.

AdMetric UTM Builder

AdMetric's UTM Builder is a free online tool, no signup required. Select your ad platform from the list (Google Ads, Meta Ads, TikTok Ads, LinkedIn), enter your campaign name, and the generator automatically fills in the correct utm_source and utm_medium according to the platform's preset, while also checking for stray non-ASCII characters or accidental spaces.

Your finished link appears at the bottom—click "Copy link" and paste it into your ad. Dynamic macros are supported: for Google Ads, it will correctly insert {keyword} and {lpurl} so encoding doesn't break the macro.

Google Campaign URL Builder

Google's Campaign URL Builder is Google's own free tool for assembling a tagged link. Enter your website URL and the five UTM fields, and it stitches the string together for you. It has no ad-platform presets and doesn't support dynamic macros in curly braces, so if you want per-click values like the search term or ad ID, you'll still add those by hand afterward. It's a solid, no-frills option when you just need one clean link fast.

When you don't need a generator

Manual assembly is necessary in one case: when you're writing a dynamic template with platform macros like {keyword} or {creative}. Most generators either don't allow curly braces in parameter fields or they over-encode the braces—turning { into %7B—and the platform stops recognizing the macro.

In this case, copy a verified template into a text editor and substitute values manually—no transformations.

ToolPlatform presetsDynamic macrosQR codePrice
AdMetric UTM BuilderGoogle Ads, Meta Ads, TikTok Ads, LinkedIn Ads, PinterestYes, correct encodingYesFree, no signup
Google Campaign URL BuilderNoNoNoFree
Manual assemblyBy hand onlyFree

Whichever tool you pick, run the finished link through AdMetric's UTM Builder once before launch if you're on Google Ads, Meta Ads, or TikTok Ads—the built-in presets catch source/medium mismatches that are easy to miss when you build a URL from scratch, and it's free with no account required.

How to set up UTM parameters in Google Ads: Static and dynamic values

In Google Ads, enter your UTM tag in the destination URL field at the ad level. Required parameters are static; for other fields, use Google's dynamic macros (special codes in curly braces that Google substitutes with real values when the ad is shown). {keyword} automatically inserts the search term that triggered the click; {creative} inserts the ad ID; {matchtype} tells you if the match was exact, phrase, or broad. If you use ad extensions (additional links under your main ad), tag each one separately so you can track which extension drives clicks.

Where to add the tag: ad level, not campaign level

The path in your ads manager: Campaign → Ad group → specific Ad → Destination URL field. Add the question mark and parameters at the end of your landing page URL.

A common mistake: many people add the UTM tag at the ad group level so it applies to all ads in the group. You can do this, but if those ads have different headlines or images, you won't be able to tell them apart in reports. Tagging at the ad level gives you precision: you see which exact creative delivered the click.

If the tag is accidentally set both at the group level and the ad level, Google Ads uses the ad-level version. That's actually convenient: you can keep a default template at the group level and override it for specific experiments.

Dynamic macros: Full list with explanations

Dynamic macros are codes that Google substitutes automatically at click time. Write them once and Google fills in the ad ID, search term, match type, and device for each user individually.

MacroReplaced withUse in parameterExample
{keyword}The exact search term that triggered the clickutm_termhow to set utm
{creative}Your ad's ID in Google Adsutm_content98765432
{campaignid}Your campaign's ID in Google Adsutm_campaign12345678
{matchtype}Match type: e, p, or b (exact, phrase, broad)utm_medium or custom parametere
{device}Device type: m (mobile), t (tablet), c (computer)custom parameterm
{lpurl}Your final landing page URL after redirectsas a destination URL componenthttps://admetric.pro/pricing/
{network}Google Search, Google Network, or partner sitecustom parameterGoogle Search

Universal template example

Copy-and-paste template for any landing page:

?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_content={creative}&utm_term={keyword}

The logic is simple. utm_source and utm_medium stay static—this way, all your paid Google traffic groups into one analytics row. We use IDs for campaign and content rather than names: if you rename the campaign in Google Ads, your historical data stays intact. The utm_term automatically captures the exact keyword the user searched for—perfect for analyzing keyword performance.

UTM tags in ad extensions

Ad extensions are additional links under your main ad—for example, "Pricing," "Integrations," "Free demo," and "Contact us" appearing below an ad for your main product page.

The critical mistake: many people don't tag each extension link separately. Skip the tags and all extension traffic gets credited to your main ad, so you never learn which extension actually converts.

Real example. Your main ad points to /pricing/?utm_source=google&utm_medium=cpc&utm_content=main_ad. Your extensions are tagged separately: /pricing/?utm_content=ext_demo#pricing, /integrations/?utm_content=ext_integrations, /demo/?utm_content=ext_free_demo. Now your report shows that 60% of clicks come from the main ad, 25% from the free-demo extension. Next week's budget allocation is informed, not guesswork.

UTM parameters for Meta Ads, TikTok Ads, email, and offline

Meta Ads and TikTok Ads require manual UTM tags in their URL fields—neither platform auto-fills them. Email campaigns use utm_medium=email and utm_campaign=newsletter_month for organization. QR codes and offline materials (billboards, radio, printed materials) use utm_medium=qr or offline and a descriptive utm_source like flyer_2026q2 or billboard_times_square. For online platforms that support auto-tagging (like Google Ads with gclid), you can skip manual UTM if the auto-tagging reaches your analytics destination.

Google's gclid (Google Click Identifier) passes more detail to GA4 than manual UTM: the full campaign, ad group, ad, and keyword that triggered the click—without you lifting a finger. UTM parameters are more basic—just five fields. So manual UTM in Google Ads is necessary in one case: if your analytics live in a system that understands UTM but doesn't read gclid, like a third-party analytics platform or a custom dashboard.

Meta Ads and TikTok Ads

Neither platform auto-fills UTM—type it into the destination URL field by hand. Copy-paste templates:

Meta Ads: ?utm_source=meta&utm_medium=cpc&utm_campaign=campaign_name&utm_content={ad.id}. The {ad.id} dynamic value is Meta's macro—it auto-inserts each specific ad's ID.

TikTok Ads: ?utm_source=tiktok&utm_medium=social&utm_campaign=campaign_name. TikTok doesn't send macros, so there's no way to auto-insert the ad ID—fill it manually or leave utm_content blank.

Email campaigns, QR codes, offline

Use a different utm_medium for each channel to avoid mixing data later:

  • Email: utm_medium=email, utm_campaign=newsletter_2026_may—include the month so monthly reports are self-explanatory.
  • QR code on printed materials: utm_medium=qr, utm_source=flyer_subway or the name of the distribution point.
  • Offline without QR (billboard, radio, business card): create a short memorable URL that redirects and auto-injects the UTM tag.
Ad platformAuto-taggingWhere to add the tagMacro support
Google AdsYes, gclid (where available)Destination URL at ad levelYes: {keyword}, {creative}, {matchtype}, etc.
Meta AdsNoURL field at ad levelLimited: {ad.id}
TikTok AdsNoDestination URL fieldNo
LinkedIn AdsNoDestination URL at campaign levelLimited
Email campaignsNoIn each link in the email bodyNo
QR code / offlineNoIn the URL before generating QRNo

How to analyze UTM parameters in Google Analytics 4

In Google Analytics 4, open Reports → Acquisition → Traffic acquisition. You'll see traffic broken down by source, medium, and campaign. The data flows automatically from your tagged links. If you're using a cross-platform analytics tool that syncs ad spend with CRM deals, UTM data flows in automatically from your ad accounts or call-tracking system, and you'll see ROI and cost-per-lead by source/medium/campaign combination. Those source/medium/campaign rows are also the raw material for marketing attribution: deciding which touchpoint actually gets credit for a conversion when a visitor took several steps before buying.

Google Analytics 4: Traffic acquisition report

Go to GA4, navigate to Reports → Acquisition → Traffic acquisition. You'll see a breakdown by source (Google, Meta, etc.), then medium (cpc, social, email), then campaign name. Click any row to drill down—you move from "traffic from Google" to "traffic from Google paid search" to "traffic from Google search summer promo." Each level expands so you can zoom from general to specific.

In the column selector, add a goal or conversion event—then you see "Sessions," "Conversions," and "Conversion rate" side by side. One glance tells you which UTM combination actually drives results, not just which one sends the most clicks. If you want a broader walkthrough of building reports beyond this one screen, see our guide to marketing analytics.

Linking UTM to goals and revenue

UTM without goals is wasted effort. You see 500 sessions from Google and 200 from Meta. So what? Who actually bought? Goals turn sessions into money: 500 sessions from Google produced 12 sign-ups at $50 each, while 200 from Meta produced 8 sign-ups at $35 each. Now you know where to move the budget. For the deeper math behind cost per lead and return on marketing spend, see our guide to marketing ROI.

Cross-platform analytics: UTM to CRM to ROI

Cross-platform analytics systems pull UTM data from your ad accounts and automatically sync it to your CRM when a visitor fills out a form or makes a purchase—especially useful once your ad accounts and CRM are already connected through integrations. The UTM is now attached to the deal, not just the session. The system calculates real CPL (cost per lead) and ROMI (return on marketing investment) per UTM combination—accounting for the fact that some leads go cold, others convert weeks later, and some upsell. We cover this full chain, from ad click to UTM tag to CRM deal to ROI, in our guide to end-to-end marketing analytics.

AdMetric

Combine UTM data from Google Ads and Meta in one CPL report

AdMetric pulls UTM data from both ad platforms and syncs deals from your CRM. Calculates CPL and ROMI per UTM combination—no manual spreadsheet work. 7 days free.

Start for free →

Common mistakes and self-check checklist

The most frequent errors: inconsistent capitalization in one parameter (google vs. Google becomes two separate sources), non-ASCII characters in values (traffic counts, but the campaign name displays as %C3%A9t%C3%A9...), two question marks in a URL (everything after the second is ignored), missing question mark at the start of tags (they append to the URL and cause a 404), spaces instead of underscores (breaks the tag), quotation marks around values (also breaks it), and forgetting to tag ad extensions.

Top 7 mistakes that break analytics

  1. Inconsistent capitalization in one parameter. utm_source=google and utm_source=Google appear as two different sources in GA4; reports won't combine. Lock in a dictionary and always use lowercase.
  2. Non-ASCII characters in values. GA4 URL-encodes them as %C3%A9t%C3%A9...—the campaign name becomes unreadable. Normalize upfront: "Été Sale" becomes ete_sale.
  3. Two question marks in the URL. If your landing page already has parameters (/pricing/?tab=yearly), a second ? in the UTM tag is ignored by the browser. Combine parameter blocks with &: /pricing/?tab=yearly&utm_source=google&....
  4. Tag placed after the # anchor. admetric.pro/pricing/#pricing-table?utm_source=google—the tag won't fire. The browser processes the anchor client-side and drops everything after it. Put UTM BEFORE the anchor: admetric.pro/pricing/?utm_source=google#pricing-table.
  5. Spaces or quotation marks in values. utm_campaign="summer sale"—quote marks and spaces break parsing. Replace spaces with underscores; remove quotes.
  6. Forgotten tags on ad extensions. Only the main ad is tagged; extensions have no UTM. All extension traffic gets lumped into one "no UTM data" row. Tag each extension separately with a unique utm_content.
  7. Redirect that strips parameters. Your site does a 301 redirect from /pricing to /pricing/, but the redirect logic loses GET parameters (happens on older platforms). Verify that the final URL after all redirects contains your UTM string. If not, fix the redirect logic or use the correct URL in your ad setup from the start.

Pre-launch checklist

+Self-check before you go live
  • Landing page URL is clean (no trailing ? or & before parameters)
  • Latin characters and lowercase everywhere
  • All three required parameters present (source, medium, campaign)
  • Campaign name is one word or uses _ instead of spaces
  • Dynamic macros only in your ad platform's fields, not hardcoded
  • Each extension link tagged separately
  • Link tested in incognito mode—page loads without 404 or redirect
  • Tag recorded in your shared tracking table

Fixing broken UTM data after launch

You can't rewrite history—what's logged in GA4 stays logged. Create new, correct links and restart tagging. For old data, use GA4's data filter: Reports → filter menu → create rule "utm_source = Google" → action "Exclude." This removes the bad rows from future reports while your historical data stays untouched in raw data exports.

90% of UTM issues boil down to three things: case sensitivity, non-ASCII characters, or forgotten extension tags. Create a Google Sheets template with your dictionary and constants—and you'll never hit these potholes again.

Can I use non-ASCII characters in UTM parameters?+
Technically yes, but GA4 will URL-encode them as %C3%A9t%C3%A9-... and your reports become unreadable. Exception: dynamic macros in ad platforms (like Google Ads' {keyword}) auto-expand to non-ASCII text, and GA4 decodes them back for display. If readability matters—and it should—normalize upfront: 'Été-Soldes' becomes ete_soldes.
What's the difference between UTM and platform auto-tagging (gclid)?+
Auto-tagging like Google's gclid passes richer data to GA4 (campaign, ad group, ad, keyword, match type) without manual work. UTM is more basic—five standard fields—but it's universal and works anywhere. In practice: if you use Google Ads and GA4 is your analytics destination, gclid alone is enough. UTM is mandatory for Meta Ads, TikTok Ads, email, QR codes, and third-party analytics that don't support auto-tagging.
Static or dynamic parameters—which should I use?+
Source, medium, and campaign (the top level) are always static—otherwise GA4 can't group traffic into reports. Content and term (the details) can be dynamic in platforms that support macros. Google Ads: use {creative} for ad ID and {keyword} for search term. Platforms without macro support (Meta, TikTok, email, QR codes) require you to write these values by hand, or leave them blank. Safe pattern: static at the top, dynamic for ad-level detail.
Why aren't my UTM parameters showing up in GA4?+
Three common causes. First: no real traffic on those links yet; open the link in incognito mode and check if a session appears in the Traffic acquisition report within 5–10 minutes. Second: case sensitivity or non-ASCII characters mangled the tag; search the same report for URL-encoded strings or duplicates like 'Sale' and 'sale'. Third: a redirect strips GET parameters; verify that your final destination URL (after all redirects) includes ?utm_source=...
How many UTM parameters can fit in one URL?+
The standard five (source, medium, campaign, content, term) work everywhere. Technically, GA4 accepts custom parameters (utm_audience, utm_creative, utm_channel) as custom dimensions. The real limit is the URL length: most ad platforms and QR code generators cut off URLs longer than 1024–2048 characters. A long UTM string becomes truncated, and the link breaks with a 404.
Where should I add UTM in Google Ads—campaign level or ad level?+
If all ads in a group share the same tag, put it at the group level—one edit instead of twenty. If you're A/B testing creatives and each needs a different utm_content, tag at the ad level only. If both exist, the ad-level tag wins. Safe strategy: static parts (source, medium, campaign) at the group level; unique utm_content for each ad.
Do I need UTM parameters for organic search traffic?+
No, and adding them breaks your data. GA4 identifies organic search through the browser's referer header and search query data—no tags needed. If you tag an organic link with UTM, the traffic jumps into your custom source instead of 'Organic Search,' and your organic report gets corrupted. Save UTM for paid and controlled channels only.