UTM Tracking for Email Campaigns: The Setup Guide Your ESP’s Documentation Skips

Email has a dirty attribution secret: it’s the channel most likely to be invisible in your analytics.

Here’s why. When someone clicks a link in Gmail, Apple Mail, or Outlook, that click usually arrives at your site with no referrer at all — email clients don’t pass one the way websites do. So GA4 has nothing to classify the visit with, and it lands in Direct. Your ESP dashboard says email drove $30K last month; GA4 says email barely exists; and Direct traffic is mysteriously huge. Both are describing the same clicks.

UTM parameters are the fix — they’re the only reliable way analytics tools can recognize email traffic. Which makes email the one channel where tagging isn’t a nice-to-have for cleaner reports. Untagged email traffic isn’t misattributed; it’s gone.

This guide covers the setup properly: the right values, ESP auto-tagging, flows versus campaigns, transactional email (trickier than it looks), and the Apple Mail wrinkle that quietly made UTM clicks your most honest email metric.

The Standard Values — And One Mistake to Avoid

For email, the core tagging looks like this:

ParameterUseExamples
utm_mediumAlways exactly emailemail
utm_sourceThe platform or list sending itklaviyo, mailchimp, hubspot, partner-newsletter
utm_campaignThe specific send or flowwelcome-series, newsletter-2026-w29
utm_contentThe specific link within the emailhero-cta, body-link-2, footer-cta

The non-negotiable is utm_medium=email — that exact lowercase string is what GA4’s channel grouping matches to file traffic under Email. Get creative here (e-mail, Email, newsletter) and your email traffic scatters into Unassigned or splits across duplicate rows.

Now the mistake, and it’s one we see constantly — including in other tools’ tutorials: setting utm_source=email too. Source and medium answer different questions. Medium is the channel (email); source is who sent it. utm_source=email&utm_medium=email throws away a free dimension. Tag source with the platform (klaviyo) — or, if you run multiple lists, the list — and you can later compare your own newsletter against that sponsored slot in someone else’s, or Klaviyo flows against the HubSpot sequences sales runs, without any extra work.

Turn On ESP Auto-Tagging First (Then Fix Its Defaults)

Don’t hand-tag email links. Every major platform can append UTMs automatically, and automation is the only thing that survives a busy send day:

Still managing UTM links in spreadsheets? Create cleaner tracking URLs with less manual work.
Try Free
  • Klaviyo: Settings → Email (and separately Settings → SMS) → UTM tracking. Account-wide auto-append with customizable values.
  • Mailchimp: enabled per campaign or via defaults; historically injects utm_campaign based on the campaign title.
  • HubSpot, Omnisend, Braze, and the rest: same idea, different menus.

Two lessons from cleaning up real accounts:

Audit what the defaults actually produce. ESPs ship with their own naming ideas — internal IDs as campaign names, platform-flavored source values — that won’t match your convention. Turn auto-tagging on, send yourself a test, click the link, and read the URL that actually loads. Customize until it matches your taxonomy, then trust it.

Check the coverage gap. The classic finding: flows are tagged, one-off campaigns aren’t (or vice versa), because auto-tagging was enabled after half the templates were built — or because someone hardcoded old UTMs into a template that now conflict with the auto-appended ones, producing links with duplicate parameters. Audit both sides once; it takes twenty minutes.

Flows vs. Campaigns: Two Different Naming Problems

Automated flows and one-off sends need different naming logic, because you’ll analyze them differently.

Flows are permanent — name them by structure. A welcome series or abandoned-cart flow runs for years, so the campaign name should identify the flow and utm_content should identify the position within it:

utm_source=klaviyo&utm_medium=email&utm_campaign=abandoned-cart&utm_content=email-2-hero-cta

Now one GA4 view answers a genuinely useful question: within the abandoned-cart flow, does email 1 or email 3 actually recover the revenue? (In our experience the answer surprises people — later emails in a flow routinely outperform the first, and without position-level tagging you’d never know.)

Campaigns are dated — name them by time. Newsletters and promos are point-in-time events, so put the date in the name using a sortable format:

utm_source=klaviyo&utm_medium=email&utm_campaign=newsletter-2026-w29

Use yyyy first (2026-w29, 2026-07-bfcm-teaser) so campaigns sort chronologically in every report. If your ESP can inject the campaign title automatically, enforce the date format in your campaign-naming habit and the UTMs inherit it for free.

And use utm_content for placement everywhere. Tagging hero-cta vs body-link vs footer-cta tells you which part of your template converts. A recurring finding from audits: the beautifully designed hero button often loses to a plain text link in the body. That’s a template redesign insight hiding in a parameter most teams leave blank.

Transactional Email: Tag It, But Think First

Order confirmations, shipping updates, password resets — these get clicked a lot, and most teams either leave them untagged (clicks vanish into Direct) or tag them like marketing (which creates a subtler problem).

The subtle problem: attribution hijacking. A customer clicks a Meta ad, buys, then clicks “view your order” in the confirmation email. If that link carries campaign-style UTMs, the new session’s attribution now credits the confirmation email — and if they buy again in that session, your transactional email just stole a conversion from the ad that earned it. It’s the same mechanism as the tag-your-internal-links mistake, wearing an email costume.

Our recommendation: tag transactional email with an honest, segregated convention —

utm_source=klaviyo&utm_medium=email&utm_campaign=transactional-order-confirmation

— so the traffic is visible and filterable, and then exclude transactional-* campaigns when you’re evaluating marketing performance. Visible but quarantined. What you shouldn’t do is let transactional sends borrow promo campaign names; that’s how “email ROAS” quietly inflates.

The Apple Mail Effect: Why Clicks Are Now the Real Email Metric

Since Apple’s Mail Privacy Protection, open rates have been part fiction — Apple pre-fetches email content through proxies, registering “opens” from people who never opened anything. For a list heavy with Apple Mail users (most consumer lists), open rate is now closer to a deliverability signal than an engagement metric.

Clicks, though, still require a human finger. Which means your UTM-tagged click data in GA4 — sessions, revenue, conversion by campaign — has become the most honest email performance data you have, more trustworthy in some ways than your ESP’s own engagement dashboard. Teams that invested in clean email tagging came out of the MPP era with their measurement intact; teams that graded email on opens are still recalibrating.

Two related edge cases worth knowing:

  • Link-wrapper redirects are (usually) safe. ESPs route clicks through their own tracking domains before redirecting to your URL — UTMs survive because the wrapped destination is your tagged URL. But corporate email security scanners and some link-checking tools can mangle long query strings, so if a B2B list shows weird Direct spikes, test with a recipient inside a strict corporate domain.
  • Forwards are free reach with your tags attached. When someone forwards your email or pastes the link into Slack, the UTMs travel with it. That traffic still reports as your email campaign — technically dark-social sharing you got attribution on for free. It slightly flatters the campaign, but it’s a far better failure mode than Direct.

Reading the Results in GA4

Once tagging is live, the working views:

  • Traffic acquisition → primary dimension Session source/medium → look for klaviyo / email (or your platform). This is your email channel, now visible.
  • Add Session campaign as a secondary dimension to rank individual sends and flows by sessions, conversions, and revenue.
  • For placement analysis, build an Exploration with Session manual ad content (that’s utm_content) against revenue — this is the hero-vs-footer report.

Expect GA4’s email revenue to run lower than your ESP’s claim. That’s normal: ESPs typically count broad attribution windows (any purchase within N days of a click — or worse, an open), while GA4 attributes by its own model. The two numbers answering different questions isn’t a bug; a huge gap, though, usually means untagged sends are leaking into Direct. Which brings everything back to coverage.

The Checklist

  1. utm_medium=email, exactly, lowercase, always.
  2. utm_source = the platform or list — never just “email” twice.
  3. Auto-tagging on in your ESP; defaults customized to your convention; one test send actually clicked and inspected.
  4. Flows named by structure with position in utm_content; campaigns named with sortable dates.
  5. Transactional email tagged under a transactional-* convention and excluded from marketing analysis.
  6. A monthly ten-minute check of Session source/medium for near-duplicates and a Direct-traffic sanity check.

Every one of these is easy. The failure mode is never difficulty — it’s the fourth teammate, the new template, the agency that didn’t get the memo. That’s a consistency problem, and consistency is what tooling is for: in UTM Manager, email exists once in a locked medium list, your platforms live in an approved source list, and campaign patterns are templates — so the convention above isn’t something your team remembers, it’s the only thing the builder will produce.

Make email attribution automatic. Start free with UTM Manager — lock in your email tagging convention once, and every campaign, flow, and teammate ships links your GA4 can actually see.

FREE TOOL + EXTENSION

Still Building UTM Links in Spreadsheets?

Create clean campaign URLs faster, save templates, and standardize naming across your team.

×
UTM URL Builder
📋 Templates Required Your organization requires approved templates for all UTM links.
You’re in guest mode — build, copy, and export are available. Sign in or create an account to save and load org rules & templates.