utm_source=Newsletter and the next one utm_source=newsletter. Each of these small things moves visits into the wrong bucket, and what remains is a report that looks plausible and still misleads. With 83.1 billion euros in German online retail goods revenue in 2025 (bevh) and an average order value of 146.19 euros (bevh), that attribution decides which campaign gets budget next quarter. This guide shows where tagging typically breaks, what a naming convention looks like that survives daily use, and how campaigns can be followed through to the order in cookie-free analytics.Why the channel report goes wrong before any maths happens
A channel report is not a measurement, it is a sorting exercise. For every visit the tool receives a handful of signals - referrer, destination address, appended parameters - and drops the visit onto a pile: organic search, paid ad, email, referral, direct. Only then does it start counting. If the signals are unclean, the tool counts the wrong piles correctly. Experience suggests this happens in a large share of accounts, regardless of which analytics tool is in use.
The tagging itself consists of a small group of parameters that have carried the same prefix since the early days of web analytics: utm_source, utm_medium, utm_campaign, utm_term and utm_content. Two of them are required for campaign attribution - if utm_source or utm_medium is missing, the visit is usually not recorded as a campaign at all (Google documentation). Newer schemes add utm_id, which links the visit to a stored campaign record (Google documentation). The approach is deliberately plain: it sits in the address, it survives the click, and it needs no extra script. That plainness is also its weakness - nothing technical prevents the same channel from being spelled differently on the next send.
The consequences rarely surface as an error message. They show up as a Direct channel that grows for no visible reason, as a campaign list with forty rows for twelve campaigns, as an email channel that reads smaller than the send log suggests. Much like with referrer spam and ghost traffic in analytics, the number is not miscalculated - it simply describes something other than what the reader assumes.
No analytics tool can reconstruct what was left out of the send. A newsletter without parameters stays unattributable after the fact, because the information did not travel with the click at any point. Tagging therefore belongs in the campaign's editorial and approval process, not in the analysis afterwards. Anyone who also filters machine traffic out of analytics has already cleared two of the three big sources of distortion.
The five parameters and what each one answers
Before looking at mistakes, it pays to agree on what each parameter is supposed to answer. The most common cause of sprawl is not carelessness but a different understanding of which piece of information belongs in which field. Two people who mean the same thing and fill in different fields reliably produce two rows in the report.
| Parameter | Answers | Example value | Status |
|---|---|---|---|
| utm_source | Who referred the visit? | newsletter-customers, partner-portal | required (Google documentation) |
| utm_medium | Through which path? | email, qr, cpc, referral | required (Google documentation) |
| utm_campaign | For which occasion? | autumn-2026-b2b | recommended |
| utm_content | Which element in the same send? | header-cta, footer-bar | optional |
| utm_term | Which search term? | website-monitoring | optional, mostly paid search |
| utm_id | Which campaign record? | as-2026-014 | optional (Google documentation) |
The line between source and path blurs most often. utm_source=email with utm_medium=newsletter is inverted: the path is email, the source is the specific list or sending system. Get this the wrong way round once and the send later appears neither under the expected channel nor under the expected sender. In cookie-free channel and source reporting this shows up quickly because source and medium sit side by side - provided there is a binding definition to check against.
Letter case: same channel, four rows
The query component of an address is case-sensitive under the URI standard. Only scheme and host name are normalised; everything after that stays character for character as it was written (RFC 3986, section 6.2.2.1). Analytics tools follow this and treat Newsletter, newsletter and NEWSLETTER as three different sources (Google documentation). Four spellings of the same list produce four rows in the report, each holding a fraction of the real number.
- Newsletter - copied from the content management system, because that is how the headline reads there
- newsletter - from the sending tool's template, where the values are stored in lower case
- NEWSLETTER - from a spreadsheet where someone used capitals for emphasis
- news_letter - from a colleague who finds underscores easier to read than hyphens
Four entries, one list. In the report the largest of them may sit at rank eleven and drop out of the default view, while the channel as a whole is understated. The effect is particularly awkward in year-on-year comparisons: if the spelling changes between two campaigns, it looks as though one channel collapsed and a new one appeared.
A single binding rule - all parameter values in lower case throughout, words separated by hyphens - removes the bulk of row duplication in practice. It costs nothing, needs no extra tool and can be stored in every template. How much measurement data is lost to blocking regardless of tagging is put into perspective in the article on adblocker losses and first-party measurement.
Synonyms: when one source carries five names
Spelling is the obvious half of the problem. The more awkward half is synonyms: mail, email, e-mail, newsletter and nl all mean the same thing and still occupy five separate rows. The same happens with social, smm and the name of the individual network in the medium field. On top of that, analytics tools only map certain medium values automatically to a default channel group; everything else lands in a residual bucket and disappears from the channel overview (Google documentation).
| Level | Sprawl in daily use | Binding definition |
|---|---|---|
| Medium email | mail, email, e-mail, newsletter, nl | |
| Medium paid search | ppc, sea, paid, ads | cpc |
| Medium referral | partner, link, backlink | referral |
| Medium QR code | qrcode, qr-code, print, offline | qr |
| Source newsletter | Newsletter, newsletter, NL-Customers | newsletter-customers |
| Campaign | Autumn, autumn2026, AS26 | autumn-2026-b2b |
The right-hand column is not a standard imposed from outside - it is a decision taken once and then upheld. More important than its exact content is that it exists at all, is written down, and lives in the templates from which campaigns are built. A convention that only exists in one person's head ends with that person's holiday.
Newsletter, QR code and print: the blind spots
Two channels are left untagged particularly often because they originate outside an advertising account. The first is the company's own newsletter. It is built in the sending tool, frequently by someone other than the person who later reads the report, and the links are copied and pasted straight from the website - missing parameters included. The second is the printed QR code, where a mistake can no longer be corrected once the run is printed.
QR codes have long been part of everyday life in Germany: in a 2025 survey, 40 percent of consumers used a QR or bar code on their smartphone to retrieve information on the origin and ingredients of food (Bitkom); a further 44 percent can imagine using one (Bitkom). A code on a flyer, a package or a trade-show stand produces a visit with no origin information at all - the browser opens the address directly, there is no referring page. Without appended parameters such a visit is indistinguishable from a genuine direct entry. The code itself is the only place where tagging can happen.
The same applies to posts on social networks published by the company itself. 63 percent of enterprises in Germany with at least ten employees used social media in 2025 (Eurostat) - a channel whose links are frequently shared without parameters and which is then booked as referral or direct depending on the app. What looks like fluctuating demand in the channel overview is often simply fluctuating tagging.
Every link in the send gets parameters, including those in the footer and the legal block. This becomes workable through a template in which the parameters are already present and only the campaign value is swapped. The send is the last opportunity to catch up - once it has gone out, the link stays as it is.
Generate the code from an already tagged address, not from the bare home page. A dedicated medium such as qr plus a source naming the carrier works well - for instance flyer-trade-show or packaging-2026. Short addresses make scanning easier but must not truncate the query component.
Links from your own profiles and from employees' posts need the same tagging as paid ads. Otherwise the channel splits between referral and direct depending on the app - and the post that actually worked stays unrecognised.
Some inflows carry no origin information of their own. How visits from AI assistants can still be assigned to a channel is covered in that article. The principle matches the QR code: what is not sent along has to be recognised through other signals.
UTM on internal links cuts the session in two
One mistake with particularly unpleasant effects is tagging internal links. Adding utm_source=homepage&utm_medium=banner to a banner on your own home page creates a fresh campaign signal on every click - in the middle of a running session. Many tools read this as the start of a new session or as a campaign switch and credit the subsequent order to the internal banner rather than to the ad that brought the visitor in the first place.
The default session ends after 30 minutes without activity (Google documentation); a campaign switch inside that window can still rewrite the attribution. In practice the paid channel loses revenue to an internal click, and the ad is valued too low - with a direct effect on the next budget decision. For internal elements there are better instruments: events, named click targets and dedicated reports that do not overwrite campaign attribution.
UTM parameters describe how a visitor arrived on the website. For journeys inside the website they are the wrong tool. As a rule of thumb: as soon as origin and destination belong to the same domain, no utm_ parameters belong on the link. If you want to know which internal elements work, measure them as events - that way the origin of the visit is preserved and revenue attribution stays reliable.
Redirects and caching: where parameters go missing in transit
Even a correctly tagged address can lose its parameters on the way. The most common reason is a redirect that does not carry the query component along. With Apache, a RewriteRule replaces the existing query string as soon as the target address contains one of its own; it is appended only with the QSA flag (Apache documentation). With nginx, the query string survives a rewrite directive as long as the target contains no question mark - if it does, the original part is discarded unless it is explicitly re-appended via $args (nginx documentation).
# Apache: QSA appends the incoming query string to the target
RewriteRule ^/sale$ /autumn-sale?internal=1 [R=301,L,QSA]
# nginx: the query string survives as long as the target has no question mark
rewrite ^/sale$ /autumn-sale permanent;
# nginx: this rule discards the original query string
rewrite ^/sale$ /autumn-sale?internal=1 permanent;
# nginx: with $args the campaign tagging survives
rewrite ^/sale$ /autumn-sale?internal=1&$args permanent;The second loss path is caching. The default cache key contains the complete requested address including the query component (nginx documentation). Every campaign variant of the same page therefore creates its own entry. For a send with six content variants the same landing page sits in the cache six times, the hit rate drops, and the first delivery of each variant is slow - precisely in the quarter of an hour when most recipients click. The remedy is not to abandon parameters but a cache rule that removes utm_ parameters from the key while still passing them through to the page.
Both effects are neighbours of familiar problems: how to monitor chains of several redirects is described in the article on redirect chains; why a cache serves outdated content after a release is covered in stale cache after deploy. In both cases the campaign address is the most sensitive test case, because it carries extra components that a standard page does not have.
The hop across an interstitial page
The last loss path is the hardest to see because it happens in transit. If a campaign link first leads to an interstitial page - a language switch, an age check, a country selector, a payment confirmation - and continues from there via script or form, then that interstitial decides whether the tagging survives. Very often it does not, because the forwarding script holds a hard-coded destination without parameters.
Falling back on the referrer is hardly an option either. The default policy in modern browsers is strict-origin-when-cross-origin (W3C); across an origin change it transmits only scheme, host and port, no longer the path and query component. In Chrome this value has been the default since version 85 (Chrome documentation). The referring site is therefore known, but the specific campaign is not. If the parameters are not carried across the interstitial, they are gone for good.
One simple rule helps in practice: every page that sits in the campaign path passes the complete query component on to the next destination. This applies to error pages too - a page that serves a substitute view with status 200 instead of a redirect swallows both the error and the campaign and reports a successful visit to the analytics tool. How to find such cases systematically is described in the article on soft 404s and wrong status codes.
A naming convention that survives daily use
A convention is followed when it is short, has few exceptions and lives where campaigns are created. Four rules are generally enough to avoid most of the failure patterns described above.
- Lower-case letters, digits and hyphens only. No accented characters, no spaces, no underscores in the values. This matches the case sensitivity of the query component (RFC 3986) and makes typos visible at a glance.
- A fixed medium list.
email,cpc,referral,social,qr,print,affiliate- and nothing else. New values are added deliberately, not invented on the spot. Analytics tools map the common standard values to a channel group automatically (Google documentation). - Campaign names follow a fixed pattern.
<occasion>-<year>-<audience>, for exampleautumn-2026-b2b. The campaign list then sorts itself, and reports spanning several years stay comparable. - The source names the specific system or carrier, not the category:
newsletter-customersinstead ofmail,flyer-trade-showinstead ofprint. The category is already in the medium, and repeating it only costs readability.
https://example.com/autumn-sale?utm_source=newsletter-customers&utm_medium=email&utm_campaign=autumn-2026-b2b&utm_content=header-cta
https://example.com/autumn-sale?utm_source=flyer-trade-show&utm_medium=qr&utm_campaign=autumn-2026-b2b&utm_content=code-b
https://example.com/autumn-sale?utm_source=partner-portal&utm_medium=referral&utm_campaign=autumn-2026-b2bThe final building block is a shared source of truth: a plain table listing permitted values, the responsible person and the date of the last change. It replaces the quick question in chat and prevents two teams from establishing two spellings in parallel. Multilingual websites add one wrinkle: the campaign address should point straight at the language version that is actually served - otherwise the language switch kicks in and the parameters are lost at that point. How to monitor language tagging itself is covered in the article on hreflang errors on multilingual sites.
A check routine before campaign launch
The real safeguard is a short routine run before every launch. It takes a few minutes and catches exactly those mistakes that cannot be corrected later.
- Open the address, do not just read it. Load the finished campaign address in a fresh browser window and check that the landing page answers with status 200 and that the parameters are still in the address bar after loading.
- Count the redirect chain. Every additional hop is an opportunity to lose the query component. A direct hit without an intermediate step is the most robust option, especially for printed codes.
- Check the spelling against the list. Reconcile source, medium and campaign with the binding table: lower case, permitted values, naming pattern.
- Rule out duplicate parameters. If
utm_sourceappears twice in the same address because the template already contained parameters, the outcome depends on the tool and rarely matches the intent. - Keep internal links clean. Check in the send and on the landing page that no
utm_parameters are attached to links pointing at your own domain. - Measure a test click. After the call, check in the analytics view whether the visit appears under the expected source and medium - and not under Direct or in a residual bucket.
- Clarify responsibilities. Who may create campaigns and add values should be defined; the article on access rights in the monitoring team describes a role model that transfers well to campaigns.
- Set an alert on channel drops. If a channel collapses unexpectedly after launch, the cause is more often tagging than demand. A notification on anomalies surfaces that on the same day instead of in the monthly report.
German online retail turned over 83.1 billion euros in goods in 2025, up 3.2 percent from 80.6 billion euros the year before (bevh); digital services grew 7.3 percent to 14.4 billion euros (bevh). With an average order value of 146.19 euros, after 144.12 euros the previous year (bevh), a mere handful of misattributed orders already changes the ranking of two channels. For 2026, bevh and the EHI Retail Institute expect goods growth of 3.8 percent (bevh and EHI Retail Institute) - growth that can only be credited to a channel if the tagging is clean.
Following campaigns through to the order with XICTRAQ
Clean tagging is the precondition, not the goal. It becomes useful only when you can answer at the end which send, which code and which ad produced revenue - without a foreign script in the page head and without a consent banner that halves the data base before the first number exists.
The cookie-free analytics in XICTRAQ break visits down by channel, source, medium and campaign and follow them through to the order. Because the measurement works without device storage, consent under section 25 of the German TDDDG does not apply - the campaign figures therefore rest on all visits, not only on those that confirmed a banner. Combined with reports and status pages, channel development and campaign results land regularly where they are read, and SEO monitoring keeps an eye on whether parameter variants of the landing page are indexed as separate addresses. 34.2 percent of customers in Germany ordered online twice a week or more often in 2025 (bevh); at that frequency, channel attribution decides which campaign is credited with the recurring revenue.
An alert on traffic drops per channel closes the loop: if the email channel falls to zero after a send, the most likely cause is a lost parameter rather than absent demand. Start with the free trial and look at your own campaign list to see how many rows describe the same source. Or have the channel and campaign reporting shown to you in a personal demo.
This article is based on data from bevh (83.1 billion euros in goods revenue in 2025, up 3.2 percent from 80.6 billion euros, digital services up 7.3 percent to 14.4 billion euros, average order value 146.19 euros after 144.12 euros, 34.2 percent ordering twice a week or more often, 2026 forecast of plus 3.8 percent together with the EHI Retail Institute), Bitkom (40 percent retrieving product information via codes on packaging, 44 percent open to using them, 2025 survey), Eurostat (63 percent of enterprises with at least ten employees using social media, 2025 survey) and the technical documentation on campaign parameters, session length and channel groups (Google documentation), on URI structure (RFC 3986), on redirects and cache keys (Apache documentation, nginx documentation) and on referrer policy (W3C, Chrome documentation). The figures quoted refer to the state of the respective publication.
What are UTM parameters and what are they for?
utm_source for the source, utm_medium for the path, utm_campaign for the occasion, plus utm_content and utm_term for detail. Source and medium are required for campaign attribution (Google documentation). Their advantage: the information travels inside the address and needs no additional script.Does letter case matter for UTM parameters?
Newsletter and newsletter as two different sources (Google documentation). A binding rule to keep all values in lower case removes the bulk of duplicated rows in the channel report.Should internal links be tagged with UTM parameters?
Why are UTM parameters missing after a redirect?
QSA flag (Apache documentation). With nginx it survives as long as the target has no question mark, otherwise $args helps (nginx documentation). A test call before launch typically exposes this straight away.How do you tag a QR code on a flyer correctly?
utm_medium=qr and a source naming the carrier. A scan produces no referrer, which is why an untagged visit is booked as a direct entry. Given that 40 percent of consumers already scan codes on packaging to retrieve product information (Bitkom), the care pays off - once printed, the code can no longer be changed.