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.
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.
LOCK is four rules. Each one removes a specific way that links go wrong.
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.
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.
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 type | Use this utm_medium | Common mistake | Where the mistake lands |
|---|---|---|---|
| Email newsletter | newsletter | Unassigned | |
| Paid social ad | paid_social | social | Organic Social |
| Organic social post | social | post | Organic Social for listed social sites, Unassigned for others |
| Paid search ad (non-Google) | cpc | search | Organic 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.
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.
| Date | Owner | utm_source | utm_medium | utm_campaign | utm_content |
|---|---|---|---|---|---|
| 2026-10-01 | Dana | paid_social | 2026-10_fall-sale_past-customers | video-a | |
| 2026-10-03 | Sam | newsletter-list | 2026-10_fall-sale_subscribers | header-button | |
| 2026-10-05 | Alex | social | 2026-10_booking_followers | bio-link | |
| 2026-10-07 | Sam | bing | cpc | 2026-10_guide_new-visitors | ad-1 |
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.
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.
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.
Yes. GA4 treats "Email" and "email" as separate values in source and medium reports. Channel grouping ignores case, but your detailed reports do not.
No. GA4 does not let you edit collected data. Fix the links, mark the date and report forward from there.
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.
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.