UTM Naming Conventions: Templates & Best Practices for Clean Analytics
One typo in a UTM parameter value creates a separate row in Google Analytics that lives there forever. twitter, Twitter, and TWITTER are three different sources. Consistent naming conventions are the difference between clean, actionable campaign data and a spreadsheet you cannot trust.
Why Naming Conventions Matter
UTM parameters are case-sensitive and space-sensitive. Google Analytics treats utm_source=Newsletter and utm_source=newsletter as completely different traffic sources. The same applies to utm_campaign=summer_sale and utm_campaign=summer sale (the space becomes %20 in the URL).
The problem compounds across a team:
- Three people create Facebook campaign links: one uses
source=facebook, one usessource=Facebook, and one usessource=fb. - Later, the analytics report shows three different sources for what should be one Facebook channel. The campaign looks like it delivered half the traffic it actually did.
- Nobody notices until the quarterly review, and by then the data cannot be fixed retroactively.
A naming convention eliminates this problem before it starts.
What Broken Analytics Look Like
Here is a real example of fragmented analytics data from a three-month campaign run by a team of four marketers without naming conventions.
The campaign was "Q2 Product Launch" across email, social media, and paid ads. Each marketer tagged links independently. Here is what the GA4 report showed:
| Source | Medium | Campaign | Sessions |
|---|---|---|---|
| social | q2-launch | 4,230 | |
| Social | Q2 Launch | 1,180 | |
| fb | social | q2_product_launch | 890 |
| newsletter | q2-launch | 3,450 | |
| Q2 launch | 920 | ||
| cpc | q2-launch | 5,100 | |
| ppc | Q2_launch_2026 | 1,450 | |
| social | q2-launch | 2,100 | |
| Social | q2 product launch | 670 |
The problem: This is one campaign with three channels. But GA4 sees nine different rows. The actual total is 19,990 sessions across Facebook, email, Google, and LinkedIn. But looking at the report, it appears as if each channel delivered less than half of its actual traffic.
The fix: With a naming convention document and a campaign URL builder that enforces it, every link would use:
source=facebook, medium=social, campaign=q2-launchsource=newsletter, medium=email, campaign=q2-launchsource=google, medium=cpc, campaign=q2-launchsource=linkedin, medium=social, campaign=q2-launch
That is four clean rows instead of nine fragmented ones. The campaign total is immediately visible. Channel performance is comparable at a glance. No manual merging required.
The Universal UTM Naming Rules
These four rules apply to every UTM parameter value, every time:
- Always use lowercase.
facebooknotFacebook.EMAILnotemail. Lowercase everywhere, zero exceptions. - Use hyphens or underscores for spaces.
summer-sale-2026orsummer_sale_2026. Neversummer sale 2026. - No special characters. No
&,?,=,%,#,+, or spaces. Stick to letters, numbers, hyphens, and underscores. - Document and share. Put your conventions somewhere everyone can reference them.
Channel-by-Channel Naming Templates
Email Newsletters
| Parameter | Value | Notes |
|---|---|---|
| utm_source | newsletter | Use the list name if you have multiple newsletters |
| utm_medium | email | Always "email" for any email campaign |
| utm_campaign | july-newsletter | Descriptive and date-stamped |
| utm_content | hero-cta | Differentiate links in the same email |
Social Media (Organic)
| Platform | utm_source | utm_medium |
|---|---|---|
facebook | social | |
instagram | social | |
linkedin | social | |
| Twitter / X | twitter | social |
| TikTok | tiktok | social |
| YouTube | youtube | social |
pinterest | social | |
reddit | social |
Paid Advertising
| Platform | utm_source | utm_medium |
|---|---|---|
| Google Ads | google | cpc |
| Facebook Ads | facebook | cpc |
| LinkedIn Ads | linkedin | cpc |
| Instagram Ads | instagram | cpc |
| TikTok Ads | tiktok | cpc |
| Display / Programmatic | google or platform name | display |
Important: For paid campaigns, use medium=cpc (cost per click) or medium=display to distinguish paid from organic traffic. This lets you compare paid and organic performance in Google Analytics.
Offline / QR Code Campaigns
| Placement | utm_source | utm_medium |
|---|---|---|
| Product packaging | packaging | qr |
| Print flyer | flyer | qr |
| Business card | business-card | qr |
| Event banner | event-banner | qr |
| In-store sign | in-store-sign | qr |
Campaign Name Pattern Templates
Your utm_campaign value is the most important parameter for grouping related links. Use a consistent pattern:
| Campaign Type | Pattern | Example |
|---|---|---|
| Product launch | {product}-launch-{year} | analytics-pro-launch-2026 |
| Seasonal promotion | {season}-{year} | summer-2026 |
| Newsletter | newsletter-{month}-{year} | newsletter-july-2026 |
| Event | {event-name}-{city}-{year} | sxsw-austin-2026 |
| Webinar | webinar-{topic}-{date} | webinar-seo-tips-2026-08 |
| Social campaign | social-{campaign-name}-{year} | social-ugc-contest-2026 |
| Paid campaign | paid-{campaign-name}-q{q}-{year} | paid-retargeting-q3-2026 |
Pro tip: Use URLvy's Campaign URL Builder presets to auto-fill source and medium based on your campaign type. The built-in validation warns you if a parameter value contains spaces, mixed case, or special characters.
Channel-Specific Deep Dives
Paid Search: Handling utm_term
Paid search is the only channel where utm_term matters. This parameter captures the search keyword that triggered your ad: utm_term=running+shoes.
Convention: Use the exact match keyword from your ad platform. Google Ads and Microsoft Advertising support {keyword} dynamic parameters that auto-insert the search term into your UTM URL. Combine this with a campaign URL builder by setting utm_term to the value template and letting the ad platform fill it per click.
Warning: Dynamic parameters can insert long, messy strings. Always lowercase the output using your ad platform's lowercase transformation settings.
Email Marketing: Content Differentiation for A/B Tests
Email campaigns often have multiple links in the same message — a hero CTA, a sidebar link, a footer link. Without utm_content differentiation, you cannot tell which link drove the click.
Convention: Use utm_content values that describe the link's position and purpose:
hero-cta-primaryfor the main call-to-action buttonhero-cta-secondaryfor a supporting link near the herosidebar-promofor sidebar promotional linksfooter-aboutfor informational footer linksfooter-unsubscribefor the unsubscribe link (yes, track this too)
With consistent content naming, your email analytics report shows exactly which position and message drove the most engagement.
QR Code Campaigns: Location and Placement Tracking
QR codes bring offline traffic online but lose all context if you do not tag them. A QR code on a flyer in New York versus the same flyer in Chicago produces indistinguishable analytics data without UTM parameters.
Convention: Set utm_source to the material type and utm_content to the specific placement:
source=flyer, content=nyc-times-squaresource=poster, content=chicago-oharesource=business-card, content=sarah-sales-teamsource=packaging, content=premium-box-v2
Use Urlvy's Campaign URL Builder to save each placement as a separate campaign entry. The CSV export gives you a clean spreadsheet mapping every QR placement to its tracking data.
Automated Enforcement: Make the Tool Do the Work
A convention document is only as good as its adoption rate. Even with a well-written doc, team members under deadline pressure skip reading it and type whatever comes to mind. Here is how to make the tool enforce your conventions automatically.
Presets Enforce Source and Medium
The most common fragmentation comes from different source and medium values for the same channel. Urlvy's Campaign URL Builder presets eliminate this at the point of creation:
- When a team member selects "Facebook" from the preset dropdown, the tool sets
source=facebook, medium=socialautomatically - They cannot accidentally type
Facebook,FB, orfacebook-adsbecause they never enter a source value manually - The preset dropdown itself becomes the team's convention reference — every channel option lists the correct source and medium
Validation Blocks Errors in Real Time
Even with presets, campaign names and content values are free-text fields. This is where validation catches errors:
- A space in
utm_campaign=summer saletriggers a warning: "Spaces in parameter values will be encoded as %20" - Mixed case in any field triggers: "Use lowercase for consistent analytics data"
- An empty
utm_sourceorutm_campaigntriggers: "This field is required for clean campaign tracking" - A pasted URL that already contains tracking parameters triggers: "This URL already has tracking parameters — strip them before adding new ones?"
Templates Preserve Correct Convention Patterns
Once a team member creates a correctly named campaign, saving it as a template preserves that convention pattern for future use. Next month, they load the template — the campaign name format, source, medium, and content structure are all pre-filled with the correct convention.
This means the team's conventions improve over time. Each saved template is an approved pattern that reinforces the standard. New team members learn conventions by loading existing templates rather than reading a document.
Building Your Team's Convention Doc
Your UTM naming convention is only useful if everyone on your team can access and follow it. Here is a template for your team's convention document:
Section 1: Universal Rules (Non-Negotiable)
- All parameter values must be lowercase — zero exceptions
- Word separators: hyphens only (e.g.,
summer-sale, notsummer_saleorsummer sale) - No special characters:
& ? = % # +— stick to[a-z0-9-] - No empty parameters — every link must have at least
source,medium, andcampaign
Section 2: Source Values by Channel
| Channel | utm_source Value | Notes |
|---|---|---|
| Organic social (any platform) | {platform-name} | facebook, twitter, linkedin, instagram, tiktok |
| Email newsletter | newsletter | Use {list-name} if you have multiple lists |
| Email transactional | transactional | Receipts, confirmations, notifications |
| Google Ads | google | Not googleads or adwords |
| Facebook Ads | facebook | Same as organic — medium=cpc distinguishes them |
| LinkedIn Ads | linkedin | Same as organic — medium=cpc distinguishes them |
| QR code | {material-type} | flyer, poster, packaging, business-card, signage |
| Affiliate | affiliate | Or use specific partner name: partner-name |
| Influencer | influencer | Or use specific handle: influencer-handle |
| Direct / typed | direct | Only for links you share verbally or in print without QR |
Section 3: Medium Values
| Channel Type | utm_medium Value |
|---|---|
| Email (any) | email |
| Social media (organic) | social |
| Paid search | cpc |
| Paid social | cpc |
| Display / programmatic | display |
| QR code scans | qr |
| Affiliate referrals | referral |
| Influencer posts | social |
| SMS / push | sms |
| Podcast / audio | audio |
Section 4: Campaign Name Format
{channel-prefix}-{descriptive-name}-{month}-{year}
- Email:
email-july-sale-2026-07 - Social:
social-ugc-campaign-2026-08 - Paid:
paid-retargeting-q3-2026 - QR offline:
qr-summer-flyer-2026-07
Section 5: Quarterly Audit Checklist
At the end of each quarter, run these checks:
- Export all campaign sources from GA4 — look for duplicates (e.g.,
twitterandTwitter) - Review the top 10 campaigns by spend — verify all share the convention format
- Check for empty
utm_campaignvalues — unidentified traffic is invisible traffic - Update the convention doc if new channels were added during the quarter
Implementing Conventions Across Your Team
Step 1: Create a UTM Convention Document
Write down your conventions in a shared space — Google Doc, Notion, or your internal wiki. Include:
- A table of every channel with its exact source, medium, and campaign naming pattern
- The four universal rules (lowercase, hyphens/underscores, no special chars, document everything)
- Examples of correct and incorrect parameter values
Step 2: Share the Link in Your Campaign URL Builder
If your team uses a campaign URL builder, add a link to the conventions doc next to the parameter fields. URLvy's Campaign URL Builder supports custom presets and templates that enforce your team's conventions automatically.
Step 3: Audit Your Data Monthly
Run a report in Google Analytics showing unique source values. If you see facebook, Facebook, fb, and facebook-ads, your team needs a refresh on the conventions. Fix the source by picking one value and updating future links.
Step 4: Enforce with Validation
A campaign URL builder with validation warnings catches naming errors before they reach your analytics. URLvy's tool alerts you when:
- A parameter value contains spaces
- You use mixed case in a source or medium field
utm_sourceorutm_campaignis left empty- The URL already contains tracking parameters (potential duplication)
The URLvy Shortcut
Urlvy's Campaign URL Builder eliminates the need to remember naming conventions:
- Select a preset — choose Google Ads, Facebook, LinkedIn, Email, Influencer, or Affiliate. The correct source and medium auto-fill.
- Type your campaign name — the tool validates it in real time.
- Save as template — your campaign structure, including naming conventions, is saved for one-click reuse.
Your team creates campaign links that are automatically consistent because the conventions are built into the tool, not left to individual judgment.
Try Urlvy's free Campaign URL Builder
Built-in presets and validation enforce UTM naming conventions automatically. No account required.
Open Campaign URL BuilderSummary
- Inconsistent UTM names fragment analytics data permanently.
facebookandFacebookare different sources in GA4. - Four universal rules: lowercase, hyphens/underscores for spaces, no special characters, document everything.
- Use channel-specific templates:
source={platform},medium={channel type},campaign={descriptive-name}. - Use
medium=cpcfor paid andmedium=socialfor organic to distinguish channel performance. - For QR code campaigns, use
medium=qrto track offline-to-online attribution. - Document your conventions in a shared location accessible to everyone who creates campaign links.
- A campaign URL builder with presets and validation catches naming errors before they corrupt your data.
Urlvy launches soon — join the VIP Beta
Get 100% free access to URL shortener, QR codes, and file sharing. Early beta testers get exclusive Lifetime Deal pricing.
Join the VIP Beta →