Published by Terminus, the marketing taxonomy governance platform.

Google Ads UTM Tracking: Auto-Tag vs Manual (2026 Edition)

PC

Puru Choudhary

Last updated

Published by Terminus, the marketing taxonomy governance platform.

Auto-tag vs manual UTM tagging is the wrong question in 2026. The right question is how to run both together so Google Ads, GA4, your warehouse, and every downstream destination see consistent campaign data. Leave auto-tagging on, layer manual UTMs through the Final URL Suffix field, and govern the manual values with a controlled vocabulary. That gets you Google’s click-level signal plus a portable taxonomy that survives outside Google’s walled garden.

TL;DR

  • Auto-tagging appends gclid (or gbraid/wbraid on iOS) to your landing URL and powers Google Ads to GA4 attribution, Smart Bidding, and conversion import. Leave it on.
  • Manual UTMs cover everything auto-tagging cannot reach: non-Google destinations, warehouse joins, CRM passthrough, third-party analytics, and BI dashboards that read URLs.
  • The Final URL Suffix field is where manual UTMs belong in Google Ads. Setting them in the Final URL or the Tracking template breaks at scale.
  • Performance Max auto-tags every placement, but manual UTM control is limited at the asset and audience signal level. Tag what you can, accept the gaps, and use account-level Final URL Suffix as the floor.
  • iOS Link Tracking Protection does not strip gclid or manual UTM parameters in current testing. It is the fbclid, mc_eid, and similar that get hit. Verify against PrivacyTests.org rather than guessing.
  • Most “auto-tagging vs manual” problems are configuration bugs: redirect loss, double-tagging, casing drift, or Tracking template misuse. The seven scenarios below explain how to spot each one.

What auto-tagging actually does

Google Ads auto-tagging appends a gclid parameter to the destination URL when a user clicks a paid ad. Three pieces matter.

The gclid itself. It is an opaque, encrypted token that encodes the click context: ad group, keyword (for Search), match type, network, device, and a timestamp. GA4 reads the gclid at session start and joins it back to the Google Ads dimensions through the Google Ads to GA4 product link. That join is what gives you campaign, ad group, keyword, and cost data inside GA4 without setting a utm_source or utm_campaign value.

gbraid and wbraid for iOS. Since Apple’s App Tracking Transparency restricted IDFA access, Google has used two additional click IDs for iOS journeys where IDFA is unavailable. gbraid is the iOS click ID for app conversions (web-to-app or app-context clicks). wbraid is the iOS click ID for web conversions when IDFA cannot be read. Both are aggregated, privacy-preserving identifiers, not user-level, so modelled conversions fill the gaps for Smart Bidding.

Parallel tracking. The click-time architecture that sends the user to the landing page directly while the click-measurement request fires in the background to Google’s servers. It is on by default and required across all campaign types. If a third-party click tracker depends on a 302 redirect before the user reaches your domain, parallel tracking will have broken it.

What auto-tagging does not do: it does not write utm_source=google, utm_medium=cpc, utm_campaign=<campaign name>, or any other UTM parameter to the URL. The gclid is decoded by Google, not by your URL parser. If you ship the URL to a destination outside the Google to GA4 join (a HubSpot form, a CRM, a Mixpanel project, a warehouse), that destination sees only the gclid string. It does not know which campaign produced it unless you query the Google Ads API to decode the click or you also pass manual UTMs.

Auto-tagging is a closed-loop solution between Google Ads and GA4. Outside that loop, the gclid is opaque.

What manual UTMs actually do

Manual UTMs are the open-standard counterpart. The five canonical parameters (utm_source, utm_medium, utm_campaign, utm_term, utm_content) are read by virtually every analytics platform, CRM, ESP, and BI tool. They are plain strings, they survive query-preserving redirects, and they show up wherever the landing URL ends up: form submissions, cookies, CRM lead records, attribution platforms, warehouse session tables.

Three jobs in particular need manual UTMs:

Cross-platform reporting. When the executive dashboard pulls spend and conversions from Google Ads, Meta, LinkedIn, TikTok, programmatic DSPs, and email into one view, the join key is almost always a canonical campaign name. That name lives in utm_campaign or in a mapping table keyed off it. The gclid is useless here because Meta does not know what a gclid is.

Warehouse joins. If you stream GA4 events to BigQuery (or run a server-side stack into Snowflake, Redshift, or Databricks), the source, medium, and campaign fields you query are populated from UTM parameters at session start. GA4 will write google / cpc / (not set) for an auto-tagged click if no manual UTM is present, with the campaign filled in later through the integration. The warehouse export does not always include the resolved Google Ads campaign name on every event row. Manual UTMs guarantee the campaign name is on every row of the session.

Non-Google destinations. A HubSpot or Marketo form captures whatever query parameters are on the page URL via hidden fields. If only gclid is present, the lead record shows Source: gclid=abc123... which is unusable for sales reporting. Manual UTMs give the form clean values: Source: google, Medium: cpc, Campaign: brand-na-q3-2026. Same logic for Salesforce Web-to-Lead, Amplitude, Mixpanel, and any product analytics tool that reads URL parameters into user properties.

The “auto-tag or manual” framing made sense when Google Ads to Google Analytics was the entire reporting stack. In 2026, with a typical marketing team running five to fifteen destinations off a single click, it does not.

The seven scenarios where layering matters

Here is the practical case for layering, scenario by scenario. If any of these describe your stack, you need both auto-tagging and manual UTMs.

1. You report on Google Ads alongside other paid channels in a single dashboard. Looker Studio blending Google Ads with Meta exports, LinkedIn Campaign Manager, and TikTok Ads Manager needs a single campaign field. Manual UTMs with a shared naming convention give you that field. The gclid does not appear in any non-Google export, so blending on it is impossible.

2. You import leads to a CRM and want clean source attribution. Salesforce, HubSpot, Pipedrive, and similar tools capture URL parameters on the form. Without manual UTMs, the CRM sees nothing or an opaque click ID. With manual UTMs, sales sees “Lead from google / cpc / spring-campaign-2026” the moment the record syncs.

3. You run a marketing data warehouse for downstream modelling. Attribution models, marketing mix models, and CLV calculations rely on a clean channel-level taxonomy in the warehouse. Even if GA4 to BigQuery enriches the Google Ads campaign post-hoc, your warehouse ETL almost certainly reads UTMs as the primary source of campaign, source, and medium across all channels. Forcing one channel to require a special enrichment step is operationally fragile.

4. You use a third-party analytics tool that is not GA4. Adobe Analytics, Mixpanel, Amplitude, Heap, PostHog, and most product analytics tools read UTM parameters into their own session and user models. None of them decode gclid. If conversion funnel reporting lives in Mixpanel and not GA4, manual UTMs are how Mixpanel knows the visit was paid Google.

5. You run email and other non-paid channels with the same convention. Once you have a controlled utm_source / utm_medium vocabulary across email, organic social, paid social, paid search, display, and partnerships, treating paid Google Search as a special case that lacks manual UTMs creates a permanent reporting gap.

6. You need campaign attribution to survive redirects. Any click tracker, shortener (Bitly, Rebrandly, internal), affiliate redirector, or consent redirect between the click and the landing page can preserve query parameters faithfully or lose them. Manual UTMs in the Final URL Suffix are debuggable: you can curl the redirect chain and see the parameters drop. With auto-tag alone, the same problem is invisible because Google assembles the URL at click time.

7. You want consistency between display, video, and search ad surfaces. Display and YouTube traffic shows up in GA4 with auto-tagging just like Search. But the campaign and ad group context for Display is often more granular than what auto-tag surfaces out of the box. Manual UTMs let you encode placement, creative variant, and audience targeting in utm_content and utm_term in a way that does not require API enrichment to interpret.

If none of these seven apply, you might be in the auto-tag only camp. Almost every mid-market or enterprise business hits at least three.

Final URL Suffix: the right place to set manual UTMs

Google Ads gives you four candidate fields for manual UTMs: Final URL (per-ad destination URL), Tracking template (click-time redirector pattern), Final URL Suffix (parameters appended after the Final URL’s query string), and Custom parameters (key-value pairs available at multiple levels). The right answer is Final URL Suffix. Here is why the others are wrong or worse.

Final URL is wrong because it is per-ad. Putting utm_source=google&utm_medium=cpc&utm_campaign=spring-2026 directly into the Final URL means you set it once per ad. If you have 200 ads across 30 ad groups, that is 200 copies of the same convention. The first campaign rename means editing 200 URLs and praying you do not introduce a typo. The Final URL field is for the destination page, nothing else.

Tracking template was designed for click trackers. The {lpurl} token resolves to your Final URL and you wrap it in a redirector. Putting UTM parameters here still works but mixes concerns. If you later add a click tracker, you maintain UTM logic and tracker logic in the same field. Use it for click trackers, not for static UTMs.

Custom parameters introduce a level of indirection you do not need. You define {_campaign} at the campaign level, then reference &utm_campaign={_campaign} in another field. Tidy on paper, but anyone debugging the URL has to chase two levels of configuration to figure out the actual string.

Final URL Suffix is purpose-built for this. Set once at the account level (the floor), with overrides at campaign or ad group level for exceptions. The parameters are appended to the Final URL after its own query string, so the destination page sees the full set.

A typical account-level Final URL Suffix:

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

Curly-brace values are Google Ads ValueTrack parameters. {campaignid} resolves to the numeric campaign ID at click time. {keyword} resolves to the matched keyword on Search. {creative} resolves to the ad creative ID. You can use {campaign} for the literal name (lowercased, spaces URL-encoded), but most teams prefer the ID because renames break name-based joins retroactively.

For a human-readable campaign name, override the account-level suffix at the campaign level with a fixed string:

utm_source=google&utm_medium=cpc&utm_campaign=brand-na-q3-2026&utm_term={keyword}&utm_content={creative}

That gives you a controlled-vocabulary campaign name that survives Google Ads renames and matches your cross-channel naming convention. For users of Terminus, the marketing taxonomy governance platform, the campaign name in the suffix matches a controlled vocabulary entry, so the same utm_campaign=brand-na-q3-2026 string flows across paid search, paid social, email, and partnerships, and joins cleanly in the warehouse.

A few rules when you set this up:

  • Use lowercase consistently. Google and google are different rows in every analytics tool.
  • Hyphenate, do not use spaces. brand-na-q3-2026 is durable; the URL-encoded space version confuses dashboards.
  • Avoid characters that need encoding: no parens, slashes, or plus signs.
  • Document the convention. Final URL Suffix is invisible to most of the team unless they know to look in Settings.

Performance Max specifics

Performance Max changes the picture in two ways.

Auto-tagging behaviour is the same as other campaign types. A click on any Performance Max placement (Search, Display, YouTube, Gmail, Discover, Maps) appends gclid and powers the same closed-loop GA4 attribution.

Manual UTM control is more constrained. Performance Max abstracts placement and audience signal management away from the advertiser. You cannot set per-placement Final URLs the way you can for Search or Display, and asset-level reporting is famously limited compared to per-creative reporting in Search Ads or Meta. A manual UTM convention that encodes placement or creative variant inside utm_content is going to be coarser for Performance Max than for Search.

The pragmatic 2026 approach for Performance Max:

  • Set the Final URL Suffix at the account level so every Performance Max campaign emits a baseline utm_source=google&utm_medium=cpc (or utm_medium=pmax if you want to distinguish).
  • Override at the campaign level with the canonical campaign name in utm_campaign.
  • Accept that utm_content and utm_term will be less granular than Search. ValueTrack tokens that resolve in Performance Max are a subset of Search’s. {campaignid} works. {adgroupid} does not resolve cleanly for Performance Max asset groups the way it does for Search ad groups, since Performance Max uses asset groups rather than ad groups; asset-group reporting lives in the Google Ads UI and API, not in ValueTrack. {keyword} does not resolve because Performance Max does not target keywords.
  • Use Performance Max’s own asset group and channel reports for the granularity that auto-tagging surfaces. Manual UTMs cannot replicate it.

Performance Max trades placement transparency for ML-driven optimisation. Manual UTMs at the campaign level give you cross-channel reporting integrity. They do not give you back placement-level granularity that Google itself does not expose. If you need to differentiate audience-signal performance, you do it via separate Performance Max campaigns, one per signal grouping, each with its own utm_campaign.

Cross-domain and iOS LTP interactions

Two interaction layers regularly bite teams running Google Ads in 2026.

Cross-domain tracking. If a Google Ads click flows from your-domain.com to checkout.your-vendor.com mid-funnel, GA4’s cross-domain configuration has to include both hostnames or session attribution resets at the boundary. Auto-tagging handles gclid propagation only if the GA4 cross-domain settings include the cookie-decorating logic that carries client ID and session ID across. Manual UTMs survive the same hop because any redirect that preserves the query string preserves them. The classic failure is a checkout domain that strips query parameters when the user logs in. Manual UTMs captured in a session-start cookie on the first hit survive even if the URL is rewritten.

iOS Link Tracking Protection (LTP). Apple introduced LTP starting in iOS 17 to strip certain query parameters from links opened in Mail, Messages, and Safari Private Browsing. The list is community-sourced (Apple has not published an official one), and reported entries include fbclid, mc_eid, and some Twitter and Instagram tracking parameters. According to current PrivacyTests.org data and community reports, gclid, gbraid, wbraid, and standard utm_* parameters are not on the strip list. The list has been updated quietly more than once, so verify against PrivacyTests.org rather than trusting an old blog post.

Practical implication: iOS LTP affects Meta paid social attribution far more than Google paid search. A Google Ads click from Safari in 2026 still arrives with gclid intact and any manual UTMs you appended also intact. If you see iOS-specific attribution loss, the cause is more likely cross-domain misconfiguration or in-app browser handling (Gmail or YouTube app clicks open in internal browsers with separate cookie contexts) than LTP. Server-side conversion enrichment via Enhanced Conversions or the Google Ads API is the recovery path for the in-app case, not a UTM tweak.

Common mis-configurations and how to spot them

Seven failure patterns we see again and again. Each has a specific signal.

1. Double-tagging. Final URL has utm_source=google baked in and Final URL Suffix also adds it, so the landing URL ends up with ?utm_source=google&utm_source=google. GA4 picks the last value most of the time, but some destinations pick the first. Spot it by previewing the live URL via the Google Ads Ad Preview and Diagnosis tool.

2. Casing drift. Half the account is tagged utm_source=Google and half is utm_source=google. In GA4 these are two separate sources. Look for split traffic in the Source / Medium report where the same channel appears twice.

3. The Tracking template is wrong and breaking clicks. A Tracking template set up years ago for a third-party click server that no longer exists can hard-fail or 404. Click the live ad in incognito and watch the redirect chain.

4. ValueTrack tokens left unresolved. Final URL Suffix says utm_campaign={campaign} but the destination URL shows literally utm_campaign={campaign}. Usually means the suffix was set on a campaign that does not support that token (Performance Max with a Search-specific token), or at an invalid level. Confirm in Ad Preview and Diagnosis.

5. Stripped parameters at a redirect. Landing URL has ?utm_source=google&utm_medium=cpc&gclid=abc123 but the GA4 hit shows only gclid. A redirect is stripping UTMs. Curl the click URL with -L -v and inspect each hop. Common culprits: country selectors, login redirects, consent-management redirects on first visit.

6. Auto-tagging disabled at the account level. Someone turned it off years ago thinking manual UTMs were “cleaner.” Smart Bidding signals are weaker, conversion import is harder, and GA4 reports (direct) / (none) for Google paid clicks. Re-enable under Account Settings.

7. Final URL Suffix set at the wrong level. Most teams should set it at the account level so every campaign inherits. If it is set at ad group level for some campaigns and campaign level for others, inheritance gets confusing. Pick a level (account is recommended), override only for deliberate exceptions.

The most useful diagnostic tool inside Google Ads is Ad Preview and Diagnosis. It renders the live destination URL including resolved ValueTrack tokens and the auto-tagged gclid. If you suspect any of the above, this is where you confirm.

FAQ

Do I still need manual UTMs if I only use Google Ads and GA4?

If your entire reporting stack is Google Ads to GA4 and nothing else, auto-tagging alone is technically sufficient. The moment you add a second destination (CRM, warehouse, non-Google analytics, blended BI dashboard), manual UTMs become necessary. Most accounts hit that threshold within the first year of mature paid media operations.

Should I disable auto-tagging if I am using manual UTMs?

No. Keep auto-tagging on. The gclid powers Smart Bidding signal quality, Google Ads to GA4 conversion import, Enhanced Conversions, and the closed-loop attribution that drives Google’s bid strategies. Disabling it weakens the Google side of your stack without giving manual UTMs anything they did not already have.

What is the difference between Tracking template and Final URL Suffix?

Tracking template is a click-time URL pattern designed for third-party click trackers, typically wrapping the destination URL in a redirector. Final URL Suffix appends query parameters without redirection. For static manual UTMs in 2026, Final URL Suffix is the right field.

Why does GA4 show some Google Ads clicks as (direct) / (none)?

Two common causes: auto-tagging is disabled and GA4 has no parameters to read, or a redirect between the click and the landing page is stripping both gclid and any manual UTMs. Less commonly, the GA4 to Google Ads product link is broken. Re-enable auto-tagging, verify the redirect chain preserves query parameters, and check the product link under GA4 Admin.

How do gbraid and wbraid differ from gclid?

gclid is the standard Google Ads click ID for desktop and consented mobile traffic. gbraid is the iOS click ID for app conversions where IDFA is unavailable. wbraid is the iOS click ID for web conversions in the same conditions. All three are decoded by Google for attribution. Any of the three can appear on an iOS-originated click depending on the conversion type.

Based on current PrivacyTests.org community testing, no. The reported LTP list focuses on parameters like fbclid and mc_eid. gclid, gbraid, wbraid, and standard utm_* parameters have not been reported as stripped. Verify against PrivacyTests.org because Apple does not publish an official list and the behaviour has been updated quietly more than once.

Can I use the same UTM convention for Performance Max and Search campaigns?

Yes for the high-level parameters (utm_source, utm_medium, utm_campaign), no for granular ones (utm_term, utm_content). Performance Max does not expose keyword or placement-level ValueTrack tokens the same way Search does. Use Google Ads’ own asset group and channel reports for what UTMs cannot capture.

How do I audit my Google Ads URLs at scale?

Use the Google Ads Editor to bulk-export Final URLs, Final URL Suffix, and Tracking templates across the account. Run a script (or use a governance platform) to check each URL against your controlled vocabulary: lowercase casing, hyphenated values, no unexpected keys, no double-tagged parameters, no unresolved ValueTrack tokens. A weekly audit catches drift before it shows up in monthly reporting.

What is the right utm_medium value for Google Ads?

cpc is the historical convention and still the most widely supported value for paid search across analytics tools. GA4 channel grouping recognises cpc (and ppc, paidsearch) as Paid Search. Safe defaults: utm_medium=cpc for Search, display for Display, video for YouTube, pmax for Performance Max if you want a distinct channel.

What happens if I rename a Google Ads campaign that uses {campaign} in Final URL Suffix?

Future clicks use the new name. Past clicks have the old name baked into their session data. If your warehouse joins on campaign name, the rename creates two rows for the same logical campaign. Two mitigations: use {campaignid} so the numeric ID is stable across renames, or override the suffix at the campaign level with a fixed string you control independently.

Last updated: 2026-07-14.

Terminus helps you and your team be consistent in UTM tracking

Try Terminus risk-free for 21 days. Cancel anytime with 1 click.