UTM mistakes that send B2B deals to Direct

The UTM mistakes that cost B2B teams the most are the quiet ones: inconsistent naming, UTMs on internal links, redirects that strip the query string, untagged email and partner links, and CRM fields that overwrite the first campaign with the latest one. Each one moves a real Deal out of the channel that started it and into Direct or "unknown."
We see this on our own site. Nearly half of the contacts who converted on source.app in the last month arrived with no first-touch channel on record. Some of that is dark social and word of mouth, which no tag can catch. The rest is tracking you can fix, and one audit finds most of it.

Why do UTM mistakes cost more in B2B?
In ecommerce, a broken tag costs you one session. A B2B buyer might click a LinkedIn ad in March, read three posts in April, and book a demo in May. If the first click loses its UTMs, every later report starts the story in the wrong place, and the Deal that closes in July shows up as Direct.
Long cycles also mean the mistakes pile up. A naming change made by one teammate in Q1 still splits your Q3 pipeline report, because those Contacts carry the old values forever. Our post on finding the deals hiding in Direct traffic covers the share of Direct you cannot tag. This post covers the share you can.
Why does one channel show up as four sources?
UTM values are case-sensitive in Google Analytics 4 and in most CRMs. "LinkedIn," "linkedin," "linkedin.com," and "li" become four separate rows. Each row looks too small to matter, and the channel that drove the pipeline reads as a rounding error.
Write one naming sheet and make it the only source of values. Keep everything lowercase, pick one value per platform for utm_source, and limit utm_medium to a short list such as paid_social, cpc, email, and partner. A shared builder like the Google campaign URL builder helps, as long as people copy values from the sheet instead of typing them.

Should you put UTMs on internal links?
No. A UTM on a homepage banner, a nav link, or a link inside your app tells your analytics that a new campaign started. In GA4 and in any tool that keeps the latest UTM, the visitor who arrived from a paid search ad now looks like they came from "homepage_banner."
Use event tracking or a plain query parameter your team defines (not utm_) to measure internal clicks. Search your site for "utm_" in link URLs every quarter, since these tend to come back with each redesign.
Where do UTMs disappear before the page loads?
Some redirects pass the query string along and some drop it. Link shorteners, vanity URLs from print or events, old campaign pages that redirect to new ones, and locale redirects are the usual suspects. If a click from a Bitly link or a /demo vanity URL lands on a page with no UTMs in the address bar, every visit from that link is untagged.
The test is simple. Click every live campaign link yourself and check the final URL. If you run Google Ads with auto-tagging, confirm the gclid parameter survives the same path. Our guide to checking Google Ads conversions against real pipeline covers what to compare once the click data arrives intact.
Which links usually go out untagged?
Paid campaigns tend to get tagged because the ad platform asks for a URL. The gaps are everywhere else: newsletter links, organic social posts, partner and affiliate links, podcast show notes, sales email signatures, and links in slide decks. Each of those clicks arrives as Referral or Direct.
Give every team that shares links a short version of the naming sheet. Partners and affiliates get their own utm_source value, so you can see which ones send buyers who become Deals instead of buyers who only visit.
Why does your CRM only show the latest campaign?
Many teams pass UTMs into the CRM through hidden form fields. Those fields usually hold one value each, and every new form fill writes over the old one. A buyer who first arrived from a LinkedIn ad and later downloaded a guide from a newsletter now shows email as their only source.
Store the first-touch UTMs in fields that never change after they are set, and the latest-touch UTMs in a separate set. In HubSpot or any CRM, that means two groups of properties and a rule that the first group is written once. Our post on what your CRM attribution report leaves out covers the other gaps between form data and Deal data.
Are clean UTMs enough to attribute a Deal?
Clean UTMs label each tagged visit correctly. They do not connect visits across days, link the visitor to a Contact, or decide how much credit each touch gets. That still needs visitor-level tracking, a link to Deals in the CRM, and an attribution model. We made that case in more detail in UTM tags are a label, not an attribution model.
For touches that never carry a tag, such as a podcast mention or a colleague's recommendation, ask on the form. Our post on whether to trust "How did you hear about us?" shows how to read those answers next to the tracked path.
How do you audit your UTM setup?
Block two hours and work through this list with the people who build campaigns:
- Export every utm_source and utm_medium value from the last 12 months and map variants to one lowercase value.
- Search the site and app for internal links that contain utm_.
- Click every active ad, shortener, and vanity URL and check the landing URL.
- List the links that go out untagged (email, social, partners, signatures) and assign each an owner.
- Check that first-touch UTM fields in the CRM are written once and never overwritten.
- Pull last quarter's Deals and see how many have a first-touch source at all.

The last check is the one that matters for reporting. If a large share of Deals has no first-touch source, fix tracking before you debate which channel deserves more budget.
How Source keeps UTMs on the Deal path
Source installs with one pixel or Google Tag Manager, with no data warehouse to build. It records the UTMs and referrer on every visit, keeps the first touch even after later visits, and ties the full path to Contacts and Deals in your CRM. You can read that path under multi-touch models, alongside view-through, offline, and LLM attribution for ChatGPT, Claude, Perplexity, and Gemini, plus real CAC and channel quality.
You can chat with your data, get AI recommendations, and receive daily Slack reports that show where Deals came from. Source is SOC 2 Type II and ISO 27001 certified, and customer data is not used to train external models.
Start free at dash.source.app/signup and see how many of your Deals still trace back to Direct.