- Klaviyo needs utm_source and utm_medium. GA4 says you should always also send utm_campaign.
- The account-level toggle only applies to new campaigns and flow messages. Existing flow messages have to be switched on one by one.
- UTM values are case sensitive in GA4. "Email" and "email" are two different sources, so pick lowercase and never change it.
- UTMs fix where traffic gets credited. They won't make Klaviyo's attribution match Shopify's, because the two use different models.
- If a send shows opens and revenue but zero clicks, check tracking before you judge the email.
This is for Shopify founders who open Klaviyo, Shopify and Google Analytics, see three different email revenue numbers, and want to know which part is a tracking problem and which part is just how each tool counts.
What is UTM tracking in Klaviyo?
UTM parameters are the tags added to the end of a link, like ?utm_source=klaviyo&utm_medium=email&utm_campaign=black-friday. When someone clicks, Shopify and Google Analytics read those tags and know the visit came from your email, which campaign it was, and what kind of message sent it.
Klaviyo can add these tags for you. Per Klaviyo's UTM guide, it adds the selected parameters "to HTTP and HTTPS links in the rendered email," including links from product blocks and data feeds. It works across email, SMS, WhatsApp and push. The one exception worth knowing: links with click tracking turned off don't get UTMs.
Which UTM parameters should I use in Klaviyo?
Klaviyo has 5 prebuilt parameters. Two are required:
- utm_source: where the traffic came from. Keep it simple and constant, like
klaviyo. - utm_medium: the channel. Klaviyo's default is "Message type," which sends
emailon email links andsmson text links. Klaviyo recommends this if you use more than one channel, and I'd leave it there.
And three optional ones:
- utm_campaign: the campaign or flow name. GA4's guide says "you should always use utm_source, utm_medium, and utm_campaign," so treat this one as required too.
- utm_id: an ID for the campaign. GA4 strongly recommends it.
- utm_term: originally for paid keywords. Most email setups don't need it.
You can also add up to 5 custom parameters. And if you A/B test, Klaviyo's "Track links separately in each variation" setting adds a variation parameter (a, b, c) to email links. Turning on regular UTM tracking alone doesn't add it.
One rule matters more than any of the values: GA4 treats values as case sensitive. Google's own example is that utm_source=google is different from utm_source=Google, and it recommends lowercase as standard practice. If one flow says Klaviyo and the rest say klaviyo, your email traffic gets split in two.
How do I turn on UTM tracking for all Klaviyo campaigns and flows?
Start at the account level:
- Click your account name in the bottom left, then Settings.
- Go to Other, then UTM tracking.
- Turn on "Automatically add UTM parameters to links" and set your default values.
Here's the catch. Klaviyo says this "does not turn tracking on for existing messages that have it disabled." It covers new campaigns and new flow messages. Your welcome series, abandoned cart and post-purchase flows that were built before you flipped the switch stay untagged.
For each existing flow message: open the flow, select the message, and under Settings check "Enable UTM Tracking." Leave custom tracking parameters off if you want it to use the account defaults. Then repeat for every other message in the flow. It's tedious, and it's also the most common gap I'd expect to find, because flows are where most of the untagged revenue lives.
For campaigns, turn on "Include tracking parameters" in the Recipients step (or the Settings tab in the canvas editor). Klaviyo notes that UTMs can't be edited after a message is sent, and a scheduled campaign has to be paused to change them, so check this before you schedule.
For SMS, links need to start with http:// or https://, and "Automatically shorten links" has to stay on for tracking to work.
Why don't Klaviyo, Shopify and GA4 show the same email revenue?
Because they're answering different questions, and UTMs only fix one of them.
Klaviyo credits revenue to a message using its own attribution settings: if someone opened or clicked within your attribution window and then ordered, Klaviyo counts it. That doesn't depend on UTMs at all. I walk through those settings in Klaviyo attribution.
Shopify credits sales by session and channel. Its marketing reports default to the last 30 days using the "last non-direct click" model, and you can switch to last click, first click, any click or linear. Shopify says that when the tool that sent an email or SMS can be identified, such as Klaviyo, that tool is listed as the marketing channel. UTMs are how Shopify knows a visit came from a specific campaign.
GA4 reads the UTM tags to put the visit in the right source, medium and campaign. Without them, a click from an email opened in a webmail app can look like a referral or direct visit. Anything missing shows up as "(not set)."
So once UTMs are on everywhere, Shopify and GA4 should mostly agree with each other on which campaign drove the visit. Klaviyo will still show a bigger number, because it counts opens, not just clicks. That's not a bug. If you want to know what email actually adds on top, the honest test is a holdout, which I explain in email incrementality testing.
How do I know my Klaviyo tracking is broken?
The clearest sign is a send that shows opens and revenue but zero clicks. In one account I looked at, about 20 sends showed exactly that: opens, revenue, no clicks. People were clicking. The tracking was broken.
If you see that pattern, check three things:
- Click tracking is on for that message. Without it, there are no tracked clicks and no UTMs.
- The links are full http:// or https:// links, not bare text or broken buttons.
- UTM tracking is enabled on that specific flow message, not just at the account level.
I go through the other causes in email clicks but no sales.
Who should be allowed to change attribution settings?
Fewer people than you think. Changes to attribution settings significantly affect the revenue Klaviyo reports, so if you work with an agency, the contract should say who can change them, and the settings should be agreed before you sign. Otherwise your month-over-month numbers can jump for reasons that have nothing to do with the emails. The same goes for UTM defaults: decide the values once, write them down, and keep them stable so your email marketing reports compare like with like.
FAQ
Does Klaviyo add UTM parameters automatically?
Only if you turn it on. The account setting "Automatically add UTM parameters to links" applies to new campaigns and flow messages. Existing flow messages need UTM tracking switched on in each message's settings.
What should utm_source be for Klaviyo?
Use one lowercase value and never change it, such as klaviyo. Let utm_medium carry the channel by setting it to "Message type," so email links get email and SMS links get sms.
Do Klaviyo UTMs work for SMS?
Yes. Links need to start with http:// or https://, and "Automatically shorten links" must stay enabled for SMS link tracking to work.
Can I change UTM parameters after a campaign is sent?
No. Klaviyo says UTM parameters can't be edited for sent messages. For a scheduled campaign, pause it, change the settings, and reschedule.
Why is my Klaviyo revenue higher than Shopify's?
Klaviyo attributes revenue using its own window and counts opens as well as clicks. Shopify uses its own models, last non-direct click by default. UTMs help Shopify and GA4 credit the right campaign, but they won't make Klaviyo's number match.