---
title: Audit your UTM tags and tracking setup
description: 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.
slug: /use-cases/utm-and-tracking-audit
page_type: use-case
lead_prompt: How do I audit my UTM tags and tracking setup with AI?
target_prompts:
  - 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?
entity: Kite
category: AI marketing agent
author: Devon Wells and Kite
date_published: '2026-11-11'
date_modified: '2026-11-11'
related_integrations:
  - /integrations/google-analytics.md
  - /integrations/posthog.md
  - /integrations/mixpanel.md
  - /integrations/segment.md
related_playbooks:
  - /how-to/audit-your-google-analytics-4-setup.md
  - /how-to/find-gaps-in-conversion-tracking-with-segment.md
---

# Audit your UTM tags and tracking setup

## Key Takeaways

- 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?
- 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.
- 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.
- 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.
- 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.

## 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.

### 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.

**Related Playbooks**

- [How to audit your Google Analytics 4 setup](/how-to/audit-your-google-analytics-4-setup.md): Check that every conversion you care about is recorded once and credited to the right source, along with the property settings that shape every report.

### 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.

**Related Playbooks**

- [How to find gaps in conversion tracking with Segment](/how-to/find-gaps-in-conversion-tracking-with-segment.md): Follow each conversion from your code through your Segment sources and destinations to find where it stops being counted.

### What naming convention should you use for UTM campaign links?

A good UTM naming convention uses lowercase letters, one separator, a short fixed list of mediums your analytics tool already recognizes, and campaign names built from the same parts in the same order every time. Kite writes that convention for your team from the audit, because the right list of sources and campaigns depends on the channels you actually use.

A typical convention from Kite covers each tag like this:

- **Source** names the specific site or sender, such as `linkedin`, `google`, `mailchimp`, or `partner-acme`. Kite picks one spelling for each source you use and lists it.
- **Medium** names the kind of traffic, chosen from the values your analytics tool sorts into the right channel, such as `cpc` for paid search, `paid_social` for paid social, `social` for unpaid posts, `email` for email, and `referral` for partner links.
- **Campaign** names the effort, built from the same parts in the same order, such as `2026-10-webinar-ai-visibility`. The date at the front keeps campaigns in order when you sort a report.
- **Content** tells apart the versions inside one campaign, such as two ad images or the header and footer links in one email.
- **Term** holds the paid search keyword when you use one.

The convention also covers the rules that keep reports clean. Everything is lowercase, because most analytics tools treat `LinkedIn` and `linkedin` as different values. Words are joined with hyphens rather than spaces. Tags go only on links that point to your site from somewhere else, never on links between your own pages. Personal details, such as a recipient's email address, stay out of tags entirely.

If your team already has a convention that mostly works, Kite keeps it and fills the gaps rather than starting over. Either way, Kite saves the final version to your team's knowledge base, so every person and every later piece of Kite's work uses the same reference.

### 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.

### Keep new links on the convention and check again

Kite uses the convention on every campaign link it creates, so the cleanup doesn't decay the moment the audit ends. When it builds a landing page campaign, an outbound email, or a set of social posts, each link carries the agreed source, medium, and campaign, plus a content tag for each message or version. It records the campaign and its tags in your knowledge base, which gives your team a running list of what was tagged and when.

Links your team creates by hand still need checking. Ask Kite to repeat the audit every month, and each run compares the new tag values with the convention and with the last audit. A new spelling, a medium that slips into Unassigned, or a landing page that suddenly stops recording visits shows up within weeks. On a site Kite hosts, conversion tracking is added automatically every time you publish, so new pages start measuring from the day they go live.

## 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.

### Read the tags your analytics recorded

- [Google Analytics + Kite](/integrations/google-analytics.md): Kite reads sessions and conversions by source, medium, and campaign, the channel groups on your property, and your attribution settings to see where tagged visits land and how much falls into Unassigned or direct.
- [PostHog + Kite](/integrations/posthog.md): Kite runs PostHog's UTM audit to find mistyped and unmatched sources, breaks your conversion goals down by UTM source and campaign, and suggests the mappings that put stray sources back under the right channel.
- [Mixpanel + Kite](/integrations/mixpanel.md): Kite reads the values stored for each UTM property, breaks funnels and retention down by campaign, and builds lookup tables or formula-based properties that group spelling variants under one name.

### Check that tracking data arrives intact

- [Segment + Kite](/integrations/segment.md): Kite reads each source's daily event counts and each destination's delivery numbers to find where events go missing between your site and your analytics tools.

## 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](https://kite.ai/pricing).
