Audit your UTM tags and tracking setup

Find every way your team has tagged its campaign links, see where those tags and your tracking send visits to the wrong channel or lose them entirely, and agree on one naming convention that Kite applies to every new link and checks on a schedule.

Key Takeaways

  1. A UTM and tracking audit answers two questions: are your campaign links tagged the same way every time, and does your website actually record the visits and conversions those links bring in?
  2. Most messy campaign reports come from a few causes. The same source is spelled several ways, a medium your analytics tool doesn't recognize sends visits to Unassigned, and links without tags show up as direct traffic.
  3. Kite pulls the tag values your analytics tools actually recorded, groups the variants that mean the same thing, checks which channel each one lands in, and opens your tagged links and key pages to find tracking that breaks before a visit is counted.
  4. Kite writes one naming convention for your team, saves it to your knowledge base, and uses it on every campaign link it creates, so new links stay clean after the audit is done.
  5. Kite fixes what it can change for you, gives exact steps for the rest, and can repeat the audit every month so a broken tag shows up within weeks instead of at the end of the quarter.
On this page

Why your campaign reports stop adding up

UTM tags are the short labels added to the end of a link, such as ?utm_source=linkedin&utm_medium=paid_social&utm_campaign=spring-launch. When someone clicks the link, your analytics tool reads those labels and credits the visit to that source, medium, and campaign. That only works when everyone tags links the same way.

On most small teams, they don't. One person writes LinkedIn, another writes linkedin, and a contractor writes li. Your analytics tool treats those as three separate sources, so the real total for LinkedIn is split across three rows and nobody adds them back together. Mediums drift the same way. A newsletter tagged utm_medium=newsletter looks reasonable, but Google Analytics sorts visits into channels by matching the medium against a fixed list, and "newsletter" isn't on it. Those visits land in Unassigned instead of Email, and your email numbers look smaller than they are.

Missing tags cause a different problem. Links in email apps, PDFs, Slack messages, and mobile apps usually arrive without any record of where the visitor came from. Without UTM tags, your analytics tool has nothing to go on, so it counts the visit as direct. That is the most common reason a report shows a large share of direct or unattributed traffic, especially on deep pages that nobody types in by hand.

Then there is tracking that breaks quietly. A redirect can strip the tags off a link before the page loads. A page can load your analytics tag twice, or not at all. A payment page on another domain can take credit for every purchase. None of these raise an error. The reports just show the wrong numbers with full confidence.

An audit finds all of this, ranks it by how much it distorts your numbers, and leaves you with a convention that keeps it from happening again. The work is mostly careful reading and cross-checking across several tools, which is exactly the kind of work an AI agent does well. Kite is an AI marketer. It researches your business, builds a growth strategy, and ships the work that brings you new customers. Here is how it audits your tagging and tracking.

How Kite audits your UTM tags and tracking setup

Kite starts with what it already knows about your business: the channels you market on, the campaigns you've run, and the pages where visitors become leads or customers. It reads the tag values your analytics tools have actually recorded over the last few months, groups the ones that mean the same thing, and checks which channel each one ends up in. Then it opens your tagged links and your key pages to see whether the tracking itself works.

From those findings, Kite writes a naming convention that fits the channels you use and the way your analytics tools sort traffic. It fixes the problems it can change directly, gives you exact steps for the rest, and then uses the convention on every campaign link it creates. A month later, it can run the same audit again and show you what changed.

  1. Find every way your campaigns are tagged today
  2. See where each tagged visit actually lands
  3. Find where tracking breaks before a visit is counted
  4. What naming convention should you use for UTM campaign links?
  5. Clean up past reports and fix what's broken
  6. Keep new links on the convention and check again

Find every way your campaigns are tagged today

Kite begins by collecting the tag values your tools actually received, because the real state of your tagging lives in your reports, not in anyone's memory. In Google Analytics, it runs reports of sessions and conversions by source, medium, and campaign. In PostHog, it runs PostHog's own UTM audit, which finds campaigns with mistyped or unmatched sources. In Mixpanel, it reads the values stored for each UTM property. On a site Kite hosts, it reads its own built-in analytics.

Then Kite groups the values that mean the same thing. facebook, Facebook, fb, and facebook.com become one source. cpc, CPC, and paid-search become one medium. Campaign names get the same treatment, so spring_launch, Spring Launch, and springlaunch2026 show up as one campaign that was tagged three ways. For each group, Kite records how many visits and conversions sit under each spelling, so you can see how much each inconsistency hides.

If your team already keeps a spreadsheet of campaign links or a written convention, share it with Kite. It compares what the convention says with what people actually did, which usually shows exactly where the drift started.

See where each tagged visit actually lands

Kite checks which channel each group of tags ends up in, because a tag can be spelled consistently and still land in the wrong place. Google Analytics assigns every visit to a channel group, such as Paid Social, Email, or Organic Search, by matching the source and medium against its rules. Kite reads the channel groups defined on your property and the share of visits and conversions that fall into Unassigned. When a medium like newsletter, social-paid, or banner matches no rule, Kite names it and shows which campaigns used it.

Direct traffic gets the same scrutiny. Kite looks at which pages receive the most direct visits. A homepage with plenty of direct traffic is normal, because people type your address. A pricing page or a campaign landing page with mostly direct traffic usually means the links pointing to it went out without tags, often in emails, PDFs, or messages shared by hand.

Kite's own analytics works the same way on sites it hosts. It sorts each visit into paid search, paid social, email, AI assistants, organic search, organic social, referral, or direct, based on the link's tags and the site the visitor came from. It recognizes mediums such as cpc, paid_social, and email, so an email tagged newsletter with no referring site gets counted as direct there too.

Find where tracking breaks before a visit is counted

Kite tests the tracking itself, because a perfectly tagged link is worthless if the visit never gets recorded with its tags intact. It opens a sample of your tagged links in a browser and checks that the tags are still on the address when the page finishes loading. A redirect from an old campaign address, a move from http to https, or a link shortener can drop everything after the question mark, which turns a tagged click into a direct visit.

Next, Kite renders your homepage, your campaign landing pages, and the pages along your signup or checkout path, and it reads which analytics tags each one loads. A page that loads no tag records nothing. A page that loads Google's tag twice, once directly and once through Google Tag Manager, doubles its page views. A page that reports to a different Google Analytics property sends its data somewhere your team isn't looking.

Kite also looks for the places where a visitor's original source gets replaced. When your own domain, your app's domain, or a payment page such as checkout.stripe.com shows up as a source of conversions, the credit for those conversions was lost at that step. The same thing happens when your own website uses UTM tags on links between its own pages, because each internal click overwrites the campaign that brought the visitor in. Kite lists every internal link it finds carrying tags.

When your events flow through Segment, Kite checks whether they arrive where they should. It reads each source's daily event counts and each destination's delivery numbers, so a drop that starts on the day of a release points to the release rather than to your campaigns.

Clean up past reports and fix what's broken

Kite fixes the problems it can change for you and gives exact steps for the ones that live in another tool's settings. On a site Kite hosts, or one it works on through your GitHub repository, it can add a missing analytics tag, remove a duplicate one, fix a redirect that strips tags, and take UTM tags off your internal links. It shows you the changes first, and they go live when you approve them.

Most analytics tools don't let anyone rewrite the tags on visits they've already recorded, so Kite makes the existing data readable instead. In PostHog, it suggests the mappings that put mistyped sources back under the right channel. In Mixpanel, it can build a lookup table or a formula-based property that groups the spelling variants under one name, so a breakdown by source reads the way your team talks about it. In Google Analytics, it tells you which domains to add to the unwanted referrals list and how to set up cross-domain measurement when your site and app live on different domains.

Kite ranks every finding by how much it distorts the numbers you make decisions with. A payment page taking credit for every purchase comes first, because it hides which campaigns produce revenue. A source spelled two ways on a small campaign comes later.

What you get

A map of your current tagging

Every source, medium, and campaign value your tools recorded, grouped by what it means, with the visits and conversions under each spelling.

A channel check

Which tags land in Unassigned or the wrong channel, and which pages receive more direct traffic than they should, with the likely untagged links behind them.

A list of broken tracking

Links that lose their tags, pages with missing or duplicate analytics tags, domains that steal credit for conversions, and internal links carrying UTM tags.

A written naming convention

The approved source, medium, and campaign values for your channels and the rules for using them, saved to your knowledge base.

Fixes and steps

The changes Kite made to your site or tools, and exact instructions for the settings only you can change.

A baseline for next time

The audit saved so the next run can show what was fixed and what drifted.

How to get started

Start by telling Kite what's bothering you about your reports, in the Kite web app or in Slack. You might say, "Our campaign numbers don't add up and half our traffic shows as direct. Can you audit our UTM tags and tracking?" or "Write us a UTM naming convention and check whether our tracking is working."

Kite proposes the scope from what it already knows about your business: the channels to cover, the analytics tool to treat as the main record, and the pages where conversions happen. Confirm or change it, and Kite starts reading.

Connect the analytics tools your team uses, such as Google Analytics, PostHog, or Mixpanel, so Kite can read the tag values they recorded. Connect Segment if your events pass through it. If your site is one Kite built and hosts, its built-in analytics are already there and no connection is needed. If your team keeps a spreadsheet of campaign links, share that too.

Reading your data and testing your links is routine, so Kite does that on its own and reports back in the conversation. It asks for your approval before it publishes changes to your website. When you're happy with the convention, ask Kite to run the audit every month and tell you when something drifts.

Integrations used to audit your UTM tags and tracking setup

Kite reads your tag values and tracking from the analytics tools your team already uses. On a site Kite hosts, its built-in analytics cover the same ground without any connection.

Common questions

Which three UTM parameters should every campaign link have?

Every campaign link should carry a source, a medium, and a campaign name: utm_source, utm_medium, and utm_campaign. Source says where the click came from, medium says what kind of traffic it is, and campaign says which effort it belongs to. Add utm_content when you need to tell versions apart inside one campaign, and utm_term for paid search keywords.

Should I put UTM tags on links between my own pages?

No. Tags belong only on links that bring people to your site from somewhere else. When someone clicks a tagged link between two of your own pages, most analytics tools replace the campaign that originally brought them in, so the real source loses credit. Kite lists every internal link carrying tags and removes them on sites it can edit.

Can I fix the UTM tags on traffic my analytics already recorded?

Usually not directly. Most analytics tools store tags as they arrived and don't let you rewrite past visits. You can still make old reports readable. PostHog lets you map stray sources to the right channel, and Mixpanel lets you group variants with a lookup table or a calculated property. Kite sets those up where your tools allow it, then applies the convention to every new link so the problem stops growing.

How often should I audit my UTM tags and tracking?

Audit after any change that touches tracking, such as a site redesign, a new form tool, a new domain, or a new person running campaigns, and check monthly in between. Tagging drifts a little with every campaign someone builds by hand, and tracking usually breaks during site changes. A monthly check keeps the damage to a few weeks of data.

How much does a UTM and tracking audit with Kite cost?

The audit has no separate price. It uses your plan's usage like any other work you give Kite. Kite's free plan includes usage, and the Growth plan costs $100 a month with $100 in AI credits included. Pricing is per workspace, so adding teammates doesn't change the price. Check current prices at kite.ai/pricing.

Questions this page answers

  • How do I audit my UTM tags and tracking setup with AI?
  • Can an AI marketing agent audit my UTM tags and tracking setup?
  • How do I keep UTM parameters consistent across my team?
  • Why does my analytics show so much direct or unattributed traffic?
  • How do I check whether my website tracking is broken?
  • What naming convention should I use for UTM campaign links?

About the author

Devon Wells leads product marketing at Kite, the AI marketer. He spent a decade marketing industrial AI, from self-driving trucks to computer vision, but now Kite handles most of the work itself.

Tell me your goal and I’ll get to work.

Get started for free