best-practicesUpdated 2025

Email Campaign Tracking: Complete UTM Best Practices Guide

Master email UTM tracking with this comprehensive guide covering ESPs, automation, A/B testing, and GA4 attribution.

8 min readbest-practices

You're sending thousands of emails every month. Newsletters, promotions, abandoned carts, product updates. But when you look at GA4, your email data is a mess:

  • Some emails show as "Email" channel ✅
  • Others appear as "Direct" ❌
  • A few show up as "Paid Search" ❌❌
  • Campaign names are inconsistent
  • Can't compare performance across email types
  • No idea which subject lines or CTAs drive conversions

Sound familiar?

This guide gives you a complete, copy-paste-ready UTM tracking framework for email campaigns that works across every major ESP and ensures clean, consistent GA4 data.

Table of contents

🚨 Not sure what's breaking your tracking?

Run a free 60-second audit to check all 40+ ways UTM tracking can fail.

Scan Your Campaigns Free

✓ No credit card ✓ See results instantly

The Email UTM Framework (Copy This)

Core Rule: The 3 Required Parameters

EVERY email link must include these 3 UTM parameters:

Code
?utm_source=`{"{"}{"{"}source{"}"}{"}"}}`&utm_medium=email&utm_campaign=`{"{"}{"{"}campaign{"}"}{"}"}}`

Parameter definitions:

ParameterWhat It TracksExample Values
utm_sourceEmail platform OR campaign typemailchimp, newsletter, drip, transactional
utm_mediumTraffic type (ALWAYS "email")email (never change this!)
utm_campaignSpecific campaign identifierspring-sale-2025-01, weekly-digest-jan-9
ParameterWhen to UseExample Values
utm_contentA/B testing, link differentiationcta-button, footer-link, hero-image
utm_termAudience segmentationvip-customers, trial-users, lapsed-buyers

Email UTM Naming Standards

Standard Format

Code
?utm_source=`{"{"}{"{"}platform{"}"}{"}"}}`&utm_medium=email&utm_campaign=`{"{"}{"{"}type{"}"}{"}"}}`-`{"{"}{"{"}name{"}"}{"}"}}`-`{"{"}{"{"}date{"}"}{"}"}}`

Examples:

Weekly Newsletter:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest-2025-01-09

Promotional Campaign:

Code
?utm_source=mailchimp&utm_medium=email&utm_campaign=spring-sale-2025-01

Abandoned Cart Recovery:

Code
?utm_source=klaviyo&utm_medium=email&utm_campaign=cart-recovery-day1

Product Announcement:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=product-launch-widget-pro

Transactional (Order Confirmation):

Code
?utm_source=transactional&utm_medium=email&utm_campaign=order-confirmation

Naming Conventions: Do's and Don'ts

DO:

  • Use lowercase (GA4 is case-sensitive: "Spring" ≠ "spring")
  • Use hyphens instead of spaces (spring-sale not spring sale)
  • Include dates for time-bound campaigns (jan-2025 or 2025-01)
  • Be descriptive (flash-sale-shoes-30off not promo)
  • Keep consistent across campaigns

DON'T:

  • Use spaces (breaks URLs, requires encoding)
  • Use special characters (&, =, ?, #)
  • Mix uppercase and lowercase
  • Use generic names (campaign1, promo, test)
  • Change naming format mid-year

UTM Strategy by Email Type

1. Regular Newsletters

Frequency: Weekly, bi-weekly, or monthly

UTM Format:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest-`{"{"}{"{"}date{"}"}{"}"}}`

Example:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest-2025-01-09

Pro tip: Include week number for easy comparison:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest-w02-2025

2. Promotional Campaigns

Use case: Sales, discounts, limited-time offers

UTM Format:

Code
?utm_source=`{"{"}{"{"}platform{"}"}{"}"}}`&utm_medium=email&utm_campaign=`{sale-type}`-`{"{"}{"{"}product{"}"}{"}"}}`-`{"{"}{"{"}date{"}"}{"}"}}`

Examples:

Code
Spring Sale:
?utm_source=mailchimp&utm_medium=email&utm_campaign=spring-sale-2025-03

Black Friday:
?utm_source=klaviyo&utm_medium=email&utm_campaign=black-friday-2025

Flash Sale (24hr):
?utm_source=sendgrid&utm_medium=email&utm_campaign=flash-sale-jan-9-2025

3. Drip/Nurture Campaigns

Use case: Onboarding, trial sequences, re-engagement

UTM Format:

Code
?utm_source=`{"{"}{"{"}platform{"}"}{"}"}}`&utm_medium=email&utm_campaign=`{"{"}{"{"}sequence{"}"}{"}"}}`-{day/email-number}

Examples:

Code
Trial onboarding:
?utm_source=drip&utm_medium=email&utm_campaign=trial-onboarding-day1
?utm_source=drip&utm_medium=email&utm_campaign=trial-onboarding-day3
?utm_source=drip&utm_medium=email&utm_campaign=trial-onboarding-day7

Re-engagement:
?utm_source=activecampaign&utm_medium=email&utm_campaign=win-back-email1
?utm_source=activecampaign&utm_medium=email&utm_campaign=win-back-email2

4. Transactional Emails

Use case: Order confirmations, password resets, shipping updates

UTM Format:

Code
?utm_source=transactional&utm_medium=email&utm_campaign=`{email-type}`

Examples:

Code
?utm_source=transactional&utm_medium=email&utm_campaign=order-confirmation
?utm_source=transactional&utm_medium=email&utm_campaign=password-reset
?utm_source=transactional&utm_medium=email&utm_campaign=shipping-notification

Pro tip: Add &utm_content={order-id} for order-specific tracking:

Code
?utm_source=transactional&utm_medium=email&utm_campaign=order-confirmation&utm_content=order-12345

5. Event Invitations / Webinars

UTM Format:

Code
?utm_source=events&utm_medium=email&utm_campaign=`{event-name}`-`{"{"}{"{"}date{"}"}{"}"}}`

Examples:

Code
?utm_source=events&utm_medium=email&utm_campaign=webinar-seo-strategies-jan-15
?utm_source=events&utm_medium=email&utm_campaign=conference-2025-registration

6. Product Updates / Announcements

UTM Format:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=product-`{"{"}{"{"}feature{"}"}{"}"}}`-announcement

Examples:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=product-ai-integration-launch
?utm_source=newsletter&utm_medium=email&utm_campaign=feature-dark-mode-announcement

😰 Is this your only tracking issue?

This is just 1 of 40+ ways UTM tracking breaks. Most marketing teams have 8-12 critical issues they don't know about.

• 94% of sites have UTM errors

• Average: $8,400/month in wasted ad spend

• Fix time: 15 minutes with our report

✓ Connects directly to GA4 (read-only, secure)

✓ Scans 90 days of data in 2 minutes

✓ Prioritizes issues by revenue impact

✓ Shows exact sessions affected

Get Your Free Audit Report

Advanced: A/B Testing Email Campaigns

Use utm_content to Track Variants

Subject Line A/B Test:

Code
Variant A:
?utm_source=newsletter&utm_medium=email&utm_campaign=jan-sale&utm_content=subject-a

Variant B:
?utm_source=newsletter&utm_medium=email&utm_campaign=jan-sale&utm_content=subject-b

CTA Button A/B Test:

Code
Button text "Buy Now":
?utm_source=promo&utm_medium=email&utm_campaign=spring-sale&utm_content=cta-buy-now

Button text "Shop the Sale":
?utm_source=promo&utm_medium=email&utm_campaign=spring-sale&utm_content=cta-shop-sale

Email Design A/B Test:

Code
Image-heavy design:
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest&utm_content=design-images

Text-focused design:
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest&utm_content=design-text

GA4 A/B Test Analysis

Step 1: GA4 → Explore → Blank exploration Step 2: Dimensions: utm_content, utm_campaign Step 3: Metrics: Sessions, Conversions, Conversion rate Step 4: Filter: utm_campaign = your test campaign name

Result: Compare conversion rates by utm_content variant.

Advanced: Audience Segmentation with utm_term

Track Which Audience Segment Converts Best

VIP customers:

Code
?utm_source=promo&utm_medium=email&utm_campaign=exclusive-sale&utm_term=vip-customers

Trial users:

Code
?utm_source=drip&utm_medium=email&utm_campaign=upgrade-offer&utm_term=trial-users

Lapsed customers (no purchase in 90 days):

Code
?utm_source=winback&utm_medium=email&utm_campaign=comeback-offer&utm_term=lapsed-90days

Geography-based:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest&utm_term=us-east
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest&utm_term=us-west

GA4 Segment Performance Analysis

GA4 → Explore:

  • Dimension: utm_term
  • Metrics: Sessions, Revenue, ROAS
  • Compare which audience segment has highest lifetime value

ESP-Specific Setup (Quick Reference)

Mailchimp

Code
Settings → Tracking → Google Analytics
utm_source: mailchimp
utm_medium: email
utm_campaign: *|CAMPAIGN_UID|* (dynamic)

SendGrid

Code
Settings → Tracking → Google Analytics
utm_source: sendgrid
utm_medium: email
utm_campaign: (set per campaign)

Klaviyo

Code
Settings → Integrations → Google Analytics
utm_source: klaviyo
utm_medium: email
utm_campaign: {{ campaign.name }}

HubSpot

Code
Settings → Marketing → Email → Tracking URL parameters
utm_medium: email
(HubSpot auto-sets source and campaign)

ActiveCampaign

Code
Settings → Analytics & Goals → Google Analytics
utm_source: activecampaign
utm_medium: email
utm_campaign: %TITLE%

Scenario: Email with multiple CTAs (hero button, mid-email link, footer link)

Strategy: Same campaign, different utm_content:

Code
Hero CTA button:
?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale&utm_content=hero-cta

Product image link:
?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale&utm_content=product-image

Footer "Shop Now":
?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale&utm_content=footer-link

GA4 Analysis:

  • Which CTA position gets most clicks?
  • Which link drives highest conversion rate?

Common Email UTM Mistakes to Avoid

Mistake #1: Using utm_medium=newsletter

Wrong:

Code
?utm_source=mailchimp&utm_medium=newsletter&utm_campaign=jan-sale

Right:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=jan-sale

Why: utm_medium determines GA4 channel grouping. Only email is recognized as Email channel.

Mistake #2: Inconsistent Capitalization

Wrong:

Code
Email 1: utm_campaign=Spring-Sale
Email 2: utm_campaign=spring-sale
Email 3: utm_campaign=SPRING-SALE

GA4 treats these as 3 different campaigns!

Right: Pick one standard (lowercase recommended):

Code
utm_campaign=spring-sale

Mistake #3: Forgetting Transactional Emails

Missed tracking opportunities:

  • Password reset emails → often link to login page (conversion!)
  • Order confirmations → often link to related products (upsell!)
  • Shipping notifications → often link to tracking page (engagement!)

Fix: Add UTMs to ALL transactional email links.

Mistake #4: Not Encoding Special Characters

Wrong (breaks URL):

Code
?utm_campaign=50% Off Sale!

Right (URL-encoded):

Code
?utm_campaign=50-percent-off-sale

Or use URL encoding:

Code
?utm_campaign=50%25%20Off%20Sale

Mistake #5: Using Generic Campaign Names

Wrong:

Code
utm_campaign=promo
utm_campaign=campaign1
utm_campaign=test

Right:

Code
utm_campaign=spring-sale-2025-03
utm_campaign=product-launch-widget-pro
utm_campaign=black-friday-early-access

GA4 Custom Reports for Email Performance

Report 1: Email Campaign Performance Dashboard

GA4 → Explore → Free Form

Dimensions:

  • utm_campaign
  • utm_source

Metrics:

  • Sessions
  • Engaged sessions
  • Conversions
  • Revenue
  • Conversion rate

Filter: utm_medium = email

Result: See which email campaigns drive most revenue.

Dimensions:

  • utm_campaign
  • utm_content

Metrics:

  • Sessions
  • Conversion rate

Filter: utm_medium = email

Result: See which CTA position converts best.

Report 3: Email Audience Segment Performance

Dimensions:

  • utm_term
  • utm_campaign

Metrics:

  • Sessions
  • Revenue
  • ROAS

Filter: utm_medium = email AND utm_term is not null

Result: See which audience segments have highest lifetime value.

Prevention & Maintenance Checklist

Set default UTMs in your ESP (utm_medium=email) ✅ Create naming standards doc for your team ✅ Audit quarterly for naming drift ✅ Test before major sends (check real-time GA4) ✅ Train new team members on UTM standards ✅ Review GA4 monthly for anomalies (e.g., email showing as Direct) ✅ Update transactional emails when adding new flows

✅ Fixed this issue? Great! Now check the other 39...

You just fixed one tracking issue. But are your Google Ads doubling sessions? Is Facebook attribution broken? Are internal links overwriting campaigns?

Connects to GA4 (read-only, OAuth secured)

Scans 90 days of traffic in 2 minutes

Prioritizes by revenue impact

Free forever for monthly audits

Run Complete UTM Audit (Free Forever)

Join 2,847 marketers fixing their tracking daily

FAQ

Should I use utm_source=mailchimp or utm_source=newsletter?

Both are valid. Choose based on your reporting needs:

Use ESP name (mailchimp, sendgrid) if you:

  • Want to compare ESP performance
  • Use multiple ESPs
  • Care about platform-level metrics

Use campaign type (newsletter, promo, transactional) if you:

  • Only use one ESP
  • Want to compare email types
  • Care more about content type than platform

Our recommendation: Use campaign type as source, ESP as medium or content:

Code
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest&utm_content=mailchimp

Do I need UTMs on transactional emails?

Yes! Even transactional emails drive valuable actions:

  • Password reset → user logs in (engagement)
  • Order confirmation → user clicks "track order" (retention)
  • Shipping notification → user browses related products (upsell)

Track them all.

Can I use different utm_medium values for different email types?

No. Always use utm_medium=email for ALL emails. Use utm_source or utm_campaign to differentiate:

Code
✅ Promotional:
?utm_source=promo&utm_medium=email&utm_campaign=jan-sale

✅ Transactional:
?utm_source=transactional&utm_medium=email&utm_campaign=order-confirm

❌ Wrong:
?utm_source=app&utm_medium=transactional (GA4 won't recognize as email)

What if my ESP auto-generates campaign names?

Most ESPs let you customize:

  • HubSpot: Uses email name (rename your emails to match UTM standards)
  • Mailchimp: Uses campaign title (rename to match standards)
  • Klaviyo: Use {{ campaign.name }} variable (rename campaign in Klaviyo)

If your ESP doesn't allow customization, manually override per campaign.

How often should I audit my email UTM setup?

Monthly: Quick check (5 min)

  • Send test email
  • Click link
  • Verify in GA4 real-time

Quarterly: Full audit (30 min)

  • Review all active email templates
  • Check new automation sequences
  • Verify transactional emails
  • Update team documentation

Should I track email opens with UTMs?

No. UTMs track clicks, not opens. Email opens are tracked by:

  • ESP (Mailchimp, SendGrid, etc.) via tracking pixels
  • Note: Open tracking is increasingly unreliable due to privacy features (Apple Mail Privacy Protection)

Focus on click tracking and conversions instead.

Conclusion

Email UTM tracking best practices summary:

  1. Always use utm_medium=email (never change this)
  2. Use descriptive campaign names (not "promo" or "test")
  3. Stay consistent (lowercase, hyphens, date formats)
  4. Track ALL emails (including transactional)
  5. Use utm_content for A/B testing
  6. Use utm_term for audience segmentation
  7. Set ESP defaults to automate UTM addition
  8. Test before sending (verify in GA4 real-time)
  9. Audit quarterly to prevent naming drift

Follow this framework and your email data in GA4 will be clean, consistent, and actionable for optimization decisions.


Related: Why utm_medium=email is Critical

UTM

Get Your Free Audit in 60 Seconds

Connect GA4, run the scan, and see exactly where tracking is leaking budget. No credit card required.

Trusted by growth teams and agencies to keep attribution clean.