Campaign tracking governance

UTM Naming Convention Validator

Paste campaign URLs, define your team's UTM rules, and find naming drift before analytics data becomes fragmented.

Convention failed65/100
Passed URLs2
Warnings1
Failed URLs1
URLs checked4

Campaign URLs

Enter one complete HTTP or HTTPS URL per line.

URLs are parsed locally in your browser and are not submitted to a server.

Validation results

Failures break an explicit team rule; warnings identify naming drift that can be normalized.

Line 1

https://example.com/pricing?utm_source=google&utm_medium=cpc&utm_campaign=summer_sale_2026&utm_content=hero_banner

Passed
sourcegooglemediumcpccampaignsummer_sale_2026
This URL follows the selected convention.
Line 2

https://example.com/demo?utm_source=LinkedIn&utm_medium=Paid Social&utm_campaign=Summer Sale&utm_content=Hero CTA

Failed
sourceLinkedInmediumPaid SocialcampaignSummer Sale
utm_source does not use Lowercaseutm_medium does not use Lowercaseutm_medium does not use the Underscore (_) separatorutm_campaign does not use Lowercaseutm_campaign does not use the Underscore (_) separatorutm_content does not use Lowercaseutm_content does not use the Underscore (_) separatorutm_source 'LinkedIn' is not allowedutm_medium 'Paid Social' is not allowedutm_campaign does not match ^[a-z]+_[a-z]+_\d{4}$
Normalized suggestionhttps://example.com/demo?utm_source=linkedin&utm_medium=paid_social&utm_campaign=summer_sale&utm_content=hero_cta
Line 3

https://example.com/blog?utm_source=newsletter&utm_medium=email&utm_campaign=summer_sale_2026

Passed
sourcenewslettermediumemailcampaignsummer_sale_2026
This URL follows the selected convention.
!
Line 4

https://example.com/pricing?utm_source=google&utm_medium=cpc&utm_campaign=summer_sale_2026&utm_content=hero_banner

Warning
sourcegooglemediumcpccampaignsummer_sale_2026
Duplicate URL; first seen on line 1

UTM Naming Convention Report

Copy the audit for campaign QA or download the row-level CSV.

# UTM Naming Convention Report

- Score: 65/100
- Status: blocked
- URLs: 4
- Passed: 2
- Warnings: 1
- Failed: 1

## Rules
- Required: utm_source, utm_medium, utm_campaign
- Case: lowercase
- Separator: underscore
- Allowed sources: google, newsletter, linkedin
- Allowed mediums: cpc, email, social
- Campaign pattern: ^[a-z]+_[a-z]+_\d{4}$

## URL results

### Line 1 - pass
https://example.com/pricing?utm_source=google&utm_medium=cpc&utm_campaign=summer_sale_2026&utm_content=hero_banner
- [x] Naming convention passed

### Line 2 - fail
https://example.com/demo?utm_source=LinkedIn&utm_medium=Paid Social&utm_campaign=Summer Sale&utm_content=Hero CTA
- [!] utm_source does not use Lowercase - utm_source; actual=LinkedIn; expected=lowercase
- [!] utm_medium does not use Lowercase - utm_medium; actual=Paid Social; expected=lowercase
- [!] utm_medium does not use the Underscore (_) separator - utm_medium; actual=Paid Social; expected=underscore
- [!] utm_campaign does not use Lowercase - utm_campaign; actual=Summer Sale; expected=lowercase
- [!] utm_campaign does not use the Underscore (_) separator - utm_campaign; actual=Summer Sale; expected=underscore
- [!] utm_content does not use Lowercase - utm_content; actual=Hero CTA; expected=lowercase
- [!] utm_content does not use the Underscore (_) separator - utm_content; actual=Hero CTA; expected=underscore
- [ ] utm_source 'LinkedIn' is not allowed - utm_source; actual=LinkedIn; expected=google, newsletter, linkedin
- [ ] utm_medium 'Paid Social' is not allowed - utm_medium; actual=Paid Social; expected=cpc, email, social
- [ ] utm_campaign does not match ^[a-z]+_[a-z]+_\d{4}$ - utm_campaign; actual=Summer Sale; expected=^[a-z]+_[a-z]+_\d{4}$
- Suggested URL: https://example.com/demo?utm_source=linkedin&utm_medium=paid_social&utm_campaign=summer_sale&utm_content=hero_cta

### Line 3 - pass
https://example.com/blog?utm_source=newsletter&utm_medium=email&utm_campaign=summer_sale_2026
- [x] Naming convention passed

### Line 4 - warn
https://example.com/pricing?utm_source=google&utm_medium=cpc&utm_campaign=summer_sale_2026&utm_content=hero_banner
- [!] Duplicate URL; first seen on line 1 - actual=https://example.com/pricing?utm_source=google&utm_medium=cpc&utm_campaign=summer_sale_2026&utm_content=hero_banner; expected=1