Skip to content

UTM parameters for QR codes: put print in your analytics

Tag QR destinations with source, medium and campaign and print shows up in GA4 next to your other channels. Conventions plus a builder that applies them.

Google Analytics files a QR scan under direct traffic, the bucket where attribution goes to die. Add three UTM parameters to the destination URL and print stops being invisible in your reports: the scan arrives labeled, sourced and comparable to your email and social numbers.

What are UTM parameters?

UTM parameters are short labels appended to a URL that tell an analytics tool where a visit came from. Three matter for QR work: utm_source, utm_medium and utm_campaign. A tagged destination looks like https://example.com/menu?utm_source=qr&utm_medium=print&utm_campaign=window-poster. The page loads the same either way; the analytics tool reads the labels and files the visit under them.

Which UTM values should a printed QR code use?

Consistency beats cleverness, because analytics tools treat QR, qr and qr-code as three unrelated sources and split your data across them. A convention that holds up:

  • utm_source=qr on each code, lowercase, no variants. One source means one row to filter on.
  • utm_medium=print for physical placements. Reserve other mediums for codes shown on screens, like email or display.
  • utm_campaign names the placement: window-poster, menu-tabletent, packaging-spring. Campaign is the level you will compare, so give each printed location its own value.

Stick to lowercase and hyphens throughout, and the report stays readable without a translation table six months from now.

How do you add UTMs without breaking the printed code?

A 150-character tagged URL encoded into a static pattern produces a dense code that demands a large print, as the size chart shows. A dynamic QR code removes the concern: the pattern encodes a short link, the tagged destination lives on the server behind it, and the printed code stays sparse no matter how long the parameters run.

Our create flow includes a UTM builder for the destination step. Fill in source, medium and campaign, and it appends them in the correct format, so nobody hand-types a ? where an & belongs. Set the convention once, reuse it per placement, and start from the generator with the first code.

How does print show up in GA4?

Open Reports, then Traffic acquisition, and read the session source / medium dimension. Tagged scans arrive as qr / print, and adding the session campaign dimension splits them by placement. Give GA4 a day to process before drawing conclusions.

Expect a small gap between scan counts and GA4 sessions. Scan analytics count the redirect; GA4 counts the page load that follows, and slow connections, closed tabs and blocked scripts fall in between. Both numbers are honest measurements of different moments, so compare trends rather than demanding the totals match.

Do you still need scan analytics if you have GA4?

They answer different questions. GA4 tells you what visitors did after landing: pages, conversions, revenue. Scan analytics tell you about the scan itself, by day, city, country, OS and device, per code, with no tags required and no script that a browser can block. Together they cover the full path from poster to purchase. Tag the destination for GA4, keep the per-code dashboard for print decisions, and the two reports check each other.

Print a code you can still edit next year

3 dynamic QR codes free, with scan analytics. They never expire, even if you never upgrade. No card needed.

Create a free QR code