When we put a link in a newsletter, build an ad, or hand a banner to a partner, we append campaign parameters — ?utm_source=newsletter and friends. They mark how someone arrived, and without them traffic analysis is close to impossible.
Those markers carry one side effect: to search engines and analytics tools they are not annotations, they are part of the address. Two problems follow from that single fact, and because the cause is shared, so is the fix.
Problem 1 — one page held at several addresses
A search engine sees /campaign/ and /campaign/?utm_source=newsletter as two different URLs, identical content notwithstanding. If a parameterised address ends up linked anywhere — a blog quoting your newsletter link, a forum paste, someone bookmarking and sharing it — the engine finds it and considers it for indexing.
You end up with several copies of the same content, and the engine decides for itself which one to treat as the original. This is how a tracking URL rather than your clean address ends up appearing in search results.
The fix is the canonical tag: a declaration on every variant that the real address is this one. Most SEO plugins emit a canonical with the parameters stripped, but confirm that yours actually does — open a parameterised URL in a browser, view source, find the canonical and check where it points. The check takes a minute; the assumption gets expensive months later.
Problem 2 — inconsistent spelling splits the data
The second problem shows up in reporting rather than indexing. Most analytics tools treat parameter values as case-sensitive literal strings. Facebook, facebook and fb become three separate sources.
What makes this nasty is that nothing errors. The report renders, the numbers are there. It is simply that one campaign’s results sit in three rows, each looking smaller than it is, making the campaign as a whole look worse than it was. Allocate budget from those figures and you cut the channel that was working.
The rules — three lines will do
No elaborate taxonomy required. Three decisions remove most of the problem.
The fixed vocabulary does most of the work. Decide in advance which source and medium values exist, keep them in one table, and use nothing outside it. With a table, whoever builds the URL has nothing to decide — and nothing to decide means nothing to get inconsistent.
Never tag internal links. Putting campaign parameters on a link within your own site overwrites the record of where the visitor originally came from. Someone who arrived from an ad becomes an internal referral the moment they click a menu item. Movement inside the site is behaviour, not acquisition, and behaviour belongs in events.
And keep personal data out of parameter values. A name or email address in a URL persists in server logs, analytics tools and referrer headers on outbound links — and in the worst case surfaces in search results.
What about URLs already out in the wild?
Links from past campaigns have shipped and cannot be recalled, but three things still help. First, verify the canonical output — that alone settles most of the indexing side. Second, most analytics tools let you map historical values onto the new vocabulary in a view, which restores period comparisons. Third, apply the new rules only to URLs from today onwards; far more often than not, trying to retrofit the past is what delays adopting the rules at all.
Parameter conventions and report design are covered in more depth in the no measurement, no improvement series, and URLs, redirects and duplication generally live in the development workflow archive. To have canonical and indexing settings reviewed in one pass, a technical SEO diagnostic is part of our optimization program.