Campaign tracking field guide
How to track QR codes in GA4 without fooling yourself
A QR code is just a printed URL. What you can measure in GA4 depends entirely on the link you encode and whether you kept a redirect you can edit after the poster is on a wall.
Reviewed against primary sources ·
At a glance
GA4 measures visits that reach your tagged URL, and the key events those visits trigger. It cannot see a scan that never opens the page, and a scan is not a visit, a key event, or a conversion.
A QR code is a printed URL — build it deliberately
GA4 has no idea a visit came from a QR code unless the URL behind the code tells it. Encode a fully tagged destination: your landing page plus utm_source, utm_medium, and utm_campaign. A common, honest convention is utm_medium=qr with a source that names the physical placement, for example utm_source=instore-poster or utm_source=event-badge.
https://example.com/menu
?utm_source=instore-poster
&utm_medium=qr
&utm_campaign=summer-menu-2026Use the same naming convention as the rest of your campaigns so the poster aggregates with its digital siblings instead of inventing a lonely new row.
Plan a redirect you control before you print
A static QR code encodes the destination URL directly in its pattern of squares. That pattern is fixed at generation time: you cannot edit where a static QR code points by changing the printed code— the destination lives in the image itself, not in a setting you can update later. Reprinting is the only way to change a static code’s target.
So never point a printed static QR code straight at a long, campaign-tagged URL you might want to change. Instead, encode a short redirect URL you own (for example example.com/go/summer-menu) that 301/302 redirects to the fully tagged destination. Then:
- The printed squares never need to change — the poster stays valid for the life of the campaign.
- You edit the destination server-side — fix a typo in the UTMs, or repoint to a new page, without reprinting.
- Attribution survives — keep the
utm_parameters on the final URL the redirect lands on, so GA4 still records the campaign.
Changing a printed static QR code’s destination without a redirect plan means every printed poster is now wrong and must be reprinted. Decide the redirect before the code goes to the printer, not after.
Test before it goes to print
Scan the real code on real phones
Scan the exact code you will print, using both iOS and Android cameras. Confirm it opens the redirect and lands on the tagged URL with every parameter intact.
Check the parameters survive the hop
Redirects and consent banners can strip query strings. Verify the final address in the browser still shows your
utm_values; if they vanish, the redirect or the page is dropping them.Watch GA4 Realtime
Scan the code and confirm the session appears in GA4 Realtime with the expected source, medium, and campaign before you commit to printing.
Print a proof at final size
Test the code at the size and material it will ship on — a business card, a table tent, a billboard. Small or low-contrast prints fail to scan even when the URL is perfect.
Printing checklist
- Keep the quiet zone. Leave clear margin around the code; art crowding the edges breaks scanning.
- Contrast and colour. Dark code on a light background scans most reliably; avoid inverted or low-contrast schemes.
- Size for distance. The farther the viewer, the larger the code — a billboard code is not a flyer code.
- Shorter URL, denser-proof code. The short redirect URL keeps the pattern simple and easier to scan at small sizes.
- Print a human fallback. Show the short URL in text too, for phones that will not scan.
Scans, visits, key events, conversions — four different numbers
The single biggest reporting error is treating these as interchangeable. They are not, and GA4 only sees some of them.
| Metric | What it counts | Does GA4 see it? |
|---|---|---|
| Scan | A camera decoding the code. Not everyone who scans opens the page. | No — GA4 cannot see a scan that never loads your site. |
| Visit / session | A scan that actually opens your tagged URL and starts a session. | Yes — recorded with your campaign source/medium. |
| Key event | An event you have marked as important (e.g. a purchase or sign-up). | Yes — but only if you configured that event as a key event. |
| Conversion | A Google Ads conversion created from a GA4 key event for advertising measurement and bidding. | In Advertising reports; Google says these conversions do not appear in standard Analytics reports. |
A scan is not a visit, a visit is nota key event, and neither a scan nor a visit is automatically a conversion. If your QR provider reports “scans,” treat that as a separate top-of-funnel number from the sessions GA4 records — the two will not match, and that gap (scanned but never landed) is itself useful signal, not an error. An event must be marked as a key event to count as one; creating a Google Ads conversion from that key event is a separate step.
Reading it in GA4
- Traffic acquisition — filter session source/medium to your QR values (e.g.
instore-poster / qr) to see the sessions the code drove. - Campaign — group by session campaign to compare the QR campaign against its email and social siblings under the same name.
- Key events — measure outcome by the key events those sessions produced, not by raw provider scan counts.
- Mind propagation. Realtime is immediate; standard reports take time to finish processing, so do not judge a fresh campaign by an empty report an hour after launch.
Primary sources
Checked on . Google Analytics changes; the official pages below remain the authority for current behaviour.
- Google — Campaign URL Builder ↗Google's official tool for assembling tagged URLs; it directs marketers to tag inbound links from external sources, not internal navigation.
- Google — Collect campaign data with custom URLs [GA4] ↗The primary reference for the recognized utm_* parameters, their GA4 dimensions, and which parameters Google recommends.
- Google — Key events and conversions [GA4] ↗Defines key events (formerly conversions) and how you mark an event as a key event; a scan or a visit is not automatically either.
- Google — Default channel group [GA4] ↗How GA4 maps source and medium into channels; explains why utm_medium values must match the terms GA4 already understands.