UTM Templates for Email, Paid Social, and Affiliate Campaigns

Bhargav Dhameliya
Bhargav Dhameliya
September 2, 2026
5 min read
utm templates email paid social affiliate featured

How many times has someone on your team built a campaign link from memory at 6pm on a Friday?

I ask because that is the moment your GA4 data breaks. Not during the strategy meeting. Not during the naming convention workshop. At 6pm, when the person shipping the link cannot remember whether your team writes paid-social or paidsocial, and picks one.

UTM templates fix that specific moment. A template is the decision made in advance, so nobody has to make it again under pressure.

I run linkutm, and I have watched hundreds of teams try to solve this with a shared document. Documents lose. What wins is a small set of pre-built UTM templates, one per campaign type, where most of the fields are already filled in and only one or two are left for a human to type.

This article gives you pre-built UTM templates for the three channels that break most often: email, paid social, and affiliate. You will get the parameter sets, the filled examples, and the field-by-field logic for why each one is built that way.

What Is a UTM Template?

A UTM template is a reusable set of UTM parameters where the values that never change are locked in advance and only campaign-specific values are left blank. It turns link building from a memory exercise into a fill-in-the-blank task.

Here is the distinction that matters, because most teams confuse a naming convention with a UTM template:

Naming convention UTM template
Job Governs how a value is written Governs which fields are already decided
Example rule Lowercase, hyphens, no spaces utm_medium is always email for this campaign type
Lives as A document An object you build links from
Fails when Nobody reads it Nobody uses the builder

You need both. The convention is the grammar. The template is the sentence with most of the words already written. I already published the 8 UTM naming rules and standard values my team uses, so I am not repeating the grammar here. This article is entirely about the sentences.

The honest limitation: a template only helps for campaigns you run repeatedly. For a genuine one-off, a template is overhead. I would not build one for a single conference you are sponsoring once.

The Three Field Types Every UTM Template Needs

Stop thinking about a template as a string. Think about it as three kinds of field, because each kind fails differently.

Field type Who fills it Example Failure mode
Locked Nobody, it is fixed utm_medium=email Someone edits it anyway and lands in Unassigned
Variable A human, per campaign utm_campaign=black-friday-202611 Typos, invented formats, missing dates
Macro-filled The ad platform or ESP utm_content={{ad.name}} Silently resolves to nothing if unsupported

Every UTM template you build is some mix of these three. Locked fields are the ones that decide your reporting structure. utm_medium is always locked, without exception. That single field determines which GA4 default channel group a visit lands in, so leaving it open to interpretation is how teams end up with paid social traffic sitting in the Unassigned row.

Variable fields are where humans add meaning. utm_campaign is nearly always variable. Keep the count of variable fields low. Every free field you add is another chance for two people to describe the same campaign differently.

Macro-filled fields are the upgrade most teams miss. A dynamic URL macro is a placeholder the ad platform swaps for a real value when the ad serves. A merge tag does the same job inside an email platform. Both remove a human from the loop, which is exactly where you want them removed.

Here is my rule after building this for a lot of teams: locked fields should outnumber variable fields at least two to one. If a template has four blanks, it is not a template. It is a form.

UTM template field types: locked utm_source and utm_medium, variable utm_campaign, and macro-filled utm_content

Email UTM Templates

Email UTM templates should lock utm_medium=email and vary utm_source by the type of send, not by the tool you send from.

This is the single most common email tagging mistake I see. Teams set utm_source=klaviyo or utm_source=mailchimp across every send. Now every newsletter, every abandoned cart flow, and every password reset shares one source value, and you can never separate them in a report. The tool is not the source. The list or program is.

Newsletter and broadcast campaigns

utm_source=newsletter
utm_medium=email
utm_campaign=[campaign]-[YYYYMM]
utm_content=[link-position]

Filled example:

https://linkutm.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=pricing-update-202609&utm_content=header-cta

Automated flows and drip sequences

Flows need one extra thing that broadcasts do not: the position in the sequence. Without it, a five-email welcome series reports as a single blob.

utm_source=lifecycle
utm_medium=email
utm_campaign=[flow-name]
utm_content=[step-number]-[cta]

Filled example:

https://linkutm.com/signup?utm_source=lifecycle&utm_medium=email&utm_campaign=welcome-series&utm_content=step-3-demo-cta

Note that the flow template drops the date from utm_campaign. That is deliberate. A broadcast happens once, so it needs a date stamp. A flow runs continuously for months, so a date would fragment it into meaningless slices.

Transactional email

Tag these, but tag them differently. Transactional messages are triggered by the user, not by marketing, and mixing them into campaign reporting inflates your email numbers.

utm_source=transactional
utm_medium=email
utm_campaign=[trigger-name]

Re-engagement and win-back

utm_source=winback
utm_medium=email
utm_campaign=[segment]-[YYYYMM]
utm_content=[offer-type]

Most email platforms will fill the variable fields for you with merge tags. Klaviyo, Mailchimp, and HubSpot all expose the campaign or flow name as a variable you can drop into the URL, which means utm_campaign stops being a typing job. If you are setting up email tagging from scratch, I walked through the full mechanics in how to track email campaigns with UTM.

The trade-off with email templates: they cannot survive a forward. If a subscriber forwards your newsletter to a colleague who clicks, GA4 still credits newsletter / email. There is no template fix for that. Accept the small inflation and move on.

Email UTM template comparison across newsletter, automated flow, transactional, and win-back campaign types

A paid social UTM template locks the medium, then lets the ad platform fill almost everything else with macros. This is the channel where templates pay off hardest, because a single campaign can generate hundreds of ad variations that no human should be tagging by hand.

Meta supports a set of dynamic URL macros that resolve when the ad serves. These are the ones worth putting in a UTM template:

  • {{site_source_name}} returns the placement network (fb, ig, an, msg)
  • {{campaign.name}} and {{campaign.id}}
  • {{adset.name}} and {{adset.id}}
  • {{ad.name}} and {{ad.id}}
  • {{placement}}

Prospecting campaigns

utm_source={{site_source_name}}
utm_medium=paid-social
utm_campaign={{campaign.name}}
utm_content={{ad.name}}
utm_id={{campaign.id}}

Retargeting campaigns

Same skeleton, one deliberate change. I hard-code the audience type into the campaign field rather than relying on the campaign name, because campaign names drift and audience type is the thing I actually segment reports by.

utm_source={{site_source_name}}
utm_medium=paid-social
utm_campaign=retargeting-{{campaign.name}}
utm_content={{ad.name}}
utm_id={{campaign.id}}

Creator and whitelisted ads

When an ad runs from a creator’s handle, the creator is the thing you are measuring. Put them in utm_content so partner performance survives even when the campaign name changes.

utm_source={{site_source_name}}
utm_medium=paid-social
utm_campaign=[creator-program]-[YYYYMM]
utm_content=[creator-handle]-{{ad.name}}

Catalog and dynamic product ads

utm_source={{site_source_name}}
utm_medium=paid-social
utm_campaign=catalog-[feed-name]
utm_content={{ad.id}}

Use {{ad.id}} rather than {{ad.name}} here. Catalog ads generate names automatically from product data, and those names are long, inconsistent, and terrible in a report.

The gotcha that costs teams a quarter of data: name-based macros resolve at publish time. If you rename a campaign in Ads Manager next month, the URL keeps sending the old name. ID-based macros do not have this problem, because IDs never change. This is why utm_id={{campaign.id}} belongs in every paid template. It is the one value that survives a rename and gives you a stable key to join click data against ad spend.

I go deeper into Meta’s macro behaviour, the Pixel and CAPI relationship, and why Ads Manager and GA4 never agree in my Facebook ad tracking setup guide. For this article, the template is the point.

One limitation worth stating: macros are platform-specific. LinkedIn, TikTok, and X each use their own syntax, and a Meta macro pasted into LinkedIn resolves to literal text in your URL. Build one template per platform. Do not try to write a universal paid social template. I have tried. It does not exist.

Meta UTM macro resolution showing campaign name macros freezing at publish while campaign ID macros stay stable

Affiliate and Partner UTM Templates

For affiliate campaigns, the hard decision is not the template. It is whether the medium should be affiliate or referral, because that one choice sends the traffic to two completely different GA4 channels.

Here is how I decide:

Partner type utm_medium Why
Commission-based affiliate affiliate Money changes hands per conversion. Report it against payouts.
Coupon and deal site affiliate Same commercial relationship, usually last-click
Content or review partner referral Earned or paid placement, no per-sale commission
Creator with a fixed fee referral Flat-fee partnership, not performance-based

Use affiliate when there is a commission. Use referral when there is not. Both are values GA4 matches against its channel rules, so this is not a cosmetic choice. Mixing them means your Affiliates channel in GA4 no longer maps to anything on your payout report, and reconciling those two numbers at the end of a quarter is genuinely painful.

Affiliate network partners

utm_source=[partner-slug]
utm_medium=affiliate
utm_campaign=[program]-[YYYYQ]
utm_content=[placement]

Filled example:

https://linkutm.com/pricing?utm_source=techblog-reviews&utm_medium=affiliate&utm_campaign=saas-program-2026q3&utm_content=comparison-table

The critical field here is utm_source. One partner, one source value, forever. Not the network. If you set utm_source=impact or utm_source=shareasale, every partner in that network collapses into one row and you lose the ability to see which partner actually earns their commission.

Coupon and deal sites

utm_source=[site-slug]
utm_medium=affiliate
utm_campaign=coupon-[offer-code]
utm_content=[page-type]

Content and review partners

utm_source=[publication-slug]
utm_medium=referral
utm_campaign=[placement-name]-[YYYYMM]
utm_content=[article-slug]

Creator partnerships on a flat fee

utm_source=[creator-handle]
utm_medium=referral
utm_campaign=[program]-[YYYYMM]
utm_content=[content-format]

Most affiliate networks add their own SubID parameter to the link on top of your UTMs. A SubID is a tracking value the network appends so it can attribute the conversion on its side. It does not interfere with your UTM parameters, and you should not try to replace it. The two systems run in parallel, and the network’s numbers are what you get paid on. I covered how that plumbing actually works in affiliate link tracking software.

The limitation with affiliate templates: you often do not control the final link. Partners edit URLs, strip parameters, or route through their own redirects. I have seen a partner drop every UTM parameter and still send traffic. Build the template, hand it over, then verify a live click before the campaign scales.

Decision tree for choosing utm_medium affiliate or referral based on whether a partner earns a per-sale commission

How to Turn a Template Into an Enforced Preset

A UTM template written in a document is a suggestion. The same template built into the tool people actually use is a rule. Here is the five-step process I use.

  1. Pick your campaign types, not your channels. Most teams stop at “email” and “paid social”. Go one level deeper: newsletter, flow, prospecting, retargeting, affiliate, partner. Aim for six to ten types total.
  2. Write each template and mark every field. Label each one locked, variable, or macro-filled. If you cannot decide which a field is, the field probably should not be in the template.
  3. Replace every variable field you can with a macro. Check what your ad platform and ESP expose. Each field a machine fills is a field a human cannot mistype.
  4. Load them into your builder as saved presets. This is the step that makes the whole thing real. In linkutm, saved UTM templates appear as options at link creation, so the locked fields cannot be edited by whoever is shipping the link. Plan limits run from 3 templates on Free to 50 on Agency, which is more than most teams need.
  5. Verify one live link per template before scaling. Click it. Check the GA4 realtime report. Confirm the channel is what you expected. Do this once per template, not once per link.

Step five is the one everybody skips. It takes four minutes and it is the only step that proves the other four worked.

Five-step workflow turning a UTM template into an enforced preset, ending with a GA4 realtime verification check

Where UTM Templates Break

Templates are not magic, and I would rather you know the failure modes before you build ten of them.

They multiply if you let them. One UTM template per campaign type is useful. One per campaign is a spreadsheet with extra steps. If your template count is climbing past fifteen, your campaign types are too granular.

They do not fix cardinality. A template makes values consistent, but consistent values still pile up. Once a GA4 report exceeds its row limit, low-volume campaigns collapse into an (other) bucket regardless of how clean your tagging is.

They cannot enforce anything outside your tooling. An agency, a partner, or a freelancer building links in their own system will not use your preset. For those people, a template is back to being a document, and the only real control you have is checking their links before launch.

Macros fail silently. If a platform does not support a macro you used, it does not error. It just passes the literal text through, and you end up with utm_content={{ad.name}} sitting in your GA4 report. Verify per platform.

They freeze bad decisions. A template makes a choice permanent and repeatable, including a wrong one. If you lock utm_medium=social for paid ads, you will get consistently wrong channel attribution across every campaign. Review your templates once a quarter.

Frequently Asked Questions

What is a UTM template?

A UTM template is a reusable set of UTM parameters where the values that never change are fixed in advance and only campaign-specific values are left to fill in. It exists so nobody builds a campaign link from memory. Most templates lock utm_source and utm_medium, leave utm_campaign variable, and let a platform macro fill utm_content automatically.

What UTM template should I use for email campaigns?

Lock utm_medium=email, set utm_source to the program rather than the tool, and include the send date in utm_campaign for broadcasts. A newsletter link looks like utm_source=newsletter&utm_medium=email&utm_campaign=pricing-update-202609&utm_content=header-cta. Automated flows use a different source such as lifecycle and drop the date, because a flow runs continuously and a date would split it into meaningless pieces.

Should utm_medium be “affiliate” or “referral” for partner links?

Use affiliate when the partner earns a commission per sale, and referral when they do not. GA4 routes those two values into separate channels, Affiliates and Referral, so the choice decides whether your channel report lines up with your payout report. Flat-fee creators and content partners belong in referral. Commission-based partners and coupon sites belong in affiliate.

Do Meta’s dynamic UTM macros update if I rename a campaign?

No. Name-based macros such as {{campaign.name}} resolve when the ad is published, and renaming the campaign later does not change the value flowing into your URLs. ID-based macros like {{campaign.id}} are stable because IDs never change. This is why I put utm_id={{campaign.id}} in every paid social template, so there is always one value that survives a rename.

How many UTM templates does a team actually need?

Six to ten for most teams. Build one per campaign type rather than one per channel, so email splits into newsletter and flow, and paid social splits into prospecting and retargeting. If you climb past fifteen templates, your types have become too granular and you are recreating a spreadsheet.

Can I use the same UTM template across every channel?

No, and trying is the most common reason template systems collapse. Each channel needs a different locked medium, and each ad platform uses its own macro syntax, so a Meta macro pasted into a LinkedIn campaign passes through as literal text. Build one template per platform per campaign type and accept the small duplication.

Start With Three Templates, Not Thirty

The teams that get UTM templates right do not start with a complete system. They start with three UTM templates for the three campaign types they run most often, usually newsletter, paid social prospecting, and affiliate.

Here is your next step. Open your last month of campaign links. Find the three campaign types that appear most, write a template for each using the field-type model above, and load them into whatever tool your team builds links in. That is a thirty-minute job and it will do more for your GA4 data than another naming convention document.

Then verify one live link per template. Four minutes. Skip it and you will find out in six weeks that something was wrong the whole time.

Build your first template with the free UTM builder at linkutm, or check the parameter syntax against Google’s Campaign URL Builder if you want to compare output.

Bhargav Dhameliya

About Bhargav Dhameliya

Share this article

Ready to track your campaigns better?

Join thousands of marketers who use linkutm to build, track, and manage their marketing campaigns with ease.

Get Started for Free