Orbit web apps
Orbit web apps
Tag links with a convention that still adds up a year later. Runs entirely in your browser.
The scheme is added for you. Existing utm_* on a pasted link are stripped, not stacked.
Where the click came from — the ESP, network or partner.
The channel. Keep this in a closed set you can group by.
The programme or send. Match your Braze naming convention.
Paid keyword. Leave empty on owned channels.
Which link or creative. Useful for link-position reporting.
Values lowercase and hyphenate as you type. GA4 compares utm_* values as case-sensitive strings — Summer-Sale and summer-sale are two campaigns in the same report, and nobody notices until the quarterly readout is short.
Why these conventions
One closed set of mediums, the sending system in source, and the programme name in campaign. That is what makes a channel report add up a year later, and it is the part teams skip because any tagged link works on the day it ships. UTM tracking for lifecycle email has the full convention, including what to do about internal links and Apple MPP.
Add a destination URL to build a tagged link.This session
Links you copy appear here. Click any to repopulate the form. Kept in this tab only — nothing is stored or sent anywhere.
UTM tagging is the rare piece of lifecycle work where the mistake and the consequence are separated by a quarter. Any tagged link works on the day it ships. The cost lands later, in a channel report where email appears four times under four spellings and nobody can say what the programme was worth.
The single decision that determines whether your reporting survives is which of the two dimensions you let grow. utm_medium should hold a handful of values — email, sms, push, paid-social, organic-social, referral — and never more, because medium is what channel groupings and executive reports slice by. utm_source is where the variety goes: the ESP, the network, the named partner.
Teams that invert this end up with a medium dimension containing four hundred values, at which point the channel report is a scroll rather than a summary. If you are standing up a convention from scratch, write the allowed medium list down first, in one line, and treat anything outside it as a bug.
GA4 compares utm_* values as case-sensitive strings. Summer-Sale and summer-sale are two campaigns. Nobody catches this at build time because both links work perfectly — they just report separately, and the split is invisible until someone sums a column and gets a number that is too small.
Spaces are worse, because they survive encoding inconsistently: a raw space becomes %20 through one client and + through another, so the same campaign fragments by email client. The builder above lowercases and hyphenates on every keystroke for exactly this reason. A value corrected while you type is corrected once; a value corrected at submit gets retyped forever.
A UTM on a link from your own site to your own site starts a fresh session in GA and overwrites the acquisition source with the one you just supplied. The user who arrived from a paid ad and then clicked your tagged homepage banner is now attributed to the banner. You have paid for the click and then quietly credited yourself for it.
This shows up most often in two places: on-site promotional banners, and in-app messages that link back into the product. Use an internal-promotion parameter your analytics is configured to ignore, or no parameter at all. The builder flags it when utm_source matches the destination host, or when the medium names a placement inside your own product.
utm_term is the paid-keyword slot. GA's paid-search reporting reads it; nothing else does. On an email send it adds a dimension nobody groups by, and it takes the place of the detail that would have been useful in utm_campaign.
utm_content is more forgiving — it is genuinely useful in email for link position (hero, body, footer) so you can see which placement earns the click. The discipline is the same as medium: keep the values in a closed set. utm_content is the field that most often quietly becomes free text, and a free-text dimension is a dimension you cannot group by.
The failure mode that produces messy data is not ignorance of the convention. It is that following the convention takes longer than not following it, at 4pm, with a send due. Every enforcement mechanism that relies on someone remembering a document loses to that.
What works is a builder open beside the campaign editor, one click to copy, and the convention pre-loaded as presets. What also works, at scale, is generating the link from your naming convention rather than typing it — if the campaign is already called winback_email_q3, utm_campaign should be derived from that string, not re-invented next to it.
Built into Orbit
Orbit's naming-convention and Braze tooling generates UTM values from the campaign name itself, so the tagging matches the asset name rather than being retyped beside it. Claude can apply a convention across an existing workspace and list the links that break it.
Sign up free