Google Ads UTM Tracking: Auto-Tag and Manual, Together

PC

Puru Choudhary

Last updated · published

Auto-tag or manual? Wrong question. Run both.

Leave auto-tagging on. Put your UTMs in the Final URL Suffix. Govern the values with a controlled vocabulary.

That setup gives Google its click-level signal, and it gives everything outside Google (your CRM, your warehouse, your other analytics tools) a campaign name it can read.

TL;DR

  • Leave auto-tagging on. It appends gclid (or gbraid/wbraid on iOS) and powers Google Ads to GA4 attribution, Smart Bidding, and conversion import.
  • Add manual UTMs for everything auto-tagging can’t reach: non-Google destinations, CRM passthrough, third-party analytics, and BI dashboards that read URLs.
  • When a click carries both, GA4 fills source, medium and campaign from the auto-tagged values. Your UTMs land in GA4’s Manual dimensions and in every non-Google tool.
  • Put manual UTMs in the Final URL Suffix. The Final URL and the Tracking template both break at scale.
  • Performance Max auto-tags every placement but resolves fewer ValueTrack parameters. Set the account-level suffix as your floor and accept the gaps.
  • Most “auto vs manual” bugs are configuration bugs: redirect loss, double-tagging, casing drift, or a stale Tracking template.

Auto-Tagging Is a Closed Loop

Turn it on and every paid click gets a gclid appended to the landing URL. Three pieces matter.

The gclid is an opaque click identifier that Google resolves on its side. GA4 reads it at session start and, through the Google Ads to GA4 product link, joins it back to campaign, ad group, keyword and cost. You get all of that inside GA4 without writing a single utm_ value.

gbraid and wbraid cover iOS. Since App Tracking Transparency restricted IDFA access, Google uses these two for iOS journeys where IDFA isn’t available: gbraid for app conversions, wbraid for web conversions. Both are aggregated, privacy-preserving identifiers rather than user-level ones, so modelled conversions fill the gaps for Smart Bidding.

Parallel tracking sends the user straight to your landing page while the click measurement fires to Google in the background. It’s on by default and required on every campaign type. If a third-party click tracker needed a 302 redirect before the user reached your domain, parallel tracking already broke it.

Now the limit. Auto-tagging writes no UTMs. No utm_source=google, no utm_medium=cpc, no campaign name. Only Google can read a gclid.

Ship that URL to a HubSpot form, a CRM, a Mixpanel project, or a warehouse, and all it sees is gclid=abc123. It has no idea which campaign produced the click, unless you decode it through the Google Ads API or pass manual UTMs too.

Inside the loop, auto-tagging is excellent.

Outside it, the gclid is noise.

Manual UTMs Are for Everyone Else

The five standard parameters (utm_source, utm_medium, utm_campaign, utm_term, utm_content) are plain strings. Virtually every analytics platform, CRM, ESP and BI tool reads them. They survive any redirect that preserves the query string, and they end up wherever the landing URL ends up: form submissions, cookies, lead records, attribution platforms, warehouse session tables.

Know one rule before you design around them. When a click carries both a gclid and manual UTMs, GA4 fills source, medium and campaign from the auto-tagged values. Your manual values go to GA4’s Manual dimensions (Manual source, Manual medium, and so on). So don’t use utm_medium to relabel Google traffic inside GA4. It won’t show up where you expect.

Everywhere outside GA4, your UTMs are the only campaign data there is. Three jobs depend on them:

  • Cross-platform reporting. Your executive dashboard pulls Google Ads, Meta, LinkedIn, TikTok, programmatic and email into one view. The join key is a canonical campaign name, in utm_campaign or a mapping table keyed off it. Meta has never heard of a gclid.
  • Your CRM. A HubSpot or Marketo form captures URL parameters into hidden fields. With only a gclid, the lead record reads Source: gclid=abc123... and sales can’t use it. With UTMs it reads google / cpc / brand-na-q3-2026. Same for Salesforce Web-to-Lead, Amplitude, Mixpanel, and any tool that reads URL parameters into user properties.
  • Your warehouse. Attribution models, marketing mix models and CLV calculations need one channel taxonomy across every source. An ETL that reads UTMs for every channel except Google, which needs its own enrichment step, is fragile by design.

“Auto-tag or manual” made sense when Google Ads plus Google Analytics was the whole stack. If your clicks feed even one destination beyond GA4, run both.

Put UTMs in the Final URL Suffix. Nowhere Else.

Google Ads gives you four places to put manual UTMs. One of them is right.

FieldBuilt forUse it for UTMs?
Final URLThe destination page, per adNo
Tracking templateWrapping the click in a third-party trackerNo
Custom parametersKey-value pairs you reference elsewhereOnly if you have to
Final URL SuffixParameters appended after the Final URLYes

The Final URL is per ad. Hard-code utm_source=google&utm_medium=cpc&utm_campaign=spring-2026 there and you maintain one copy per ad. Say you run 200 ads across 30 ad groups: that’s 200 copies of the same convention, and your first campaign rename is 200 edits, each one a fresh chance for a typo.

The Tracking template belongs to click trackers. Its {lpurl} token resolves to your Final URL so a redirector can wrap it. Under parallel tracking the user goes straight to the Final URL while the template loads in the background, so UTMs parked in the template don’t reliably reach your page.

Custom parameters add a layer you don’t need. You define {_campaign} at the campaign level, then reference utm_campaign={_campaign} somewhere else. Tidy on paper. Miserable for whoever has to debug the real string by chasing two levels of config.

The Final URL Suffix was built for exactly this. Set it once at the account level as your floor. Override at the campaign or ad group level only for deliberate exceptions. Google appends it after the Final URL’s own query string, so the landing page sees every parameter.

Start with this at the account level:

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

The curly-brace values are ValueTrack parameters, resolved at click time. {campaignid} becomes the numeric campaign ID, {keyword} the matched Search keyword, {creative} the ad’s creative ID. ValueTrack has no campaign-name token, and that’s fine: IDs survive renames, and names break every join that depends on them.

Want a readable campaign name? Override the 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 name belongs to you. It survives renames inside Google Ads, and if it comes from a controlled vocabulary, it matches everywhere else you run campaigns. That’s the job Terminus, the marketing taxonomy governance platform does: the same brand-na-q3-2026 flows through paid search, paid social, email and partnerships, and joins cleanly in the warehouse.

Four rules before you save:

  • Lowercase everything. Google and google are separate rows in every analytics tool.
  • Hyphens, never spaces. brand-na-q3-2026 holds up; the URL-encoded version with spaces confuses dashboards.
  • Skip anything that needs encoding: parentheses, slashes, plus signs.
  • Write the convention down. The Final URL Suffix is invisible to most of your team until someone shows them where it lives in account settings.

When Layering Actually Pays

Every case below is a destination that cannot read a gclid. If one describes your stack, you need both.

You blend paid channels in one dashboard. Looker Studio joining Google Ads with Meta, LinkedIn and TikTok exports needs a single campaign field. No non-Google export contains a gclid, so blending on it is impossible.

You import leads to a CRM. Sales sees “Lead from google / cpc / spring-campaign-2026” the moment the record syncs, or it sees an opaque string.

You model in a warehouse. Attribution models and MMMs read one channel taxonomy across all sources. Forcing one channel through a special enrichment step is where pipelines break.

Your product analytics isn’t GA4. Mixpanel, Amplitude, Heap, PostHog and Adobe all read UTMs into their own session models. None decode gclid.

You run email and organic on the same convention. Treating paid search as the one channel without manual UTMs leaves a permanent hole in cross-channel reporting.

You need attribution to survive redirects. Shorteners, affiliate redirectors and consent redirects either preserve query parameters or drop them. Manual UTMs are debuggable: curl the chain and watch them disappear. With auto-tagging alone the same failure is invisible, because Google assembles the URL at click time.

If none of these apply, auto-tagging alone is genuinely enough. Add a second destination and it stops being enough that day.

Performance Max Resolves Fewer Tokens

Performance Max auto-tags every placement, so Search, Display, YouTube, Gmail, Discover and Maps clicks all carry a gclid and feed the same GA4 loop.

What changes is how much manual detail you can encode. Performance Max abstracts placements and audience signals away from you, so a UTM convention that leans on placement or creative detail comes out coarser than it does on Search.

Here’s what works:

  • Set the account-level Final URL Suffix so every campaign emits utm_source=google&utm_medium=cpc as a floor.
  • Override at the campaign level with your canonical campaign name.
  • Use {campaignid} and {assetgroupid}, which both resolve for Performance Max. {keyword} returns a blank value, because Performance Max doesn’t target keywords.
  • Read placement detail from Performance Max’s own asset group and channel reports. Manual UTMs cannot reconstruct it.

One warning on medium values. Keep cpc. A “clever” utm_medium=pmax matches no GA4 channel rule and lands your Performance Max traffic in Unassigned, and utm_medium=video for YouTube matches Organic Video, which files paid spend as organic. If you need Performance Max separated in reporting, separate it in utm_campaign, or split campaigns by audience signal and give each its own campaign name.

Cross-Domain and iOS, the Two That Bite

Cross-domain. If a click flows from your-domain.com to a checkout on a different registrable domain, GA4’s cross-domain configuration has to list both hostnames or session attribution resets at the boundary. Manual UTMs survive any hop that preserves the query string, which is why capturing them into a session-start cookie on the first hit saves you when a login flow rewrites the URL later. Subdomains of one site share the _ga cookie already and need no cross-domain setup.

iOS link tracking protection. Apple strips certain tracking parameters from links opened in Mail, Messages and Safari Private Browsing, by default. Community testing reports gclid and fbclid among the stripped parameters, and reports utm_* surviving in every context. Apple publishes no official list, the list has changed quietly more than once, and whether current Safari extends stripping to regular browsing is disputed between testers. Users can also widen the protection themselves in Safari’s settings.

What that means in practice: a Google Ads click from standard Safari browsing still arrives with gclid and your UTMs intact. When you see iOS-specific attribution loss, check cross-domain configuration and in-app browsers (Gmail and YouTube app clicks open in embedded browsers with their own cookie jars) before blaming Apple. The recovery path for the in-app case is Enhanced Conversions or the Google Ads API, not a UTM tweak.

Seven Failures and Their Signals

Each of these shows up as a specific symptom, which is what makes them findable.

Double-tagging. The Final URL has utm_source=google baked in and the suffix adds it again, so the landing URL carries the parameter twice. Destinations disagree about which value wins. Catch it in Ad Preview and Diagnosis.

Casing drift. Half the account says Google and half says google. GA4’s channel rules aren’t case sensitive, so the channel report looks fine while the Source / Medium report shows the same channel twice.

A stale Tracking template. A template pointed at a click server that no longer exists hard-fails or 404s. Click the live ad in a private window and watch the redirect chain.

Unresolved ValueTrack tokens. The landing URL shows a literal {token} instead of a value. Usually the token doesn’t exist for that campaign type, or it was set at a level that doesn’t support it.

Parameters stripped at a redirect. The landing URL has UTMs and the GA4 hit doesn’t. Curl the click URL with -L -v and inspect each hop. Country selectors, login redirects and consent redirects are the usual culprits.

Auto-tagging switched off. Someone disabled it years ago believing manual UTMs were cleaner. Smart Bidding signal weakens, conversion import gets harder, and GA4 reports those clicks as google / organic rather than paid, because the click still carries a google.com referrer. Turn it back on in account settings.

A suffix set at the wrong level. Account level should be your floor, with deliberate exceptions below it. Mixed levels across campaigns make inheritance impossible to reason about.

Ad Preview and Diagnosis renders the live destination URL with ValueTrack tokens resolved and the gclid attached. When you suspect any of the above, that’s where you confirm it.

FAQ

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

If nothing else ever reads the URL, auto-tagging alone is sufficient. Add a CRM, a warehouse, a blended dashboard or a second analytics tool and manual UTMs become necessary that day.

Should I disable auto-tagging if I use manual UTMs?

No. The gclid powers Smart Bidding signal quality, conversion import, Enhanced Conversions and the closed-loop attribution behind Google’s bid strategies. Turning it off weakens the Google side and gives manual UTMs nothing they didn’t already have.

Which values does GA4 use when a click has both?

The auto-tagged ones. Source, medium and campaign come from gclid, and your manual values populate GA4’s Manual dimensions. Outside GA4, your UTMs are all anyone gets.

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

The Tracking template is a click-time URL pattern for third-party click trackers, normally wrapping the destination in a redirector. The Final URL Suffix appends parameters without redirection. For static UTMs, use the suffix.

Why does GA4 show some Google Ads clicks as direct?

Usually a redirect between the click and the landing page is stripping everything, including the gclid. A broken Google Ads to GA4 product link is the other common cause. Auto-tagging being switched off produces google / organic rather than direct, because the referrer still arrives.

How do gbraid and wbraid differ from gclid?

gclid is the standard click ID for desktop and consented mobile traffic. gbraid covers iOS app conversions where IDFA is unavailable, and wbraid covers iOS web conversions in the same conditions. Google decodes all three.

Does iOS strip gclid?

Community testing reports gclid among the parameters stripped in Mail, Messages and Safari Private Browsing, while utm_* parameters survive. Apple publishes no official list, and whether current Safari extends this to regular browsing is disputed. Standard browsing still delivers gclid today, so check cross-domain settings and in-app browsers before blaming Apple for missing attribution.

Yes for source, medium and campaign. No for the granular ones: {keyword} returns blank in Performance Max, and placement detail lives only in Google’s asset group and channel reports.

How do I audit Google Ads URLs at scale?

Bulk-export Final URLs, Final URL Suffixes and Tracking templates with Google Ads Editor, then check every URL against your controlled vocabulary: casing, hyphenation, no unexpected keys, no duplicated parameters, no unresolved tokens. Weekly catches drift before it reaches a monthly report.

What is the right utm_medium for Google Ads?

cpc. It is the historical convention and GA4’s Paid Search rule matches it, along with ppc and paidsearch. Use display for Display. For YouTube, keep cpc rather than video, which GA4 files under Organic Video.

What happens if I rename a campaign that uses {campaignid}?

Nothing breaks. The numeric ID is stable across renames, which is exactly why the account-level suffix uses it. If you hard-coded a campaign name at the campaign level instead, past clicks keep the old name in their session data and your warehouse sees two names for one campaign.

Terminus helps you and your team be consistent in UTM tracking

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