UTM Parameters for Email Campaigns: A Naming Convention That Keeps Your Analytics Clean
UTM parameters for email are the five query-string values you append to every link in a campaign so your web analytics can attribute visits and conversions back to that specific send. Get them right and GA4 (or whatever you use) shows you which newsletter, which link, and which variant drove the session. Get them wrong and the same campaign shows up as three fragmented rows, half your clicks land in direct traffic, and you can't tell a hero CTA from a footer link.
This is a setup guide, not a theory piece. By the end you'll have a naming convention you can paste into a shared doc, a tagged campaign, and a way to verify the data actually landed.
What you'll set up and what you need
The five UTM parameters, in one line each:
- utm_source — where the traffic came from. For email, the list or newsletter name, e.g.
newsletterorweekly-digest. - utm_medium — the channel type. For email, always
email. - utm_campaign — the specific campaign. A date-prefixed slug, e.g.
2026-03-product-launch. - utm_content — which link inside the email.
hero-cta,footer-link,text-link-1. - utm_term — the paid keyword. Irrelevant for email; leave it out.
The rule that matters most: every link in the email needs UTMs, and the values must be consistent. One Email with a capital E next to twenty email values splits your report in two. One missing tag on the footer link sends that traffic to direct and hides it from the campaign.
What you need before you start:
- Access to your email builder or template so you can edit link URLs.
- Access to your web analytics tool with permission to view real-time and acquisition reports.
- A shared doc — a one-pager is enough — where the convention lives so the next person doesn't invent
utm_campaign=MarchNewsletter.
One thing worth being clear about up front: your email platform's own analytics and your web analytics answer different questions. Mailerflow reports delivery, bounces, complaints, clicks and approximate opens per campaign and overall — that's the email-side picture. UTMs carry the same campaign into your web analytics, where you see sessions, engagement and conversions. They're complementary, not duplicates. If you want the fuller picture of which metrics belong where, see what to track in email marketing analytics.
Choosing a provider at the same time? Our comparison of the Best Email Marketing Platforms ranks them by verified prices for your list size and sending volume.
Step-by-step: building and applying your UTM parameters
1. Fix your source and medium values
Decide once: utm_source=newsletter, utm_medium=email. Lowercase, hyphenated, no spaces. If you send several distinct lists, use the list name as the source (newsletter, product-updates, onboarding) — but only if you actually want to compare them separately. Otherwise keep one source and use utm_campaign for the difference.
What you should see: in your analytics acquisition report, one row for newsletter / email, not four near-identical rows.
2. Define the campaign slug
Use a date prefix plus a short description: 2026-03-product-launch. The date prefix sorts chronologically in reports, which matters more than it sounds when you're scrolling a year of rows.
What you should see: campaign names that sort in send order without you renaming anything.
3. Use utm_content to separate links
A single email usually has three to six links worth measuring. Give each one a stable label: hero-cta, feature-block, footer-link, text-link-1. Keep the labels from a fixed list so you can compare the hero CTA across campaigns.
What you should see: in a link-level report, each label as its own row rather than one merged (not set).
4. Leave utm_term out
It exists for paid search keyword data. In email it adds noise. Skip it.
5. Build the full URL
Untagged:
https://example.com/pricing
Tagged:
https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=2026-03-product-launch&utm_content=hero-cta
Order doesn't matter to analytics, but keeping a fixed order makes URLs easier to eyeball for typos.
6. Apply it in the email builder
Paste the tagged URL into the button or link field for each element. Then walk the whole email: hero button, inline text links, the preheader link if it's clickable, footer navigation, social icons, and any "view in browser" link. Social icons are the classic miss — they usually point off-site, so tagging them tells you whether email drives social follows.
What you should see: every link in the link-check view contains utm_source and utm_medium.
7. Handle destinations that already have a query string
If the destination already has parameters, append with &, not a second ?:
https://example.com/signup?plan=pro&utm_source=newsletter&utm_medium=email&utm_campaign=2026-03-product-launch&utm_content=feature-block
A second ? breaks the URL and can drop everything after it.
8. Write the convention down
A table with allowed values per parameter, plus a template row for new campaigns. This is the step people skip and then regret in month three.
| Parameter | Allowed values | Example |
|---|---|---|
| utm_source | newsletter, product-updates, onboarding | newsletter |
| utm_medium | email (always) | |
| utm_campaign | YYYY-MM-short-slug | 2026-03-product-launch |
| utm_content | hero-cta, feature-block, footer-link, text-link-N | hero-cta |
| utm_term | not used in email | — |
A worked example
This is an illustrative example, not a customer story.
A monthly product newsletter goes to a segment of active users. Three links: a hero CTA to the pricing page, a feature block linking to a blog post, and a footer link to the help center.
| Link | Tagged URL |
|---|---|
| Hero CTA | https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=2026-03-product-launch&utm_content=hero-cta |
| Feature block | https://example.com/blog/new-export-tool?utm_source=newsletter&utm_medium=email&utm_campaign=2026-03-product-launch&utm_content=feature-block |
| Footer | https://example.com/help?utm_source=newsletter&utm_medium=email&utm_campaign=2026-03-product-launch&utm_content=footer-link |
In GA4, you'd open Reports → Acquisition → Traffic acquisition, then filter by Session source/medium containing newsletter / email. You should see three rows sharing the same campaign, split by content. If you've set up conversions, the same filter on a conversion report tells you which link produced signups rather than just clicks. The mechanics of that reporting are covered in more depth in email campaign reporting in Google Analytics 4.
In Mailerflow's campaign analytics, the same send shows delivery, bounces, complaints, clicks and approximate opens. Compare directionally: if the email tool reports 400 clicks and analytics shows 310 sessions, that gap is normal — blocked images, privacy features and bot filtering all eat into it. It is not automatically a tracking bug, and you shouldn't try to reconcile the two to the exact number. Opens are approximate by nature for the same reasons, so never reconcile opens against sessions.
How to check it works
Run this checklist before every send, then spot-check after:
- Send a test to yourself. Click every link. Don't skip the footer.
- Open real-time reports in your analytics tool and confirm the source/medium appears as you click.
- Check the case.
Emailandemailare different values to analytics. - Check for double question marks in any URL where the destination already had parameters.
- Confirm the campaign name matches the doc, character for character.
Then look for the three failure modes in the report:
(not set)campaign — a link went out untagged. Find it in the link-level view.- Self-referrals — your own domain showing as a referral source, usually from a link that lost its parameters or a redirect that stripped them.
- A direct traffic spike on send day — often the same problem, or a link shortener eating the query string.
Common mistakes and fixes
Mixed case and inconsistent values. Email, email, and e-mail become three rows. Fix: pick one, put it in the doc, and audit the report monthly for stragglers.
Tagging only the main CTA. Footer and social links go untagged and vanish into direct. Fix: tag every link, then verify in the link-check view.
One utm_campaign for a whole quarter. You lose the ability to compare individual sends. Fix: one campaign slug per send.
UTMs on internal links that overwrite the original source. If a link inside your site carries UTMs, it can reset the session's attribution. Fix: only tag links in the email, not links within your own pages.
Using utm_medium=email on transactional messages. Password resets and receipts pollute campaign reports. Fix: leave transactional links untagged, or use a distinct medium if you genuinely need to measure them.
Unreadable campaign slugs. 2026-03-product-launch-q1-emea-final-v2 helps nobody. Fix: short and stable.
A link shortener or click-tracking redirect stripping parameters. This happens after configuration changes to link handling. Fix: re-test a live link after any change to how your links are processed.
Making the convention stick
A convention only works if it survives contact with a busy week. Three habits cover most of it:
- Keep the one-page doc where people actually look, and add a template row for each new campaign type.
- Review the acquisition report monthly for
(not set)and duplicate rows, and fix the convention rather than patching the report. - Start from a reusable template in your email builder so tagged links are the default, not a manual step. Mailerflow's visual block editor and reusable templates make this straightforward, and its A/B testing of campaigns lets you compare two variants without inventing new campaign names — distinguish the variants with
utm_contentinstead.
If you're describing a new email from scratch, the AI email builder generates a complete responsive design, subject lines and preview text from a description, which gets you to the tagging step faster. You can see the full set of capabilities on the Mailerflow features page.
FAQ
Do I need UTMs if my email tool already tracks clicks?
Yes, if you care about what happens after the click. Your email tool tells you a link was clicked; UTMs tell your web analytics which campaign and which link produced the session and the conversion. They answer different questions.
Should utm_source be the tool name or the list name?
Use the list or newsletter name. The tool name tells you nothing you don't already know, and it makes it harder to compare lists against each other.
Does Gmail or Apple Mail strip UTM parameters?
No. Mail clients pass the URL through. What can interfere is a link shortener, a redirect, or a privacy proxy — which is why you test after changing link handling.
What about links to a page that already has query parameters?
Append with & instead of ?. A second question mark can break the URL and drop the parameters after it.
Can I use UTMs in transactional emails?
You can, but usually you shouldn't. Transactional sends aren't campaigns, and tagging them muddies campaign reports. Leave them untagged unless you have a specific measurement reason not to.
Track deliveries, clicks and conversions per campaign and run A/B tests in Mailerflow — start free.


