urldiagnostics.com

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-2026

Use 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

MetricWhat it countsDoes GA4 see it?
ScanA camera decoding the code. Not everyone who scans opens the page.No — GA4 cannot see a scan that never loads your site.
Visit / sessionA scan that actually opens your tagged URL and starts a session.Yes — recorded with your campaign source/medium.
Key eventAn 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.
ConversionA 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.