UTM parameters that survive the funnel
A short, opinionated UTM convention that keeps campaign data clean enough to group by, with the exact naming rules and the mistakes that break attribution.
Priya Natarajan
Founder at Beacon
UTM tags are the cheapest attribution you will ever get, and the easiest to ruin. Five people tagging links with five spellings produce five campaigns, and the report becomes unreadable within a quarter.
Use five parameters, in lower case, with hyphens
?utm_source=linkedin
&utm_medium=social
&utm_campaign=launch-pricing
&utm_content=carousel-2
&utm_term=analytics- utm_source: the platform, lowercase, no spaces — linkedin, google, newsletter.
- utm_medium: the type of traffic — social, cpc, email, referral, affiliate.
- utm_campaign: the initiative, not the date — launch-pricing, not q4_promo_v2.
- utm_content: which creative or variant, only when you actually A/B test.
- utm_term: the keyword, only for paid search.
The four mistakes that break attribution
- Capitalisation. LinkedIn and linkedin are different strings in every group-by. Lowercase everything at the source rather than fixing it in reports.
- Dates in the campaign name. launch-2026-11 is a campaign that will never repeat. Use the initiative and let the timestamp come from the event.
- UTMs on internal links. Tagging a link from your homepage to your pricing page starts a new session and invents a conversion path that does not exist.
- Missing landing page. If the campaign URL points at a redirect that drops the query string, the UTM never arrives. Test the full URL in a private window before you spend money on it.
Let the session do the work
A visitor rarely converts on the page they land on. They arrive on a campaign URL, then navigate to pricing, then to a form. If you only read UTMs at conversion time, you lose the campaign. If you only read them at landing, you lose the fact that they came back later.
Store the first touch when the session starts and keep updating the last touch on every navigation that carries new parameters. That gives you both answers from a single tag, with no extra work from whoever runs the campaigns.
// landing on /pricing?utm_source=linkedin&utm_medium=social
// ...then navigating to /
// ...then submitting a lead
// firstTouch.source = "linkedin"
// lastTouch.source = "linkedin"
// landing = "/pricing"
// lead.campaign = "launch-pricing"A naming template you can copy
Keep it boring and consistent: campaign is [initiative]-[audience], content is [format]-[variant], and medium always comes from your fixed list. Boring naming is what makes a year of data groupable instead of archaeological.
Then write the convention into the same document as your brand guidelines, and add it to the checklist for every campaign launch. Attribution problems are almost always naming problems in disguise.
See this working on your own site
One script tag, no cookies, no consent banner. Free up to 10,000 visits a month, and you can see which campaign produced each lead in the same dashboard.
Start free