How-to guides
How to add UTM parameters to a QR code
Append UTM parameters to the URL before generating: set utm_medium to qr, utm_source to the physical placement, utm_campaign to the campaign and utm_content to the individual asset. Budget for density — a full UTM set adds 60 to 100 characters, which can push the code up three versions.
The pattern
A UTM parameter is just a query-string tag your analytics reads on arrival. Append the set to the destination, then encode:
https://example.com/spring?utm_source=poster&utm_medium=qr&utm_campaign=spring26&utm_content=window
The URL generator has UTM fields built in, so you fill in four boxes rather
than hand-assembling a query string (and hand-assembly is where stray spaces and ?
vs & mistakes come from).
A convention that keeps the data useful
utm_medium=qr, always. One filter then isolates every QR scan across all campaigns — this is the parameter that earns its keep.utm_source= the physical placement:poster,packaging,receipt,table-tent.utm_campaign= the campaign name you use everywhere else.utm_content= the individual asset, so the window poster and the counter card become comparable: this is how you learn which placement works.
You will also see teams use utm_source=qr&utm_medium=offline. It functions; the
grouping is just coarser. What matters is picking one convention and never mixing them —
mixed conventions split your traffic into unmergeable buckets. The reporting side of
this is covered in Google Analytics with QR codes.
The density cost, in numbers
Parameters are payload, and payload is modules. Take a 26-character destination:
| Encoded URL | Length | Version (EC M) | Grid |
|---|---|---|---|
https://example.com/spring |
26 chars | 2 | 25 × 25 |
| Same + full UTM set above | 99 chars | 6 | 41 × 41 |
At a printed width of 3 cm, that is the module shrinking from 1.2 mm to 0.73 mm — a 39% loss of module size for identical human-visible behaviour. Why length explodes density is explained in why longer URLs make denser codes; whether your printed size still covers the scan distance is a size calculator question.
For screens, none of this matters — pixels are free. For print, it often does.
Having both: the short-link pattern
The standard resolution is to keep the tags out of the code and in the redirect:
Code encodes: https://example.com/p/win (29 chars, version 2–3)
Server 302 → https://example.com/spring?utm_source=poster&utm_medium=qr&...
The code stays low-version and print-friendly; analytics still receives the full UTM set. This is Option 2 of tracking QR scans without a paid tool, and it additionally gives you a destination you can change later. If you use a shortener instead of your own domain, read shortening before making a QR code for the dependency you are taking on.
Before printing: decode the final artwork in the validator and read the
query string back character by character — UTM typos (utm_souce, duplicated ?)
silently discard your attribution.
FAQ
What UTM parameters should I use for a QR code?
Set utm_medium to qr so all scans segment together, utm_source to the physical placement, utm_campaign to the campaign, and utm_content to the specific asset. Keep one convention across every code you print.
Do UTM parameters make a QR code harder to scan?
They make it denser. A full set adds 60 to 100 characters, which can raise the version by three or more and shrink every module at a fixed print size. Either print larger or move the tags behind a short redirect.
Should utm_source be qr or the placement?
Either convention works if applied consistently. Putting qr in utm_medium and the placement in utm_source preserves more information — medium filters all QR traffic, source compares placements.
Do UTM parameters change what the person scanning sees?
Normally nothing beyond a longer URL in the address bar — the parameters are read by analytics, not the page. They are visible to the user, so keep values professional; anyone can read them.
Try it — free, no signup
Related
- How to track QR code scans without a paid tool — Point the code at a URL on your own domain carrying UTM parameters, and read the results in your own analytics. That gives you scan counts, timing and…
- How to use Google Analytics with QR codes — Tag encoded URLs with UTMs, read them in GA4's traffic acquisition report, field-test with Realtime — and know which scans GA can never see.
- Why longer URLs make denser QR codes — QR capacity steps at fixed boundaries — 14, 26, 42, 62, 84, 106 bytes at level M — and each boundary crossed adds four modules to every side of the code.
- How to shorten a URL before making a QR code — A 78-char URL needs version 5; a 28-char link needs version 3 — modules 27% bigger at print size. But a shortener in your ink is a dependency forever.