Guides

Track QR Code Scans in GA4: UTM-Tagged QR Codes, Step by Step

Build UTM-tagged dynamic QR codes step by step, see scans as campaigns in GA4, and get free scan analytics broken down by country and device.

K
Kelvin Kwong
7 min read

A QR code printed on a poster is a tracking black hole — unless you build it right. Point the code at a raw URL and the scan lands in Google Analytics 4 as unattributable "direct" traffic, forever. Point it at a short link carrying UTM parameters and every scan becomes a tracked event with a campaign name, a location, a device, and a timestamp. Here's the full build, step by step, so your next printed QR code shows up in GA4 as a real campaign.

📊 Quick Overview

The chain that makes QR codes trackable: destination URL + UTM parameters → short link → QR code generated from the short link. Every scan hits the short link first, so it gets counted and analyzed (country, city, device, browser, time) — then the UTM parameters ride the redirect into GA4, where the scan appears as a campaign session in the acquisition reports instead of anonymous direct traffic. On Sinkto.Link, every piece of that chain is free.

Why Static QR Codes Are a Black Hole

A QR code is just a URL rendered as an image. When someone scans it, their browser opens the URL directly — no referrer header, no source data, no context. In GA4, that session shows up under "direct" traffic, lumped in with every bookmark and typed URL. You'll see visits; you'll never know they came from the poster, the packaging, or the flyer.

And a static QR has a second, worse problem: once it's printed, the URL inside it is frozen. If the destination moves, the campaign ends, or the landing page URL changes — every printed code is dead weight. (More on that failure mode in our link permanence guide.)

The fix for both problems is the same: put a short link you control between the QR code and the destination. The QR encodes the short link; the short link redirects wherever you say; and because the destination URL carries UTMs, the scan is fully attributed — in your shortener's analytics and in GA4.


Step-by-Step: QR Code to GA4 Campaign

Step 1: Plan your campaign naming first

Attribution is only as good as your naming. Decide your conventions before creating anything: lowercase everything, no spaces (use hyphens), and a scheme like utm_campaign=expo-spring-2026 per campaign, utm_source=qr, utm_medium=print (or packaging, poster, flyer). Consistent names are what make GA4's reports groupable later. Build consistently tagged URLs with our free UTM builder.

Step 2: Add UTM parameters to your destination URL

Take your landing page URL and append all five UTM parameters — source, medium, campaign, content, and term. For a QR on a conference poster, that looks like:

https://yoursite.com/expo-offer?utm_source=qr&utm_medium=poster&utm_campaign=expo-spring-2026&utm_content=booth-banner&utm_term=visitor-pass

Use utm_content to distinguish physical placements (booth banner vs. handout vs. packaging) so one campaign can have many codes, each measurable separately. Any UTM builder tool works for composing these — what matters is that the parameters are on the destination before you shorten.

Step 3: Create the short link

In Sinkto.Link (free), paste that full UTM-tagged URL and create the link — optionally with a custom alias like stnk.to/expo-offer that's readable at poster distance and reinforces trust. Every click through the link is recorded with country and city, device, browser, referrer, and timestamp, and Sinkto captures all five UTM parameters on the redirect — so your shortener analytics and GA4 will agree on what the campaign was called.

Step 4: Generate the QR code from the short link

From the short link's panel, generate its QR code. Style it so people actually scan it: upload your logo for the center, set brand colors, pick a shape style, and export as PNG for digital use or SVG for print (SVG is vector — it stays crisp at billboard size). Because the code encodes the short link, not the destination, you can change where it redirects whenever you like. You can try the generator with no signup at our free QR code tool; more on pairing codes with short links in QR code + URL shortener tracking and the 2026 free shortener + QR guide.

Step 5: Test-scan before you print

This is the step everyone skips and regrets. Before anything goes to press: scan the code with two different phones (one iPhone, one Android), confirm the redirect lands on the right page with UTMs intact in the final URL, then check that the scan registered in your Sinkto analytics dashboard within seconds. A code that's misprinted or truncated is invisible until it's on 5,000 flyers.

Step 6: Read scan analytics in Sinkto

As scans come in, the link's dashboard fills in: which countries and cities the scans came from (the closest thing to knowing where your posters worked), what devices and browsers scanned, when scans happened over time (did the booth traffic spike during your demo slot?), all filterable per link.

Step 7: See it in GA4 as a campaign

Because every scan's redirect carries your UTM parameters, GA4 attributes the session correctly. Open Reports → Acquisition → Traffic acquisition and group by session source/medium — your qr / poster sessions appear as their own line, not direct traffic. Switch the dimension to Session campaign and expo-spring-2026 shows up as a named campaign with its conversions. Congratulations: a physical poster is now a measurable channel, alongside email and paid.


What Sinkto Shows vs. What GA4 Shows

You get two complementary views, not duplicates:

SignalSinkto.Link dashboardGA4
Scan/click count✅ Every scan, per link✅ Sessions by campaign
Country & city✅ Per scan✅ Aggregated (if enabled)
Device & browser✅ Per scan✅ Per session
UTM breakdown (source/medium/campaign/content/term)✅ Captured on every redirect✅ Drives all acquisition reports
Time series✅ Scan timing per link✅ Session timing
What happens after the click✅ Conversions, engagement, revenue
Works without GA4✅ Standalone

The division of labor: Sinkto answers "did this specific code get scanned, where, and on what?" GA4 answers "what did those people do next?" You need both halves — one measures the physical placement, the other measures the outcome.


Details That Make or Break It

  • Case sensitivity matters. Expo-Spring and expo-spring are different campaigns in GA4. Pick lowercase and never deviate.
  • One placement, one utm_content. If the booth banner and the handout share a code, you've made them indistinguishable forever.
  • Never reuse a code across campaigns. Duplicate the short link with a new campaign parameter instead — retroactive attribution is impossible.
  • Check contrast and quiet zone. Dark code on light background, clear margin around it, logo kept modest. Test-scan at realistic distance before print.
  • Keep the destination editable. The whole architecture exists so the printed code never changes while the redirect can. Don't bypass it by encoding raw URLs.

Build your first trackable QR campaign free — unlimited links, unlimited codes, no credit card →


Frequently Asked Questions

Do QR code scans show up in GA4 automatically?
No. A QR code pointing at a raw URL produces direct traffic — no referrer, no source data. Scans only become attributable in GA4 when the destination URL carries UTM parameters. Encode a UTM-tagged short link in the QR and each scan arrives as a session with source, medium, and campaign attached.
Which UTM parameters should a QR code destination have?
Use all five: utm_source (qr), utm_medium (print, poster, or packaging), utm_campaign (the campaign name), utm_content (the specific physical placement), and utm_term if you're testing audiences or offers. Sinkto.Link captures all five on every redirect, so your shortener analytics and GA4 stay consistent.
Can I tell where a QR code was scanned physically?
Approximately. Sinkto.Link records the country and city of each scan, which tells you which locations your placements performed in — trade show city vs. retail region, for example. It's IP-derived geography, not GPS, so treat it as regional insight rather than a pin on a map.
Can I change where a printed QR code points?
Yes — if the code encodes a short link instead of the raw destination URL. The printed pattern never changes; you just edit the short link's destination, and every future scan follows the update. Editing destinations is free on every Sinkto.Link plan. A static QR pointing directly at a raw URL is permanently frozen.
Should I export my QR code as PNG or SVG?
SVG for print — it's a vector format, so it stays sharp at any size, from business cards to banners. PNG is fine for digital placements like email or slides. Sinkto.Link's QR generator exports both, with logo upload, custom colors, and shape options included free.

Updated: August 2026. Sinkto.Link behavior (UTM capture on redirect, country/city and device analytics, QR logo/colors/shapes, PNG + SVG export, free destination editing) reflects the current product. GA4 steps reflect standard Reports → Acquisition behavior. Contact us with feedback.

K

Kelvin Kwong

Founder & Solution Architect

Full-stack developer and the creator of Sinkto.Link. Passionate about building tools that make link management accessible to everyone. Based in Hong Kong.

Xiaohongshu

Related articles

Ready to optimize your links?

Join thousands of creators using Sinkto.Link — free forever

Get Started Free →

Share this article

Instagram and Xiaohongshu have no web share link — those buttons open your device's share sheet, or copy the link to paste into a post, story or bio.

Command Palette

Search for a command to run...

We use cookies to improve your experience and analyze traffic. By clicking "Accept", you consent to the use of cookies. See our Cookie Policy.