UTM parameters are standardized and consistently applied
Why it matters
Ad-hoc UTM concatenation produces utm_source=Email, utm_source=email, and utm_source=newsletter as three separate traffic sources inside GA4, Mixpanel, or Amplitude, which fragments every campaign comparison, corrupts channel-grouping rules, and prevents the conversion-linked-to-send join from matching rows. Inconsistent utm_campaign slugs also break the attribution model's joins against the sends table, so CAC and ROAS calculations understate email's contribution and misdirect budget toward channels with cleaner naming discipline.
Severity rationale
High because inconsistent UTMs silently fragment attribution data and misroute channel spend decisions.
Remediation
Centralize UTM construction in a single buildTrackedUrl(baseUrl, utmParams) helper that lowercases every value, slugifies the campaign name, and rejects free-form strings. Ban manual string concatenation in code review, and grep the repo for utm_source= to find stragglers. Place the helper at src/lib/tracking/utm.ts and import it everywhere.
const url = buildTrackedUrl('https://yourdomain.com/pricing', { source: 'email', medium: 'newsletter', campaign: 'q1-2026-product-update' })
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Campaign Analytics & Attribution Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
Taxons
History
- 2026-04-18·v1.0.0·Initial import from campaign-analytics-attribution·automated