Quick answer: Hardcoding UTM parameters in your final URL blocks GCLID from appending, even with auto-tagging on. Move UTMs into a tracking template, keep the final URL clean, and pass {gclid} through the Final URL suffix. Both parameters will coexist and your offline conversion tracking will work.
The setup that breaks it
Auto-tagging is on at the account level. Your destination URLs have UTMs baked in: utm_source=google&utm_medium=cpc&utm_campaign=yourcampaign. Clicks are coming in and form submissions are landing in the CRM.
But the GCLID field is empty. Or it's missing on half the submissions. Or every offline conversion import comes back with zero matches.
The natural instinct is to blame the CRM integration, the form plugin, or the hidden field. It's almost always earlier than that. The problem is the URL itself.
Why auto-tagging and UTMs conflict
Auto-tagging appends ?gclid=XXXXX to your landing page URL at click time, as an additional query parameter. If your final URL already has a query string (which it does when you hardcode UTMs), that append can fail silently depending on redirects, URL encoding, and how your landing page platform handles incoming parameters.
There's a widespread belief that GCLIDs and UTMs just don't mix. That's not accurate. The conflict is structural: hardcoding UTMs in the destination URL creates conditions where auto-tagging breaks down. Build the URL correctly and both parameters pass through without issue.
When the GCLID drops before hitting the landing page, your form captures nothing. The CRM entry has no click ID. Your import file has nothing to match on. Smart bidding keeps spending while learning nothing about which clicks actually close.
The fix: tracking template and Final URL suffix
Take UTMs out of the final URL entirely. All tracking parameters go in the tracking template instead.
Step 1: set up a tracking template
Go to Account Settings > Tracking in Google Ads and add a tracking template:
{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}{lpurl} inserts your clean final URL at click time; your UTM parameters follow it. Once this is in place, strip the UTM query string from your destination URLs — final URLs should be plain links with nothing appended.
Set it at the account level for broad coverage, or override per campaign or ad group when you need different UTM values.
Step 2: add {gclid} to your Final URL suffix
Go to Account Settings, find Final URL suffix, and add:
gclid={gclid}This writes the GCLID into every landing page URL on every click. You're no longer relying on auto-tagging's default append behavior (the one that fails when a query string already exists). The click ID goes exactly where your hidden field can read it.
Step 3: test it before moving on
Click your own ad or use the Ad Preview tool. Check the URL when you land on the page. You should see UTM parameters and a gclid= value in the same string. Submit a test form and confirm the GCLID captured in your CRM or form backend.
If you don't have a hidden field set up to capture GCLID on page load yet, that's the next step. The parameter needs somewhere to go — a hidden field named gclid that reads from the URL when the page initializes.
What this fixes downstream
Consistent GCLID capture means your offline conversion imports have a click ID to match on every record. The 90-day GCLID validity window means you can upload closed deal data weeks or months after the original click and still get attribution. Smart bidding starts receiving signal about which traffic turns into revenue, not just which traffic fills out a form.
Without GCLIDs matching back on import, none of that signal reaches Google. The algorithm doesn't know a deal closed. It keeps optimizing for form volume with no visibility into what happened after the submit. Any lead quality work you want to do downstream depends on getting this part right first.
For a full walkthrough of offline conversion tracking setup, from GCLID capture through CRM storage to upload verification, the OCT Setup Checklist covers every step and is free with a Freak.Marketing account.
FAQs
Does this work with third-party builders like Unbounce or Leadpages?
Generally yes, but verify the builder doesn't redirect to a canonical URL that strips query parameters on load. Most major builders pass them through correctly. Test with a live click before assuming. And confirm your hidden field reads from the URL on page load, not just on form submit.
Can I use the tracking template at the campaign level instead of account level?
Yes. Account-level applies everywhere by default, but campaign- and ad-group-level templates override it. Useful when different campaigns need distinct UTM campaign values. Just make sure every override includes {gclid} in the suffix. A campaign-level template that omits it will break GCLID capture for those campaigns specifically.
Capture rate is still low after making these changes. What else should I check?
Look for redirect chains between your destination URL and the page that actually loads. Each hop is a chance for the GCLID to drop. Also check what share of your traffic comes from Safari or iOS. Apple's ATT framework means some iOS clicks won't carry a GCLID regardless of how your tracking is configured. For that segment, enhanced conversions using first-party data is the right fallback.
Do I still need auto-tagging on if I'm using the {gclid} ValueTrack parameter?
Yes. {gclid} reads the click ID that auto-tagging generates. It doesn't create one on its own. Auto-tagging has to be active for a GCLID to exist in the first place. The ValueTrack parameter just gives you explicit control over where in the URL it lands, rather than relying on the default append behavior that breaks when a query string is already present.