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 Joris van Huët, 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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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. - 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.
- 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.
- 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.
- 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.
- 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 typed | Name | How it reaches GA4 |
|---|---|---|
| Meta campaign | black_friday_prospecting_2026 | {{campaign.name}} in the URL parameters |
| TikTok campaign | black_friday_prospecting_2026 | Auto-attach |
| Google Ads campaign | black_friday_search_2026 | Auto-tagging |
| Klaviyo campaign | black_friday_vip_2026 | The 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
- 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. - 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.
- 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)
Related answers
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
- AnalyticsAnalytics is the systematic computational analysis of data. It reveals customer behavior and measures campaign performance.
- AttributionAttribution identifies user actions that contribute to a desired outcome and assigns value to each. It reveals which marketing touchpoints drive conversions.
- Black FridayBlack Friday is the day after Thanksgiving in the United States. It marks the start of the Christmas shopping season and is a major sales event for retailers.
- CausalityCausality is the relationship where one event directly causes another, essential for identifying specific actions that drive desired outcomes in marketing.
- Google AdsGoogle Ads is an online advertising platform where advertisers bid to display ads, service offerings, and product listings.
- RevenueRevenue is the total income generated by the sale of goods or services related to a company's primary operations.
- TikTok AdsTikTok Ads are advertisements on the TikTok platform. They allow brands to reach younger audiences through short-form video content.
- UTM ParametersUTM Parameters are URL tags marketers use to track campaign effectiveness across traffic sources. They provide data for accurate campaign tracking and attribution in analytics platforms.