Why UTMs and where they go#
UTM parameters are query-string tags appended to your campaign's outbound links — ?utm_source=newsletter&utm_medium=email&utm_campaign=spring_launch — that your analytics tool (Google Analytics, Plausible, Fathom, Matomo) reads to attribute traffic + conversions back to the email that drove them.
Without UTMs, every click from your email shows up as (direct) / (none) in analytics. With UTMs, you see "spring_launch newsletter drove 1,847 sessions and 312 conversions" — the kind of report you can defend in a quarterly review.
The good news: AcelleMail handles this for you at the campaign level. Set it once, every link gets tagged.
Set UTMs in the campaign builder#
1. Open campaign settings → URL parameters#
When you create or edit a campaign, the Tracking (or URL parameters) section in campaign settings has fields for the standard UTM keys:
- utm_source — where the click came from. For email: usually
newsletter or your brand name like acellemail.
- utm_medium — the channel. Almost always
email for AcelleMail-driven sends.
- utm_campaign — the specific campaign identifier —
spring_launch_2026, weekly_digest_w17, cart_abandonment_v3.
- utm_term (optional) — usually paid-search specific, sometimes used for segment-of-list identification.
- utm_content (optional) — variant identifier —
header_cta vs footer_cta to A/B test which link position pulls more.
A standard configuration:
utm_source: newsletter
utm_medium: email
utm_campaign: spring_launch_2026
Click Save. AcelleMail will append these to every link in the email automatically — you don't need to add ?utm_source=... to each individual <a href> in the body.
2. Verify in Preview#
Open the email Preview, hover over any link — the URL shown at the bottom of the screen will include the UTM query string. If you don't see it:
- Check that Tracking is enabled in the campaign settings (some installs default it off)
- The link is to your own domain (some setups skip UTM-tagging on external partner links)
- The URL doesn't already have query parameters that conflict (AcelleMail will append
&utm_source=... rather than overwrite)
Read the click report after sending#
Tracking log — per-click audit#
Campaign → Tracking log tab shows every action (open, click, bounce) with timestamp + subscriber:

For UTM verification, find a Click row → the destination URL stored is the original link (without UTMs) — AcelleMail tracks the click event server-side via the redirect, then forwards the user to the URL with UTMs appended.
Click log — link-level click breakdown#
The Click log tab focuses on click events specifically:

Links report — aggregated per-link totals#
The Links report rolls everything up — per-link click count + unique clickers:

This is the most useful view for content optimization: "Did our footer CTA outperform the header CTA?" → look at the per-link click count.
Click map — visualisation of where clicks went#
The Click map overlays click counts on the rendered email:

The heatmap tells you the same thing as the Links report, but visually — useful for layout decisions ("our main button is below the fold; almost all clicks come from the inline text link above").
Campaign overview — top-line metrics#
The campaign Overview tab shows the summary:

This is what you screenshot for stakeholder reports — open rate, click rate, unsubscribe rate, all aggregated.
How the UTMs show up in Google Analytics#
After the campaign sends and recipients click, your analytics tool (GA4 / Plausible / etc.) starts recording sessions with the source = newsletter / medium = email / campaign = spring_launch_2026.
In Google Analytics 4: Reports → Acquisition → Traffic Acquisition → filter by Session source / medium = newsletter / email.
In Plausible: filter by Source = newsletter directly on the dashboard.
The UTMs persist across page navigations within the session, so even if the recipient clicks your email → lands on /pricing → navigates to /signup → converts, the conversion is attributed back to the email.
Common UI signals + fixes#
| Symptom |
Likely cause |
UI fix |
| Click count on AcelleMail report doesn't match analytics-tool sessions |
UTM-tagged links going through redirect strip the UTMs at some hop |
Verify the destination URL in Preview hovers — should still have UTMs after AcelleMail's click-redirect |
| Multiple campaigns showing up as same source in analytics |
Same utm_campaign value used for both sends |
Use unique utm_campaign per send — include week or version number |
utm_source = (direct) in GA despite UTMs being set |
Analytics drops UTMs on HTTPS → HTTP redirects, OR JS-driven SPAs that don't read URL params |
Make sure your destination uses HTTPS end-to-end; if SPA, configure your analytics tool to read query string on every route change |
| Want to A/B test header vs footer CTA |
Use utm_content differently per variant — header_cta vs footer_cta |
But: AcelleMail's campaign-level setting applies one utm_content to all links; need link-level override (see Advanced) |
Common UTM conventions worth adopting#
| Field |
Recommended pattern |
Why |
utm_source |
One per-channel identifier, lowercase, hyphenated |
Stays consistent across years; "newsletter" works forever |
utm_medium |
Always email for AcelleMail sends |
Standard convention; analytics tools group it predictably |
utm_campaign |
{campaign_type}_{date_or_version}_{variant} |
cart_abandon_2026q2_a is parseable + sortable |
utm_content |
Variant identifier when A/B testing |
header_cta vs footer_cta; button_red vs button_green |
utm_term |
Only when running paid keyword tests in parallel |
Usually leave blank for organic email |
Advanced: per-link overrides, dynamic UTM via merge tags, integration patterns
When the campaign-level UTMs aren't granular enough — typically when you're A/B testing within a single send, or when you need per-recipient personalization in the UTM itself — drop to link-level overrides.
Per-link override in the email body:
Click any link in the AcelleMail builder → right panel → Tracking section. Toggle "Override campaign UTMs for this link". Set per-link values:
header CTA:
utm_source: newsletter
utm_medium: email
utm_campaign: spring_launch_2026
utm_content: header_cta
footer CTA:
utm_source: newsletter
utm_medium: email
utm_campaign: spring_launch_2026
utm_content: footer_cta
This gives you two click reports in your analytics tool, both attributed to spring_launch_2026, but you can break down which CTA pulled more.
Dynamic UTM via merge tag (per-recipient personalization):
Write the link directly in HTML mode with the merge tag in the URL:
<a href="https://example.com/upgrade?utm_source=newsletter&utm_medium=email&utm_campaign=spring_launch&utm_term={{ subscriber.signup_plan }}">
Upgrade your plan
</a>
Now utm_term = pro or enterprise per recipient. Useful for cohort analysis in GA4: "did the click-to-upgrade rate differ across plan tiers?"
Server-side click-to-conversion attribution:
If you're running your own backend (e.g. a Laravel app, a Next.js app), capture UTMs server-side at first request and persist them in the session or a cookie:
// Laravel middleware example
if ($request->has('utm_source')) {
session([
'first_touch' => [
'source' => $request->get('utm_source'),
'medium' => $request->get('utm_medium'),
'campaign' => $request->get('utm_campaign'),
'landed_at' => now(),
],
]);
}
Then attach to the conversion event when the user signs up or purchases. This sidesteps analytics-tool quirks (especially the GA4 referrer-detection limits) for your most important conversions.
Integration with Plausible / Fathom (privacy-friendly analytics):
Both read the standard UTM query-string params with no extra configuration. Filter the dashboard by Source = newsletter to see all email-driven traffic; further filter by Campaign = spring_launch_2026 for per-campaign attribution. No GA4 setup ceremony required.
AcelleMail API to populate UTM values dynamically per campaign:
If you create campaigns programmatically (e.g. from a marketing-automation backend), the campaign update endpoint accepts the UTM fields:
curl -X PATCH "https://acellemail.com/api/v1/campaigns/{campaign_uid}" \
-H "Authorization: Bearer $ACELLE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"track_open": true,
"track_click": true,
"url_tags": {
"utm_source": "newsletter",
"utm_medium": "email",
"utm_campaign": "weekly_digest_w17",
"utm_content": "auto_generated"
}
}'
Useful for: triggered campaigns where the campaign name encodes a date (weekly_digest_w17 → week 17), automated A/B variant naming, or syncing UTM conventions across many campaigns in bulk.
Disabling AcelleMail's click-redirect — by default, AcelleMail's tracker rewrites every link to a tracking redirect (e.g. https://acellemail.com/c/abc123/d/xyz) so it can count the click before forwarding. The UTMs survive the forward. If you need raw direct links (e.g. for a press release where the URL should be pristine), turn off click tracking per campaign: campaign settings → Tracking → uncheck Track click → UTMs are still appended, but no redirect hop.
Related articles#