Skip to content

How do I tag email links for GA4?

Add utm_source, utm_medium=email and utm_campaign to every email link, in lowercase. Klaviyo and Shopify Messaging can add the tags for you. Then check the medium: newsletter, campaign or flow there usually sends clicks to Unassigned instead of GA4's Email channel.

By , Founder & CEOUpdated 7 min read

Run the numbers for your store: the free email marketing ROI calculator.

Add utm_source, utm_medium and utm_campaign to every link in the email, in lowercase, with the medium set to email. If you send with Klaviyo or Shopify Messaging, let their UTM settings add the tags for you. Then check the medium: newsletter or campaign there usually keeps your clicks out of GA4's Email channel.

GA4's own help example is a Summer Sale email: utm_source=summer-mailer, utm_medium=email and utm_campaign=summer-sale. Here is each tag's job on an email link:

  • utm_source: who sent it. Use klaviyo, shopify_email or a list name, one value per sender, so a year of sends stays on one row.
  • utm_medium: email, every time. GA4's Email channel matches a source or medium of email, e-mail, e_mail or e mail. Nothing else gets in.
  • utm_campaign: which send. A launch, a weekly edition or a welcome flow, each under its own name.
  • utm_content: which link. GA4's help suggests it for two call-to-action links in the same email.

You rarely need to type any of this. Shopify Messaging tags links by default with utm_source=shopify_email, utm_medium=email and a campaign value built from the email name plus an activity ID. Klaviyo does it once you switch on Automatically add UTM parameters to links in its settings.

Why bother? GA4 processes a session as direct when no information about the referral source is available. Its help page on (direct) / (none) traffic names missing UTM parameters first, and tells you to check your email campaigns.

What one store's data shows

One store's anonymised GA4 export, 1 January 2024 to 21 August 2026. It holds shares of revenue only: no ad spend, no order counts.

What the export showsShare of revenueSource cell
Direct, in last click, first click and touched views57.7%Channels sheet, Direct row
All channels added up in the touched view110.4%Channels sheet, Touched column total
Journeys with 1 touch (0.5 days to buy)79.5%Journeys sheet, 1 touch row

Start with Direct. On the Channels sheet it holds 57.7% of revenue, and the share does not move between last click, first click and touched. So when Direct showed up in a journey, it was usually the first touch and the last one as well.

Next, the touched total. On the Channels sheet, the touched view adds up to 110.4% by design, because a journey that touched two channels counts in both. A total that close to the whole tells you most revenue came from journeys that never left a single channel.

Then the speed. On the Journeys sheet, journeys with 1 touch hold 79.5% of revenue and took 0.5 days to buy. If you send promotional emails, one click and a quick order is exactly the journey you hope for.

Together, the three rows set the stakes. A one-channel journey has nobody to share credit with. A tagged email click can earn the sale for Email. An untagged click with no referrer hands it to Direct, in every view.

GA4's attribution models normally keep Direct out of the credit. They exclude direct visits unless the path to the key event consists entirely of direct visits. A one-touch path that GA4 read as direct is exactly that exception, so Direct keeps the sale.

The export cannot say which of those quick sales started in an inbox. It records channels, not the links behind them.

Why do tagged emails still miss GA4's Email channel?

The usual answer stops at "add UTM parameters". For email, that leaves five ways to get it wrong with the tags switched on.

  1. The medium says campaign or flow. On 2 June 2025 Klaviyo changed its default utm_medium from campaign and flow to Message type. Accounts that customised and saved their UTM settings before then still show the old values. Neither value meets GA4's Email rule, and GA4 uses Unassigned when no channel rule matches.
  2. The medium says newsletter. GA4's own example link puts newsletter1 in the source and email in the medium. Copy that split.
  3. The campaign name says shop. GA4's Organic Shopping rule matches campaign names such as shop_the_drop or summer_shopping. GA4's help on channel groups says traffic goes to the first channel whose definition it matches, and Organic Shopping is listed above Email. So that email can land in Organic Shopping.
  4. Some links never get tags. Klaviyo cannot apply dynamic UTM parameters to product blocks or data feeds. Its help also says links need http:// or https:// to be tracked. So test the links in a product grid before you trust them.
  5. The tags fall off on the way. GA4's help warns that redirects can strip UTM parameters from the URL, and that URL shorteners can strip referral details. Click your own email and read the address bar.

None of these throws an error. The email goes out, the clicks arrive, and the credit lands in the wrong row.

Tags make the label right. They do not tell you what the email did.

First, GA4 only sees clicks. Klaviyo's help describes the case it misses: someone reads the email, never clicks, and visits the store later. GA4 records no conversion for the email there. Klaviyo does, within its attribution windows, because it reads your store's data instead of link clicks.

So expect the two to disagree. Klaviyo's help says they won't exactly align, and Shopify's help says the same about Shopify Messaging.

Second, neither number is the effect of the email. A loyal customer who was about to reorder still clicks the link in your newsletter. GA4 credits the click, Klaviyo credits the open, and nobody asks whether the order needed the email. A holdout group is the usual way to ask: test whether email is incremental.

What to do this week

  1. Search GA4 for your sender. Go to Reports > Acquisition > Traffic acquisition and set the table to Session source / medium. Type klaviyo or shopify_email into the search bar above the table. Pass: one row that reads klaviyo / email or shopify_email / email. Fail: klaviyo / campaign, klaviyo / flow or a newsletter medium, which GA4 cannot file under Email.
  2. Check the medium where the tags are made. In Klaviyo, open Settings, then Other, then UTM tracking, and read the utm_medium row. On Shopify, go to Apps > Messaging, click Settings and read the UTM tracking section. Pass: Message type in Klaviyo, email on Shopify. Fail: campaign, flow or anything else, so change it and save; past sends keep their old tags.
  3. Look inside Unassigned and Organic Shopping. In Traffic acquisition, keep Session default channel grouping. Click the icon next to the dimension drop-down and add Session source / medium. Pass: neither row holds your email sender. Fail: your sender sits there, so fix the medium or rename the campaign value.

Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework

Sources, 1 October 2026: URL builders: Collect campaign data with custom URLs (Google); Default channel group (Google); Custom channel groups (Google); Understand (direct) / (none) traffic (Google); Campaigns and traffic sources (Google); Get started with attribution (Google); Traffic acquisition report (Google); How to add UTM tracking to campaigns and flows (Klaviyo); Understanding UTM tracking in Klaviyo (Klaviyo); Shopify Messaging email analytics (Shopify)

Frequently asked questions

  • Why does my Klaviyo traffic show as Unassigned in GA4?
    Usually because the medium is not email. Klaviyo's default utm_medium used to be campaign or flow, and accounts that customised and saved UTM settings before 2 June 2025 keep those values. GA4's Email rule does not match them. Set utm_medium to Message type and new sends arrive as email.
  • Why don't GA4 and Klaviyo show the same email revenue?
    They count different things. GA4 credits the link clicks it can see. Klaviyo reads your store's data and counts conversions inside its own attribution windows, including some after an open with no click. Klaviyo's help says the two won't exactly align, so report from one and say which.
  • What should utm_source be for email links?
    The sender or the list, kept the same for every send: klaviyo, shopify_email or your newsletter's name. GA4's own examples use summer-mailer and newsletter1. Put the name of each send in utm_campaign instead, so one sender stays on one row.

Go deeper: Causal attribution, explained.

Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.

Keep reading

Terms in this article

Browse the full glossary

Your platforms guess.
We run the math.

Upload a GA4 export and see what each channel caused, next to last-click, in 1–2 minutes. The read is yours to keep.

Free, in your browser: your file is not uploaded. The full read is €99, refundable within 30 days. Prices exclude VAT.
Or book a 30-min call.