Skip to content

How to name UTM campaigns, step by step

Write one pattern, then make every platform produce it. Name campaigns that way in Meta, Google Ads and TikTok, set Klaviyo's UTM defaults and mirror the name in Shopify. Add a stable utm_id, then check GA4's Session campaign list for stray spellings after launch.

By , Founder & CEOUpdated 8 min read

Run the numbers for your store: the free UTM builder.

To name UTM campaigns, usually write one pattern first, then make each platform produce it. Name campaigns that way inside Meta, Google Ads and TikTok, set Klaviyo's defaults once and tag the rest by hand. Add a stable ID in utm_id. If GA4 then shows two spellings of one push, fix the link, not the report.

Most naming slips happen inside the ad platforms, not in a spreadsheet. So these steps follow one name from your sheet to every screen that types it. The reasons behind each rule are in the plain answer.

Step by step

  1. Pull the names you already have. In GA4, select Reports, then Acquisition > Traffic acquisition. Switch the dimension drop-down to Session campaign and copy last quarter's list into your naming sheet. Path: Reports > Acquisition > Traffic acquisition > Session campaign.
  2. Fix the slots and their order. Decide what a name says and in which order, for example offer, then audience, then year. List the allowed words for each slot, so nobody invents a new audience word at launch. Where: one shared naming sheet.
  3. Set the character rules. Lowercase only, words joined by underscores, no spaces and no # sign. Google calls lowercase standard practice, Meta's help shows spaces arriving as %20, and TikTok's help says everything after a # is dropped. Path: Analytics Help > URL builders > UTM best practices.
  4. Screen each name against GA4's channel rules. Keep cross-network out of every name, and keep shop and shopping out unless the campaign really is Shopping. GA4 reads those words in the campaign name and can file the visit under Cross-network, Paid Shopping or Organic Shopping. Path: Analytics Help > Default channel group > Channels for manual traffic.
  5. Give each campaign an ID in utm_id. Use the ad platform's own campaign ID where one exists. GA4's cost import lists Campaign ID as optional, but highly recommended, and an ID does not change when someone renames a campaign. Path: GA4 Admin > Data collection and modification > Data import > Create import source.
  6. Name Meta campaigns in the pattern before you publish. Then pass the names through with utm_campaign={{campaign.name}}&utm_id={{campaign.id}}, next to your fixed source and medium. Meta keeps the name the ad had at first publish, so a later rename never reaches GA4. Path: Ads Manager > ad setup > Tracking > URL parameters > Apply.
  7. Let TikTok fill in names, then check the capitals. Auto-attach fills in the source, medium, campaign ID and campaign name for you. It writes TikTok and Paid with capitals, and GA4 reports them apart from lowercase tiktok and paid. Google says parameter values are case sensitive. Path: TikTok Ads Manager > Ad details > Destination URL > Edit > Auto-attach.
  8. Set Klaviyo's defaults once. Click your account name, then Settings, then Other > UTM tracking, and choose the Campaign Value and Flow Value for utm_campaign. If you pick a value built from the campaign name, name Klaviyo campaigns in your pattern too. Path: account name > Settings > Other > UTM tracking > Save.
  9. Name Google Ads campaigns in the pattern too. With auto-tagging on, GA4 uses the auto-tagged values. So the name typed in Google Ads is the one your reports show. Check the setting before you rely on it. Path: Google Ads > Admin > Account settings > Auto-tagging.
  10. Mirror the name in Shopify. Create a campaign with the same name, then add an auto-match rule for its utm_campaign value. Shopify's example rule is an exact pair, utm_campaign = "elle" AND utm_source = "facebook", so a stray spelling slips past it. Path: Shopify admin > Growth > Campaigns > Create campaign > Auto-match rule.
  11. Check the result after launch. Search the Session campaign list for each new name. Then open the paths report and switch its table to Campaign, where each name should appear once. Path: Reports > Acquisition > Traffic acquisition, then Advertising > Key event attribution paths.

A worked example

For illustration, say you plan a Black Friday push on Meta, TikTok, Google Ads and Klaviyo. The sheet holds one pattern: offer, then audience, then year.

Where the name is typedNameHow it reaches GA4
Meta campaignblack_friday_prospecting_2026{{campaign.name}} in the URL parameters
TikTok campaignblack_friday_prospecting_2026Auto-attach
Google Ads campaignblack_friday_search_2026Auto-tagging
Klaviyo campaignblack_friday_vip_2026The Campaign Value in UTM tracking

Now the messy version of the same week. Someone types BlackFriday into the Klaviyo campaign. The Meta campaign goes live as Black Friday Prospecting and gets renamed an hour later. A creator link says black-friday.

GA4 then shows at least three spellings for one push. The Meta row keeps its first name, capitals and spaces included, because the name froze at publish. If you import costs, a row whose name or ID differs from your cost file sits apart from its cost. The validation report flags that row as No campaign data.

Stray spellings cost most where most revenue sits. On one store's Journeys sheet, journeys with 1 touch hold 79.5% of revenue and took 0.5 days to buy. In a one-touch journey the single campaign name takes all the credit. A stray spelling there moves the whole sale into a row of its own.

So rerun the last step a week after launch. Pass: one row per name, each with a campaign ID. Fail: a second spelling appears, so fix the link or the platform name for new clicks and note the date in your sheet.

What to check when the report looks wrong

  • One push shows as two rows. The spellings differ in capitals or separators, and GA4 counts them as different names. Fix the links that send the odd one and note the date, since earlier rows keep the old spelling.
  • A Meta campaign shows its old name. That is by design. To change the value, Meta's help says you need to create and publish a new campaign, ad set or ad.
  • Your Google Ads campaign ignores your utm_campaign. That is expected with auto-tagging on. Rename the campaign inside Google Ads instead.
  • A push lands in Paid Shopping, Organic Shopping or Cross-network. Its name contains shopping, cross-network or shop in a spot GA4's pattern catches. Rename the next push.
  • The campaign reads (not set). The link carried some UTM parameters but not utm_campaign. Google's help says missing UTM parameters result in (not set) values.
  • A row called (other) appears. The table holds more distinct values than its row limit. Google treats any dimension with more than 500 values as high-cardinality, so move per-ad detail into utm_content.
  • Imported costs never meet their campaigns. In Reports, open the Campaign data import validation report under Data Import. A row marked No campaign data never joined, so compare that link with your cost file.

What to do this week

  1. Check what Meta will send next week. In Ads Manager, open a draft or scheduled ad and read the URL parameters field below Tracking. Pass: it uses {{campaign.name}} and {{campaign.id}}, and the campaign name fits the pattern. Fail: hand-typed values or a stray name, so fix both before you publish.
  2. Set Klaviyo's utm_campaign default. Go to Settings > Other > UTM tracking and read the Campaign Value for utm_campaign. Pass: it produces names in your pattern. Fail: it produces something else, so change it before the next send, because sent messages can't be edited.
  3. Run the GA4 check after the next launch. In Traffic acquisition, set the table to Session campaign and search for the new name. Pass: one row, with an ID once you add Session campaign ID. Fail: two spellings or (not set), so trace the link that sent it.

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); Import campaign data (Google); Campaign data import validation report (Google); About the (other) row (Google); Traffic acquisition report (Google); Key events attribution paths report (Google); Traffic-source dimensions, manual tagging, and auto-tagging (Google); About auto-tagging (Google); Specifications for dynamic URL parameters in Meta Ads Manager (Meta); Add URL parameters to your Meta ads in Meta Ads Manager (Meta); How to add URL parameters to your website URL in TikTok Ads Manager (TikTok); Best practices when adding UTM parameters (TikTok); Understanding UTM tracking in Klaviyo (Klaviyo); How to add UTM tracking to campaigns and flows (Klaviyo); Understanding Campaigns (Shopify); Creating campaigns (Shopify)

Frequently asked questions

  • Should the year go at the start or the end of a campaign name?
    Either works if you never switch. Offer first keeps each push together when you sort the list, and a year at the end keeps black_friday_2026 apart from next year's push. Write the order into your naming sheet so nobody improvises.
  • Can I fix old campaign names in GA4 after the fact?
    Not the old rows themselves. Map old spellings to the new name in an exported sheet, and fix the links so new visits arrive clean. If stray names also put visits in the wrong channel, a custom channel group can regroup them by campaign name. Google says such groups apply to reports retroactively.
  • Do UTM campaign names have to match the ad platform's campaign name?
    For paid ads, ideally yes. Google's cost import guide recommends dynamic values, so GA4's names match the ad platform exactly. If you import costs, a name that differs between the platform and your links leaves the cost and the visits in separate rows.

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.