UTM parameter values are preserved in analytics
Why it matters
UTM parameters are how you tell paid search, paid social, email, and partner referrals apart. Lose them and every marketing dollar collapses into a single undifferentiated (direct) / (none) bucket, making channel ROI impossible to calculate. If UTMs are stripped by a client-side redirect before the analytics SDK captures them, or if you chose an SDK that does not read them automatically, every campaign you spent money on looks identical to organic traffic in the dashboard.
Severity rationale
High because lost campaign attribution makes marketing spend unmeasurable and unchannelable.
Remediation
Confirm your SDK captures UTMs natively — GA4, PostHog, Mixpanel, and Segment all do. For Plausible or a custom setup, parse them on landing in lib/analytics.ts:
const params = new URLSearchParams(window.location.search)
analytics.identify({ lastUTMSource: params.get('utm_source'), lastUTMCampaign: params.get('utm_campaign') })
Persist to sessionStorage so the attribution survives navigation to the conversion page.
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 Analytics & Tracking 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 marketing-analytics·automated