Key takeaways
Google Ads UTMs break for one of five reasons, and four of them are settings problems you can fix in under an hour.
Parallel tracking means UTMs stored in the tracking template do not reliably reach your landing page. The Final URL suffix is the correct home for them.
A single redirect on your ad landing page is enough to strip the query string and turn a paid click into Direct traffic in HubSpot.
HubSpot sets Original Source once on first touch and never corrects it, so every lost UTM is permanent for that contact.
Run auto-tagging and manual UTMs together. The gclid handles Google Ads measurement, the UTMs handle CRM reporting.
Your Google Ads UTMs disappear before they reach HubSpot for five reasons, and almost every case is one of them: the parameters are sitting in the tracking template instead of the Final URL suffix, a redirect on your site strips the query string before the page loads, the HubSpot tracking code never fires because the visitor declined cookies, the visitor clicked through to a second page and the parameters were left behind, or auto-tagging is passing a gclid that HubSpot logs as Auto-tagged PPC with no campaign name attached. The fix is almost always a settings change rather than a developer project. Move your UTMs into the Final URL suffix, remove redirects on your ad landing pages, confirm the HubSpot tracking code loads before the form, and check that utm_medium uses a value HubSpot recognises as paid.
This matters more than it sounds. If HubSpot files a Google Ads click as Direct traffic, that contact shows up in your pipeline with no campaign, no ad group and no keyword attached. Three months later you are in a board meeting trying to explain why paid search produced almost nothing, while the deals it actually produced are sitting in a bucket labelled Direct.
What does it mean when HubSpot shows Google Ads traffic as direct?
It means HubSpot received the pageview but found no paid signal in the URL or the referrer at the moment the visitor first landed. HubSpot assigns Original Source once, on the first tracked session, and it does not go back and correct it later. So a visitor who clicks your ad, lands on a page where the parameters were stripped, browses for a week and then fills in a form will be stamped as Direct forever, even if every later visit carries perfect UTMs.
HubSpot works through an ordered set of rules to decide the source. According to HubSpot's own documentation on traffic sources, it checks whether the source parameter contains adword, ppc or cpc, and whether a valid gclid is present. If neither is there, paid search is off the table and the session falls through to referral or direct. The campaign name in your reports comes from utm_campaign. The search term comes from the q parameter, and if that is empty HubSpot looks at utm_term instead. If both are missing, the keyword cannot be identified at all.
So UTMs not showing in HubSpot is rarely a HubSpot bug. It is almost always a question of what arrived in the browser address bar at the moment the tracking code fired.
Why do UTMs belong in the Final URL suffix and not the tracking template?
Because parallel tracking broke the tracking template as a place to store UTMs. Google rolled parallel tracking out in 2018 and made it mandatory for Search and Shopping campaigns. Under parallel tracking, the browser goes straight to your Final URL while the tracking template request runs in the background. The user never passes through the redirect, so anything you parked in the template has no reliable way of ending up in the landing page URL.
The Final URL suffix was built for exactly this job. It appends parameters directly onto the Final URL with no redirect involved, at account, campaign, ad group or ad level.
A clean modern setup looks like this:
- Tracking template: {lpurl} or left empty
- Final URL suffix: utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_content={creative}&utm_term={keyword}
Two things to watch. First, do not also bake UTMs into the Final URL of individual ads while a suffix exists at a higher level, or you will land on pages carrying utm_campaign twice and HubSpot will read whichever it sees first. Second, if you use a third-party click tracker that still relies on a visible redirect, test it properly, because redirect-based trackers were the main casualty of parallel tracking.
Why does HubSpot show Auto-tagged PPC instead of my campaign name?
Because auto-tagging is on, manual UTMs are not, and HubSpot can see that the click came from Google Ads but cannot read any campaign detail out of it. Auto-tagging appends a gclid, which is an encrypted click identifier. HubSpot can match it to paid search, but it cannot decode a campaign name or ad group from it, so the drill-down fills with placeholder values like Auto-tagged PPC and content network instead of the names you set up in Google Ads.
The answer is not to turn auto-tagging off. You want both. Auto-tagging keeps your Google Ads and GA4 conversion data intact and lets Smart Bidding learn properly. You can verify auto-tagging is working using Google's own check. Manual UTMs in the Final URL suffix then sit alongside the gclid and give HubSpot the human-readable campaign, ad group and keyword values it needs for reporting. The gclid handles platform measurement, the UTMs handle CRM attribution, and they do not conflict.
How do redirects strip UTM parameters before the page loads?
Most redirects drop the query string unless they are explicitly configured to carry it. If your ad points at /pricing and your site 301s that to /pricing/ with a trailing slash, or forces non-www to www, or redirects http to https, every one of those hops is a chance for the UTM string to vanish. The user still lands on the right page. The URL is just clean when they get there, and clean means invisible to HubSpot.
Single-page apps cause a quieter version of the same problem. A client-side router can rewrite the URL after load and remove the query string before the HubSpot script has read it. Cookie consent tools that reload the page after a selection can do the same thing.
This is the failure mode that stays hidden the longest because nothing looks broken. Clicks go up, landing page sessions go up, and only the attribution is missing. In the accounts we audit at Scalix, a redirect on the ad landing page is the single most common cause of missing UTMs, and it is usually a change someone made for good SEO reasons months earlier with no idea it touched paid tracking.
The fix is to point your Final URLs at the exact canonical URL, with the same protocol, the same www setting and the same trailing slash behaviour the server actually serves. No hop, nothing to strip.
Why are my HubSpot form hidden fields empty when the URL had UTMs?
Because the hidden fields are populated by the HubSpot tracking code from the first-party cookie, not read live from the address bar, and anything that interrupts that chain leaves them blank. The usual causes are:
- The tracking code is missing on the landing page. The form alone does not capture source data. The script has to be on the page to read the parameters and cookie the visitor before submission.
- The form is in an iframe on a different domain. Embedded HubSpot forms on Webflow, Wix, Framer or a custom app often lose the parameter context. The native embed code behaves better than a raw iframe.
- The visitor clicked through to a second page before converting. They land on /pricing with UTMs, click Book a demo, and land on /demo with a bare URL. Original Source survives in the cookie, but custom UTM properties mapped to hidden fields often do not unless you persist them yourself.
- The field names do not match. A utm_campaign value in the URL will not populate a property internally named utm_campaign_name.
- Meetings links and chat widgets. The HubSpot meetings embed does not pass UTM parameters through unless you explicitly append them.
Does cookie consent stop HubSpot from recording paid search?
Yes, and this is the part most teams underestimate. If your banner blocks the HubSpot analytics cookie until the visitor opts in, no cookie means no session, and no session means no Original Source. The contact is created later through the form and lands in Offline Sources or Direct. In markets with strict consent enforcement this can quietly remove a meaningful share of your paid attribution, and the effect is larger on sites that use a hard opt-in banner than on sites that do not.
You cannot consent your way out of this, and you should not try. What you can do is stop treating platform-reported conversions and CRM-reported conversions as the same number, and build a second, independent read on where pipeline comes from. Self-reported attribution on the form, a how did you hear about us field, and consistent use of first-party data in Google Ads all give you signal that survives a consent decline.
How do you fix Google Ads UTM tracking in HubSpot, step by step?
Work through this in order. Most accounts are clean again within an hour.
- Leave auto-tagging on. Confirm it in Google Ads under Account settings.
- Move all UTMs to the Final URL suffix at account or campaign level. Leave the tracking template as {lpurl} or empty.
- Use a medium HubSpot recognises. utm_medium=cpc or ppc. Avoid paid, paidsearch or google-ads as a medium value, and keep utm_source=google rather than adwords.
- Use ValueTrack tokens, not hardcoded text. {campaignid}, {adgroupid}, {keyword}, {creative} and {matchtype} fill themselves. Hardcoded names go stale the day someone renames a campaign.
- Point Final URLs at the canonical URL. Correct protocol, correct www setting, correct trailing slash. Zero redirects.
- Confirm the HubSpot tracking code is on every ad landing page and loads before the form renders.
- Create UTM contact properties in HubSpot and map them to hidden fields on every form that sits behind paid traffic.
- Connect Google Ads inside HubSpot under Settings, Marketing, Ads, so click-level data has a second path into the CRM.
- Agree a naming convention and write it down. HubSpot treats values as case sensitive, so Brand and brand become two separate campaigns in your reports.
How do you test that UTMs are actually reaching HubSpot?
Click your own ad from a device that has never visited the site, in an incognito window, and watch what happens to the address bar.
Three checks, in this order. First, does the landing page URL still contain your UTM parameters and a gclid after the page settles? If they are gone, you have a redirect or a router problem. Second, open the browser console and confirm the hubspotutk cookie exists. If it does not, the tracking code is missing or consent blocked it. Third, submit a test form and open the contact record. Original Source should read Paid Search, and the drill-downs should show your campaign name rather than a placeholder.
Repeat this on mobile and on a second browser. Safari and Firefox handle cookies more aggressively than Chrome, and a setup that passes on desktop Chrome can still fail for a meaningful share of your traffic.
Run this test once a quarter and after every website change. Site migrations, consent platform swaps and new landing page builders are the three events that most often break tracking that had been working fine for a year.
Why this is a pipeline problem, not a reporting problem
B2B SaaS sales cycles run 45 to 90 days. When attribution breaks in month one, you do not find out in month one. You find out in month three, when the pipeline report shows paid search generating almost nothing and someone proposes cutting the budget. The campaigns being cut are often the ones producing revenue under a Direct label.
Clean UTM plumbing is the cheapest insurance you can buy against that outcome, and it is a one-afternoon fix in most accounts. If you want the deeper version of this, our guide to Google Ads attribution for B2B SaaS covers how to measure paid properly across a long sales cycle. If you would rather have someone else own it, Scalix AI runs Google Ads management for B2B SaaS companies and tracking integrity is part of the first two weeks of every engagement, before a single budget decision gets made.
If you want to know exactly what your current tracking setup is costing you, book a free audit. We will show you where the gaps are and what it would take to close them.





