measuremy.site

UTM parameters for email newsletters

A man working on a laptop at a desk with coffee, showcasing remote work in a modern office setting.
Photo by Burst on Pexels

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.

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.

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.

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.

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.

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.

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 demo

Add 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