How to Track A/B Test Variants Using UTM Parameters

You shipped the test. Variant A had the blue button, variant B had the green one. Two weeks later your boss asks which one won. You open GA4 and see one number for the whole campaign. The variants are invisible.
That gap is the problem this guide fixes. Your A/B testing tool might know the answer. But the moment traffic leaves that tool and lands in your analytics, the variant identity vanishes unless you tagged it.
I am Bhargav, founder of Linkutm. I have watched hundreds of marketing teams run good tests and then lose the results in a fog of untagged links. The fix is boring and reliable: track A/B test variants with UTM parameters so every click, signup, and dollar traces back to the exact version that earned it.
This is not a “what is A/B testing” explainer. It is the tracking workflow. I will show you which parameter carries the variant, a naming schema that survives six months of tests, when UTMs beat a dedicated tool, how to run a test across email and ads and social at once, and how to read the winner in GA4 without fooling yourself.

Why do A/B test variants need UTM tracking at all?
Because your A/B testing tool and your analytics platform do not share a brain. The test tool splits traffic and often measures its own goal. Your analytics platform measures everything else: assisted conversions, revenue, multi-session journeys, other channels. Without a variant tag, analytics cannot tell version A from version B.
Here is the thing. A/B testing is a controlled experiment where you show two versions of something and measure which performs better. That definition lives in our glossary, so I will not rebuild it here. What the glossary does not cover is the plumbing: how the variant identity travels from the test into your reports.
A/B test variant tracking is the practice of attaching a unique identifier to each version of a test so your analytics platform can attribute clicks, conversions, and revenue to the specific variant that drove them. UTM parameters are the identifiers.
The stakes are real. A/B testing lifts conversions by an average 18% after 6 months (Convert.com, 2025). But only 20-30% of tests actually win (Convert.com, 2025). If you cannot see which variant won in your own analytics, you cannot compound that 18%. You are running experiments and throwing away the lab notes.
Honest limitation: UTM tracking captures what happened after the click. It does not split your traffic for you. You still need a way to decide who sees variant A versus variant B, whether that is a test tool, two separate links, or an email split. UTMs are the measurement layer, not the traffic-splitting layer.
Which UTM parameter should carry the variant?
Use utm_content. It is the parameter built to separate links that are otherwise identical, which is exactly what two test variants are: same destination, same campaign, different version.
I will not re-explain the five parameters here. If you want the full mechanics of utm_content (what it is, how GA4 stores it, the seven channel examples), read our utm_content parameter guide. This section is only about the variant job.
A tagged variant URL looks like this:
https://yoursite.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=q3_pricing_test&utm_content=variant_a
Same source, same medium, same campaign. The only thing that changes between versions is utm_content. That is the slot your variant lives in.
There is one exception where I put test identity in utm_campaign instead:
| Situation | Put the variant in | Why |
|---|---|---|
| Standard A/B test, same campaign, 2-4 versions | utm_content | Keeps the campaign whole; variants compare cleanly side by side |
| The test IS the campaign (a dedicated experiment you report on separately) | utm_campaign holds the test-id, utm_content holds the variant | Isolates the experiment in campaign reports |
| Testing paid search keywords, not creative | utm_term (not content) | utm_term is the keyword slot |
Real talk: 47% of marketers still ignore utm_content despite using the core three parameters (UTM.io, 2024). That is the single reason so many tests end up unmeasurable in analytics.
Honest limitation: utm_content only works if the same value reaches your analytics unchanged. Some link shorteners, some social platforms, and some redirect chains strip or rewrite parameters. Always click your tagged variants and confirm the value shows up in a GA4 realtime report before you launch at scale.
A variant-naming schema that survives six months of tests
Name variants with a pattern, not a vibe. The winning schema is utm_content=, where the test-id makes the experiment findable months later and the variant is always one of a fixed vocabulary: control, variant_a, variant_b.
Basic UTM naming rules (lowercase, no spaces) still apply, and our UTM naming conventions guide covers those in full. Variant tracking adds two rules on top:
- Reserve a fixed variant vocabulary. Always
control,variant_a,variant_b,variant_c. Never “blue_button” one week and “greenCTA” the next. The version’s meaning goes in your test doc, not the UTM. This keeps GA4 rows comparable across every test you ever run. - Prefix with a dated or numbered test-id.
2026q3_pricing__variant_a. Six months later you will run twenty more tests. The test-id is how you find this one without scrolling through 400 content values.
Here is the schema laid out:
| Field | Format | Example | Purpose |
|---|---|---|---|
| test-id | lowercase | 2026q3_pricing | Find the test later; group its variants |
| separator | double underscore __ | __ | Machine-splittable in GA4 Explore |
| variant | fixed vocabulary | control, variant_a | Comparable across all tests |
| full value | test-id + __ + variant | 2026q3_pricing__variant_a | Goes in utm_content |

The double underscore matters. In GA4 Explore you can later split 2026q3_pricing__variant_a on __ to pivot test-id against variant. Single underscores get messy because your test-id already uses them.
Honest limitation: a naming schema only works if the whole team follows it. One teammate typing variantA instead of variant_a fragments your data into two rows GA4 treats as unrelated. You either enforce this manually in a shared doc, or you let a tool lock it down. linkutm templates freeze the schema so every teammate builds the same value, but a disciplined spreadsheet works too if the team is small.
UTM tracking vs dedicated A/B testing tools: which do you actually need?
Use UTMs when your test spans channels or you mainly care about downstream conversions and revenue. Use a dedicated tool when you need on-page traffic splitting, visual editing, and built-in statistical significance. Most mature teams run both.
This decision got sharper in 2023. Google Optimize sunset on September 30, 2023 (BrillMark, 2023), and it was the free option most small teams relied on. Its paid replacements are not cheap. Enterprise tools like Optimizely and VWO start around $500+ per month (BrillMark, 2023). That price gap is exactly why UTM-based tracking became the practical entry point for so many marketers doing a/b testing on a budget.
The market is not shrinking either. A/B testing tools were worth $840 million in 2025, heading to $2.49 billion by 2035 at an 11.5% CAGR (Global Growth Insights, 2025). Adoption is real too: 32% of the top 10,000 sites by traffic run an experimentation or personalization platform (Convert.com, 2025).
Here is how I frame the choice:
| Factor | UTM tracking | Dedicated A/B testing tool (VWO, Optimizely) |
|---|---|---|
| Splits traffic for you | No, you split via links/email/ad sets | Yes, on-page or server-side |
| Works across channels | Yes, email + ads + social + print | Usually one property/site |
| Cost to start | Free | Often $500+/month |
| Measures revenue/LTV downstream | Yes, via GA4 | Limited to its own goals |
| Statistical significance built in | No, you calculate it | Yes |
| Visual/no-code variant editor | No | Yes |

A quick tools-landscape read for a/b testing marketing work: VWO and Optimizely handle on-site page and funnel tests. Unbounce handles landing-page variants. None of them natively track a test that runs across your newsletter, your LinkedIn ads, and your Instagram bio at the same time. That cross-channel job is where UTMs are not just cheaper, they are the only option.
Honest limitation: UTMs give you directional numbers, not statistical proof. A dedicated tool runs the significance math and guards against calling a winner too early. If you are making a high-stakes decision (repricing, a homepage rebuild), pair UTM measurement with a real experimentation platform. I explain the significance trap two sections down.
How do you run a multi-channel A/B test with UTMs?
Keep the test-id and variant identical across every channel, and let utm_source and utm_medium change. That way GA4 can answer both “which variant won overall” and “which variant won on email specifically.”
Say you are testing two value propositions for a Q3 launch: “save 5 hours a week” (variant_a) versus “cut reporting errors” (variant_b). You are running it on email, LinkedIn ads, and an Instagram bio link at once. This is the scenario no page-testing tool covers, because the test lives across three platforms.
Tag every link so the variant stays constant while the channel varies:
| Channel | Example utm_content | utm_source / utm_medium |
|---|---|---|
| Email, version A | 2026q3_launch__variant_a | newsletter / email |
| Email, version B | 2026q3_launch__variant_b | newsletter / email |
| LinkedIn ad, version A | 2026q3_launch__variant_a | linkedin / paid_social |
| LinkedIn ad, version B | 2026q3_launch__variant_b | linkedin / paid_social |
| Instagram bio, version A | 2026q3_launch__variant_a | instagram / social |
Now in GA4 you can pivot two ways. Group by utm_content alone to see the global variant winner. Add utm_source as a second dimension to see whether variant_a won everywhere or only on email. That second view is gold, because messaging that wins on email often loses on paid social.
Generating a dozen consistently tagged variant links by hand is where typos creep in. I built the A/B test URL generator for exactly this: enter the base URL and variants once, get every tagged link with the schema locked. Or use the free UTM builder if you want to place each parameter yourself.
Honest limitation: a multi-channel test has uneven audiences. Your email list is warm, your paid social is cold. Variant_a winning on email and losing on ads may be an audience effect, not a creative one. Treat cross-channel results as separate mini-tests, not one clean experiment.
How do you read variant results in GA4 without fooling yourself?
Compare conversion rate and revenue per variant, not click counts, and only after you hit a pre-set sample size. Clicks tell you what got attention. Conversions tell you what actually worked.
For the click-through-a-report basics (Traffic acquisition, the “Session manual ad content” dimension), the utm_content guide walks the exact GA4 menu path. Here I want the full-funnel view, which lives in GA4 Explore.
Build a free-form Exploration: put Session manual ad content (your variant) as the row, and pull in conversions and total revenue as values. Now you see each variant’s real business result, not just traffic. If you tagged with the __ schema, you can split the test-id from the variant and filter to one experiment cleanly.

Now the part most guides skip: the statistics. Analytics-based A/B testing is dangerous precisely because the data updates live and tempts you to peek.
Peeking at results and stopping early can inflate your false-positive rate from 5% to as high as 30% (Convert.com / Stanford, 2024). Check the numbers ten times and stop when you like what you see, and your actual false-positive rate climbs to around 19%, meaning your “95% confident winner” is really about 81% reliable (Atticus Li, 2024). You will ship losing variants and celebrate them.
Two guardrails I enforce:
- Decide the sample size and end date before launch. Evaluate once, at the end. Do not call it on day two because variant_b is “clearly” ahead.
- Require a real gap. With UTM-only tracking, treat differences under a few percentage points as noise unless you have thousands of conversions per variant. This ties into your conversion rate baseline: a lift only matters relative to your normal CVR.
Google’s own campaign tagging documentation covers how these values map into GA4 dimensions if you hit reporting oddities.
Honest limitation: GA4 attribution is session and model based. A user who clicks variant_a on mobile and converts later on desktop may not attribute cleanly. UTM-based variant tracking is directional evidence, not courtroom proof. For causation you need a proper experimentation tool with holdout groups.
Will A/B test variant URLs hurt your SEO?
Only if you let search engines index the parameterized variant URLs as separate pages. UTM parameters do not change your content, but they do create URL variations, and Google can treat ? utm_content=variant_a and ? utm_content=variant_b as duplicate pages if you are careless.
Three protections, in order of importance:
- Canonical tags. Every variant URL should carry a
rel=canonicalpointing to the clean, parameter-free version. This is standard on most CMS platforms and tells Google which URL to index. - Redirect-based tests use temporary redirects. If your test physically redirects users to different pages, use a 302 (temporary), never a 301 (permanent). A 301 tells Google the move is permanent and can shift ranking signals to the variant.
- Do not put variant URLs in sitemaps or internal links. Keep tagged links for campaigns and tests only, not site navigation.
Honest limitation: canonical tags are a strong hint, not a command. Google usually respects them, but for large-scale tests on high-traffic pages, monitor Search Console coverage to confirm the parameterized URLs are not getting indexed. If they are, add explicit parameter handling.

A/B testing UTM tracking: frequently asked questions
Which UTM parameter should I use for A/B test variants?
Use utm_content. It is designed to separate otherwise-identical links, which is exactly what two variants are: same destination and campaign, different version. Reserve utm_term for paid search keywords, not creative variants.
What should I name my A/B test variants in UTMs?
Use a fixed vocabulary (control, variant_a, variant_b) with a dated test-id prefix, like 2026q3_pricing__variant_a. Keep it lowercase with no spaces. The version’s real meaning belongs in your test doc, not the UTM value.
Do I still need UTMs if my A/B testing tool already tracks conversions?
Yes, if you care about downstream results your tool cannot see. Dedicated tools measure their own on-page goal, but UTMs let GA4 attribute revenue, assisted conversions, and multi-session journeys to each variant. They answer different questions and work well together.
Can I A/B test across multiple channels with UTM parameters?
Yes, and this is where UTMs beat page-testing tools. Keep the test-id and variant identical across email, ads, and social while letting utm_source and utm_medium change. Then GA4 can show both the global winner and the per-channel winner.
How do I see which variant won in GA4?
Build a free-form Exploration with “Session manual ad content” as the row and conversions plus revenue as values. Compare conversion rate and revenue per variant, not raw clicks. The utm_content guide covers the simpler Traffic acquisition lookup if you only need clicks.
Do A/B test variant URLs create duplicate content or hurt SEO?
Not if you use canonical tags pointing to the clean URL and keep variant links out of your sitemap. For redirect-based tests, use a temporary 302 redirect, never a permanent 301. Monitor Search Console to confirm parameterized URLs stay unindexed.
How much traffic do I need before trusting the winning variant?
Enough to reach a sample size you set before launch, evaluated once at the end. Peeking and stopping early can push your false-positive rate from 5% to as high as 30% (Convert.com, 2024). With UTM-only data, treat sub-few-percent gaps as noise unless you have thousands of conversions per variant.
Is UTM-based A/B testing the same as statistical A/B testing?
No. UTM tracking gives directional evidence about which variant performed better in your analytics. It does not run significance math or guarantee causation the way a dedicated experimentation platform with holdout groups does. Use UTMs for fast learning and a real tool for high-stakes decisions.
Turn every test into a lesson you can actually read
Look, the test itself is the easy part. Splitting a button color or a subject line takes minutes. The hard part is making sure that six weeks later you can point at a GA4 row and say “variant_b earned 22% more revenue, ship it.” That only happens if the variant was tagged from the first click.
Here is what to lock in:
- utm_content carries the variant, using a fixed vocabulary and a dated test-id.
- Keep the variant identical across channels so GA4 shows both the global and per-channel winner.
- Judge on conversions and revenue, at a pre-set sample size, never on early clicks.
- Protect SEO with canonicals and 302 redirects on variant URLs.
- Reach for a dedicated tool when you need on-page splitting or real statistical significance, and let UTMs handle the cross-channel measurement.
With 54% of companies now at strategic experimentation maturity, up from 35% in 2021 (Convert.com, 2025), the teams that win are not the ones running more tests. They are the ones who never lose a result.
Ready to tag your next test cleanly? Use the A/B test URL generator to build every variant link with the schema locked, then save it as a UTM template so your whole team tracks the same way. No typos. No lost variants. Just clean data that tells you exactly what won.