Campaign tracking and UTM hygiene
The Campaigns dashboard groups traffic by UTM parameters and includes a hygiene report that flags inconsistent tagging before it quietly ruins your reports.
UTM parameters are the duct tape of marketing attribution: universally supported, completely unstandardized, and quietly load-bearing. Tracely's Campaigns dashboard leans into that reality — it reports what your links actually said, and it tells you when your tagging is inconsistent enough to make the report lie.
The campaigns table
The primary table groups pageviews by utm_campaign by default, and you can switch the grouping to source, medium, content, term, or utm_id. Each row shows views, unique visitors, and sessions. Attribution here is last-touch in the most literal sense: values come from the URL query string on each pageview, nothing inferred.
A few optional layers sit alongside:
- First-touch campaigns. When the first-touch UTM toggle is on in site settings, the tracker remembers the first UTM set a browser landed with and reports it separately — so you can compare "campaign that acquired this visitor" against "campaign on this pageview."
- Multi-touch and weighted credit. Once you've created at least one goal, the dashboard shows in-session campaign paths before conversion and can distribute fractional credit under first-click, last-click, linear, position-based, or time-decay models. These are narrative tools, not incrementality proofs, and the UI says so.
- Paid click share. The share of pageviews that arrived carrying a paid click identifier, when present.
There's also a UTM link builder on the page, because half of all tagging problems start with someone assembling a URL by hand.
The hygiene report
Here's the part I actually want to talk about. When the selected period has tagged traffic, the dashboard shows a UTM tagging hygiene panel that counts pageviews falling into three inconsistent shapes:
utm_campaignis set but bothutm_sourceandutm_mediumare emptyutm_sourceis set bututm_mediumis emptyutm_mediumis set bututm_sourceis empty
The denominator is pageviews with any UTM field present — campaign, source, medium, content, term, or id — so percentages read as "share of tagged traffic," not share of everything. Each issue comes with a plain hint about why it matters; a campaign with no source or medium, for instance, tells you a launch happened but not where the clicks came from, which makes the attribution tables above it much less useful.
These rules are deliberately heuristic. They encode the common convention — if you use utm_campaign, set utm_source and utm_medium alongside it — rather than any formal spec, because there isn't one.
The messes it exposes indirectly
The hygiene panel catches structurally incomplete tags. The other classic mess — the same campaign spelled three ways — shows up in the main table itself, because grouping is an exact match on the stored value. Newsletter, newsletter, and news-letter appear as three separate rows with their traffic split between them. Tracely doesn't try to guess that they mean the same thing; merging them silently would hide the problem instead of fixing it. Seeing three near-identical rows at the top of your campaign table is the strongest possible nudge to pick one spelling and put it in the link builder.
That's the philosophy in miniature: the dashboard reports what happened, and a small amount of tooling points at where your process is generating noise. Fix the links, and the next period's report gets sharper on its own.
If you're coming from Google Analytics, campaign reporting is one of the places where the mapping is nearly one-to-one — the migration guide covers what carries over.
Try Tracely on your site
One snippet, cookieless, first-party. See your traffic in minutes without handing it to an ad network.
Start freeGet new posts by email
Short product notes twice a week plus the occasional deep dive. No tracking pixels in the emails, and you can unsubscribe anytime.
Your address is used only to send new posts. No open tracking.