What UTM parameters are
Five fields appended to a URL that tell an analytics tool where a visit came from. Nothing else reads them. They change no behaviour, affect no ranking, and every crawler ignores them.
Three of the five do the work: utm_source, utm_medium and utm_campaign. Leave any one out and GA4 files the visit under "unassigned", which is the row nobody can act on.
The mistake
GA4 matches these values as literal strings. Facebook and facebook are two different sources. Tag half your posts one way and half the other — which is what happens when two people write links, or when one person writes them across two weeks — and a single campaign arrives as two rows in every report you run afterwards.
And it cannot be repaired. The value is written onto the hit as it arrives, so it is history rather than configuration. There is no setting that merges them retroactively. You can fix the links going forward, and the split stays visible in the data at the boundary between the two.
Nobody notices at the time. It is discovered later, when the numbers are wanted for a decision.
Spaces, too
A space becomes %20 in the link and reads badly in a report. Hyphens or underscores, consistently — the convention matters less than picking one.
Source and medium are not interchangeable
The second most common mistake, and it makes every grouping in the report meaningless.
Medium answers how did they get here — email, cpc, social, referral, affiliate. It is a small closed set, and it is the field that groups campaigns together. Source answers from where: the specific newsletter, the specific site. Swap them and your report groups by newsletter name rather than by channel, which nobody wants and which is not obvious from the numbers.
Never tag an internal link
A visitor moving between your own pages through a UTM link starts a new session attributed to that campaign. The campaign is credited with traffic it did not bring, and the original source that did bring the visitor disappears from the record.
This is a surprisingly common accident: someone copies a tagged link out of a campaign and reuses it in the site's own navigation, or in a footer, or in an internal announcement.
Two details that bite
The fragment stays last. Parameters go before #section, never after. Anything following the hash is never sent to the server, so a link built the other way round tracks nothing at all — silently, and while looking correct.
These links are public. Whatever you write in a campaign name is visible in the address bar, in shared links, and in referrer headers on the next site the person visits. It is not the place for internal codenames or client names.
Building them
The UTM builder assembles the link and warns about the capital letter, the space, and the missing third parameter before the link goes anywhere. It places the parameters before the fragment rather than after it.
For the links already on a page — and whether their anchors say anything useful — the link analyser lists them with their rel values and flags the ones worth rewriting.