UTM Naming Conventions: The LOCK Method for Clean Campaign Data

Banner

It is Monday morning and you open GA4 to see how last week's promotion did. Facebook shows up three times: "facebook," "Facebook" and "fb."

Your newsletter clicks are nowhere under Email. A channel called "Unassigned" sits in third place, and nobody can say what is in it.

Nothing is broken. Your links were tagged by different people, on different days, with different habits. The fix is a naming convention, and it takes an afternoon.

What do messy UTM tags cost you?

UTM parameters are the labels you add to a link so analytics knows where a visit came from. GA4 reads them exactly as typed.

Google's URL builder documentation states that parameter values are case sensitive. "google" and "Google" are two different sources, so they become two rows in your report.

The bigger problem is channel grouping. GA4 sorts traffic into channels using fixed rules that Google publishes and you cannot edit. A medium that matches no rule lands in Unassigned.

So a made-up medium like "newsletter" or "promo" quietly removes traffic from the channel it belongs to. Your email looks weaker than it is, and budget decisions follow the wrong number. It is the same blind spot behind traffic that grows while sales stay flat.

The LOCK method

LOCK is four rules. Each one removes a specific way that links go wrong.

  • Lowercase everything, with one separator style.
  • One name per platform for every source.
  • Controlled medium list that GA4 already recognizes.
  • Keep a ledger of every tagged link.
Diagram of the LOCK method for UTM naming: lowercase, one name per platform, controlled mediums, keep a ledgerThe LOCK method for UTM namingLLowercaseEvery value lowercase, oneseparator style. Example:fall-saleOOne nameOne source value perplatform. Example:facebook, never fbCControlledOnly mediums GA4recognizes. Example:email, paid_socialKKeep a ledgerBuild and log every linkin one shared sheet.

Lowercase everything

Every value is lowercase, with hyphens or underscores instead of spaces. No exceptions for brand names or campaign titles.

Google's own best practice is to use lowercase as standard. Pick hyphens or underscores once and never mix them.

One name per platform

Each platform gets exactly one source value. Facebook is "facebook." It is never "fb," "meta" or "facebook.com."

Write the approved list down. If a platform is not on the list, add it before anyone builds a link.

Controlled medium list

This is the rule that matters most. Your medium must be a value GA4's channel rules already recognize.

Do not invent mediums. Use the ones in the table below and GA4 will sort your traffic correctly without any custom setup.

Traffic typeUse this utm_mediumCommon mistakeWhere the mistake lands
Email newsletteremailnewsletterUnassigned
Paid social adpaid_socialsocialOrganic Social
Organic social postsocialpostOrganic Social for listed social sites, Unassigned for others
Paid search ad (non-Google)cpcsearchOrganic Search

The paid social row catches most teams. GA4 only counts a visit as Paid Social when the medium signals payment, such as "cpc," "ppc" or anything starting with "paid."

Tag a Facebook ad with the medium "social" and GA4 files it under Organic Social. Your paid results then inflate your organic numbers.

For Google Ads, leave auto-tagging on and skip manual UTMs. Auto-tagging passes more detail than a hand-built link can.

Keep a ledger

A ledger is one shared spreadsheet where every tagged link is built and recorded. Nobody types a UTM by hand into an ad platform or email tool.

Give it these columns: date, owner, destination URL, source, medium, campaign, content and the final link. Make source and medium dropdowns so only approved values are possible.

Use one campaign pattern for everything, such as year-month_offer_audience. "2026-10_fall-sale_past-customers" still tells you what it was a year later. Here is what a few rows look like, using sample data.

DateOwnerutm_sourceutm_mediumutm_campaignutm_content
2026-10-01Danafacebookpaid_social2026-10_fall-sale_past-customersvideo-a
2026-10-03Samnewsletter-listemail2026-10_fall-sale_subscribersheader-button
2026-10-05Alexinstagramsocial2026-10_booking_followersbio-link
2026-10-07Sambingcpc2026-10_guide_new-visitorsad-1

How to roll it out in one afternoon

Work through these five steps in order. Most small teams finish them in a single afternoon.

1. Export your current data. Pull the source/medium report from GA4 for the last 90 days.

2. Mark the problems. Highlight every duplicate source and every medium that is not in the table above.

3. Write the approved lists. Put your approved sources and mediums on one page.

4. Build the ledger. Add dropdowns for source and medium so nobody can type a new value.

5. Replace live links. Update the links in anything still running: active ads, email templates, social bios and QR codes.

Old data stays messy, and that is fine. Note the cleanup date in your reports and compare like with like from that day forward.

Frequently asked questions

Which UTM parameters do I actually need?

Source, medium and campaign on every link. Google's documentation says to always use those three. Add content when you are testing more than one ad or button.

Should I put UTMs on links inside my own website?

No. A UTM on an internal link overwrites the visitor's original source. The visit that came from your ad then looks like it came from your homepage banner.

Does capitalization really split my reports?

Yes. GA4 treats "Email" and "email" as separate values in source and medium reports. Channel grouping ignores case, but your detailed reports do not.

Can I fix UTMs on traffic that has already been recorded?

No. GA4 does not let you edit collected data. Fix the links, mark the date and report forward from there.

Do I need a paid tool to manage UTM links?

No. A shared spreadsheet with dropdowns does the job for a small team. Move to a dedicated tool only when several people build links every day.

Monday, four weeks later

You open GA4 again. Facebook is one row, your newsletter sits under Email, and paid social is separate from organic.

Unassigned has dropped to a sliver you can explain. The report now answers the question you opened it to ask: which channel earned its budget last week.

Your next step: export your GA4 source/medium report today and count how many rows are duplicates. That number is your case for building the ledger.