Strategy

Newsletter UTM parameters: a competitive intel guide

TL;DR

Tag every outbound link with utm_medium=email, never utm_medium=newsletter, and push the send type into utm_campaign instead. Use utm_content to name the placement, because that is the field that tells the hero button apart from the footer link. Then go and read your competitors' query strings: a rival's utm_campaign values are their internal send calendar, published by accident.

Nearly every guide to newsletter UTM parameters was written for paid media and then lightly rewritten for email. You can tell, because they spend four paragraphs on utm_term and one sentence on the field that decides whether your clicks show up as Email at all. We read a lot of newsletters here, and the tagging we see falls into three groups: teams who tag properly, teams whose ESP tags for them without being asked, and teams who tag in a way that quietly breaks their own reporting. What follows is the convention we would defend, the ESP behaviour that overrides it, and the part almost nobody writes about: what you can learn from someone else's tags.

The five newsletter UTM parameters, and which two matter

There are five. utm_source names where the click came from. utm_medium names the channel type. utm_campaign names the specific send. utm_content distinguishes links inside that same send. utm_term carries a paid search keyword.

For an editorial newsletter, utm_term is dead weight. It was built for AdWords and has no honest meaning in a Tuesday digest. Leave it off.

The two that decide whether your reporting works are utm_medium and utm_content. Medium decides whether GA4 files the click under Email at all. Content decides whether you can separate the hero button from the sign-off link six weeks later, and it is the field most newsletter teams skip. That omission is why the email row in so many acquisition reports is one undifferentiated number. You know the send drove 400 sessions. You do not know whether they came from the top CTA you agonised over or the throwaway link in the P.S.

Should utm_medium be email or newsletter?

Email. Always email. Never newsletter. This is the one place in the scheme where you do not get a free choice, and we will argue it with anyone.

GA4's default channel grouping assigns traffic to its Email channel by matching a small family of medium values: email, e-mail, e_mail, e mail. The word newsletter is not in that family. Tag a send with utm_medium=newsletter and the sessions do not appear in Email. They fall to Unassigned, or get handed to whatever referrer happened to carry the click. Your email programme then looks like it produced nothing, which is a fun conversation to have with a CFO.

The argument for newsletter is real, so let's name it. "Newsletter" is more descriptive. It separates your weekly editorial send from a transactional receipt and a password reset, all of which are email, and collapsing them into one medium does cost you that distinction at the channel level. But utm_campaign gives it straight back, and campaign is not wired into any default channel definition, so you can name it whatever you like without breaking a report. Put the send type there.

We keep running into teams who picked newsletter three or four years ago and are now stuck with a split history. GA4 resolves the medium at collection time, so there is no retroactive fix. If you switch, switch at a quarter boundary and write the date on the wall, because every year-over-year comparison you run for the next twelve months will straddle it.

A naming convention that survives contact with a real team

Lowercase everything. GA4 treats utm values as case-sensitive strings, so Weekly and weekly are two rows in the same table, and the person who types Weekly is always the person covering the send while you are on holiday.

The template we use:

utm_source = the list or publication (for example daily-brief)
utm_medium = email, no exceptions
utm_campaign = yyyy-mm-dd then the send type, for example 2026-08-09-weekly
utm_content = placement then position, for example hero-cta or sponsor-1

Date first, because it sorts chronologically as a plain string and every reporting tool can sort strings. Send types worth standardising: weekly, breaking, digest, promo, welcome-1. Placements: hero-cta, sponsor-1, sponsor-2, text-link-2, footer.

Hyphens, not underscores, and never spaces: a space encodes to %20 and shows up in reports as a literal %20 that nobody notices until a quarterly review. Four fields is the ceiling. Every extra parameter is another chance to fat-finger a value at 6am on send day, and a scheme that only works when the careful person is in the office is not a scheme.

What your ESP appends without asking

Mailchimp has a per-campaign Google Analytics link tracking toggle. Switch it on and it writes its own utm_source, utm_medium and utm_campaign onto outbound links, building the campaign value from the internal title you typed into the composer. If your titles look like AUG WEEK 2 - final v3 (Dana's edit), that is now public.

Klaviyo ships with UTM tracking on by default and writes utm_source=klaviyo unless you change it, which is why so many GA4 properties have a lonely "klaviyo" source next to their real list names. HubSpot appends its own parameters too. Kit, formerly ConvertKit, is quieter and leaves more to you. beehiiv and Substack take a different route again: the click goes through their own redirect hop first, then on to the destination. Your parameters usually survive that hop, but the first thing the click touches is not your site.

Double-tagging is where this gets expensive. Hand-build a link with utm_source=daily-brief, leave the ESP toggle on, and you get a URL carrying two utm_source values. Which one wins depends on whether the platform appends after your parameters or rewrites the query string, and you should not be finding that out from a report three weeks later. Pick one system to own the tagging. Usually that is you, not the ESP.

Not sure which ESP a newsletter is on?

Auto-tagging behaviour depends entirely on the sending platform, so identify it first. Our detector reads the headers of any newsletter you paste in and names the ESP behind it.

Try the ESP detector →

Reading a competitor's UTM scheme

Here is the part the paid-media guides never get to. UTM parameters are public. They sit in the query string of every link a newsletter sends you, and nobody can hide them without giving up their own measurement.

Some honesty about our instrumentation first, because it changes how you should read anyone's link data. Newsletrix counts links per issue with a raw pass over the HTML for anchor tags carrying an href. Raw means raw: unsubscribe is in there, so is view-in-browser, so are the social icons and the address block. When a tracked newsletter shows twelve links, half of them are chrome, and comparing a rival's link count to yours is partly comparing footer templates. We aggregate into an average and a median per sender, and the median is the one to read, because one link-heavy roundup drags a mean somewhere unhelpful.

We store UTM presence as a single true or false per issue, flipped on by any link carrying any utm_ key. That is coarse and we know it. It answers "does this sender tag at all", not "how thoroughly". For the second question you open the issue and read the query strings by hand, which is fine, because the manual pass is where the interesting things are anyway.

Their utm_campaign date stamps give you the send calendar and the internal naming vocabulary. Their utm_source values expose how the list is segmented, and a source you have never seen before usually means a segment you did not know existed. A sponsor link tagged with a different medium, or with no tags where every editorial link has them, separates paid placement from earned in about ten seconds, which is the trick behind spotting sponsors in a competitor newsletter and finding their affiliate links.

Keep a four-column log: issue date, link target, utm_campaign, utm_content. Six weeks of that on three competitors and patterns fall out. When a rival's campaign values shift from something like nl-weekly-114 to 2026-08-05-weekly, somebody rebuilt their taxonomy, and in our experience that means a new hire with opinions or an ESP migration. Both are worth knowing about. The rest of the method is in our guide to reverse-engineering a competitor newsletter, and the mechanics of running it continuously are in how to track competitor newsletters.

Absence is a signal too. A sender whose links carry nothing is measuring inside their ESP or not at all, and either way is not running attribution against the rest of their marketing. That is a competitor working with one eye closed.

Newsletter UTM parameters: five mistakes that corrupt reporting

Tagging internal links. If a reader lands on your blog from a tagged newsletter link, then clicks a second tagged link inside your own site, you restart the session and credit email twice. Tag across domain boundaries only.

Tagging the unsubscribe link. It happens more than you would think, usually when someone builds tagging into the master template rather than the content blocks. Every unsubscribe then registers as an email-attributed session on your preferences page.

Uppercase drift. One person types Promo, everyone else types promo, and the campaign report splits down the middle. A shared link builder with a lowercase-only input fixes it for good.

Changing the scheme mid-quarter. Any change creates a seam in the data. Seams are survivable on a quarter boundary with the date written down, and miserable in week seven of a twelve-week test.

Tagging the same CTA twice with different content values. A hero button and hero image pointing at one URL with hero-cta and hero-image split a single intention across two rows, and both look weaker than the thing really is. Give paired elements the same value, or drop one link, which is a CTA design question before it is a tracking one. If you want to check whether your placement tagging points at the links that carry the send, the CTA analyzer reads them straight out of a pasted newsletter, and it is worth seeing how that compares to MailCharts if you are shopping for tracking tools.

Start with the medium field. Open your last send, look at one link, and if it reads utm_medium=newsletter, fix that before you send again. One find-and-replace in the template, and it is the difference between having an email channel in GA4 and not.

Frequently asked questions

What UTM parameters should a newsletter use?

Four are enough: utm_source for the list or publication, utm_medium set to email, utm_campaign for the individual send, and utm_content for the placement inside that send. Skip utm_term, which was built for paid search keywords and carries nothing useful in an editorial newsletter. Keep every value lowercase and hyphenated, because GA4 treats utm values as case-sensitive strings and Weekly and weekly will appear as two separate rows in the same report.

Should utm_medium be email or newsletter?

Use email. GA4's default channel grouping recognises a small family of medium values for its Email channel (email, e-mail, e_mail, e mail), and newsletter is not one of them. Traffic tagged utm_medium=newsletter lands in Unassigned or gets attributed to a referrer instead. You do lose send-type granularity in the medium field, but utm_campaign gives it straight back, and campaign is not wired into any default channel definition so you can name it freely.

Does Mailchimp add UTM parameters automatically?

Only when you switch on Google Analytics link tracking for a campaign. With that toggle enabled, Mailchimp appends its own utm_source, utm_medium and utm_campaign to outbound links, and it builds utm_campaign from the internal campaign title you typed. Anyone reading your links can therefore read your campaign naming. Klaviyo behaves similarly but ships with UTM tracking on by default and writes utm_source=klaviyo unless you change it.

How do I track which link in a newsletter was clicked?

That is what utm_content is for. Give every link in a send a distinct utm_content value describing its placement and position, such as hero-cta, sponsor-1, text-link-2 or footer. Without it, GA4 collapses every click from that send into one campaign row and you cannot tell the top button from the sign-off link. Your ESP's own click map shows this too, but only for your sends, and only for as long as you stay on that ESP.

Can you see a competitor's UTM parameters?

Yes. UTM parameters live in the public query string of every link a newsletter sends you, so subscribing to a competitor's list and reading the href values is enough. Their utm_campaign values usually expose the send calendar and internal campaign naming, utm_source exposes list segmentation, and a sponsor link tagged differently from editorial links separates paid placements from earned ones. No tooling is required for one issue; tooling helps when you want the pattern across six months.

Related reading

Get started

Stop guessing. Start winning.

Join newsletter creators using AI-powered competitor intelligence to ship better content, faster.

No credit card required  ·  Cancel anytime  ·  All features on every plan