UTM parameters for email newsletters
Email newsletters live or die by clicks. A subscriber can open an issue, but what you really want to know is whether they tapped the pricing link, read the new post, or signed up. UTM parameters attached to the links in your email make that possible. They do not change what the page looks like. They only add a short query string to the URL that your analytics tool can read. The general idea is covered in the UTM tracking explained post, but email has its own quirks because you control the send and can name campaigns in a way that scales across issues.
Start with three parameters and only add more when needed
For most newsletters, three parameters are enough.
- utm_source=newsletter
- utm_medium=email
- utm_campaign=april_launch or issue_042
If you have several links to the same page in one email, add utm_content to separate them.
https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=april_launch&utm_content=hero_button
Use lowercase, avoid spaces, and choose hyphens or underscores. Stick to one style so campaign names sort predictably. If you use an ampersand or special character in the value, URL-encode it so the link still works.
Make campaign names sortable
Campaign names become your report labels. If you call one campaign "newsletter" and the next one "april update", you will have a pile of unrelated rows.
- Use a date prefix such as 202504_issue or 2025-04-launch.
- Keep a short note about the content, like 202504_pricing_update.
- Do not reuse the same campaign name for a recurring newsletter unless you want all issues merged.
Sortable names make it easier to compare issue over issue without building a separate report for each send. A consistent prefix also helps when you filter a dashboard by campaign and want only the last six months of newsletter traffic.
Use utm_content for link variants, not separate campaigns
When the same email has three links to the same page, keep one campaign and separate the links by content.
- utm_content=hero_button
- utm_content=text_link
- utm_content=footer_link
This lets you see which position drove the most clicks without pretending they are different campaigns. If you run a subject line test, you can also use utm_content=subject_a and subject_b, but only if your email platform lets you control that. Otherwise, use two campaign names such as 202504_launch_a and 202504_launch_b.
utm_term is rarely needed for email. It exists mainly for paid search keywords. Unless you have a specific reason to segment subscribers by a term, leave it out.
Check for existing query strings
A URL may already have a query string from your site or from an earlier tracking parameter. When that happens, do not add a second question mark.
https://example.com/pricing?plan=pro&utm_source=newsletter&utm_medium=email&utm_campaign=april_launch
If the original URL has no query string, start with ?. If it already has one, join the UTM parameters with &. This small detail prevents broken links and missing campaign data.
Watch for email platform tracking
Many email platforms add their own parameters to links for click tracking. Those parameters are useful for their own reports, but they can make your UTM values inconsistent if they rewrite the URL after you set it.
- Test one email to yourself before sending to the whole list.
- Check the final URL after clicking through.
- Keep your UTM parameters in place, and do not rely on the platform's automatic tags as a substitute.
If your platform rewrites links, check its documentation to see how it handles custom query strings.
Measure the action after the click
Open rates are still useful for list health, but they are distorted by image blocking and preview panes. UTM parameters measure what happens after the click, which is closer to the business outcome.
- Look at pageviews from utm_medium=email.
- Compare signups, purchases, or other events by campaign.
- Build a funnel that starts with an email campaign and ends at the signup or checkout page.
In tools that support campaign attribution, later traffic and signups can be credited back to the original UTM link. That means a subscriber who clicks in April and signs up a week later can still be connected to the same newsletter.
Keep transactional email separate
Marketing newsletters and transactional messages serve different purposes. A receipt or password reset email is not a campaign. Adding UTM parameters to those links can clutter your reports and make it harder to see real marketing performance.
- Use UTM parameters on marketing newsletters, product announcements, and launch emails.
- Leave password resets, receipts, and account notifications out of campaign reports unless you have a specific reason to track them.
A small setup for a coding agent
If you use agentlytics, you can create tracked campaign links with UTM tags and see later traffic and signups credited to those links. When you want to inspect the data without building a dashboard query, you can ask a coding agent to read it through MCP. The agent handles the details, so you can ask questions like "which newsletter campaign last month drove the most signups" and get an answer from the same data.
UTM parameters for email are a discipline. Once you set a naming convention and stick to it, every send becomes a data point you can compare with the one before it. The goal is not to collect more tags, but to know which issues and links actually move people toward signing up or buying.
See it on your own site
measuremy.site is cookieless analytics your coding agent can read. Free for 5,000 pageviews a month, no card.
Start free See the live demoAdd measuremy.site analytics to this project: connect the measuremy.site MCP server at https://a.measuremy.site/mcp (it signs in with OAuth, no key), then tell me how to sign in. Details: measuremy.site/llms.txt
More from the blog
- How I built a self-hosted analytics MCP server on Cloudflare Workers and D1
- UTM tracking explained: what the parameters mean and how to use them
- Conversion funnel analysis for small sites: a practical guide
- Sudden drop in website traffic? A checklist for finding the cause
- What is an MCP server? A plain-English guide for people who run websites
- Track Button Clicks Without Google Tag Manager
- How to track the results of a social media post without cookies
- How to track traffic from a GitHub README
- How to measure a product launch without guessing