Home/ Guides/ How to track QR code scans

Guide · QR codes & analytics

How to track QR code scans.

A printed QR code can't count its own scans — it's just an image, and there's no analytics baked into the dots. The fix is to put a short link behind the code, so every scan becomes a click you can measure. Here's how it works, how to tag a print campaign with UTMs, and how to read the numbers.

Updated June 23, 2026 · by slsh.me

The short answer

Put a short link behind the QR. Every scan becomes a tracked click.

A QR code just encodes a URL — there's nothing inside it to count opens, and a printed sticker can't report back. So you don't track the code; you track what it points at. Encode a short link instead of the raw destination, and the redirect logs every scan with its country, device, browser and time. The scan total is the click total on that link.

A raw QR

Static — no analytics

  • Encodes the destination URL directly
  • No way to count opens — it's just an image
  • Long URL = dense matrix, harder to scan
  • Destination is frozen once it's printed
A short link QR

Tracked — every scan counts

  • Encodes a short link that redirects on open
  • Each scan = a click with geo, device and time
  • Short URL = simpler matrix, scans from across the room
  • Change where it points after the stickers are printed

Want to try it now? Make one with the free slsh.me QR code generator — encode a short link and you're tracking scans, no signup needed. Every short link you make on slsh.me ships with live click analytics built in.

Why a QR code can't count its own scans.

A QR code is a picture. The black-and-white pattern is just a URL encoded as a grid of dots — when a phone camera reads it, the phone opens that URL directly. Nothing in that loop touches a server you control, so there's nothing to record a "scan." The code has no memory and no way to phone home.

That's why the trick is to track the destination, not the code. If the QR encodes a normal page URL, the only thing that sees the visit is that page's own analytics — and it can't tell a QR scan apart from someone who typed the address or clicked a link. If the QR encodes a short link, every open hits the redirect first, and the redirect is a server you control. It logs the visit, then forwards the phone to the real page. The visitor notices nothing; you get a clean count.

So "tracking a QR code" really means "encoding a trackable link into the QR." Get that one decision right before you print and the rest is just reading numbers.

How to make a trackable QR code.

Four steps, and the order matters — the UTM tags go on before you shorten and encode.

Shorten the destination first

Take the URL you want the QR to open and turn it into a short link. This is the piece that records each visit, so the QR will point at the short link rather than the raw page. A short URL also keeps the QR's matrix simple, which matters for scannability.

Tag it with UTMs for the placement

Add campaign tags that name the physical surface, not just the campaign: utm_source=poster, utm_medium=qr, utm_campaign=spring-launch. Put them on the destination URL before shortening. Building the tagged URL by hand is fiddly — the UTM builder keeps the casing and spelling consistent so one campaign doesn't split across five rows later.

Generate the QR from the short link

Encode the short link into the QR with the QR code generator. Because the short URL is brief, the resulting code is low-density and stays readable even when it's small on a flyer or large on a banner. Export the SVG for print so it's crisp at any size.

Read the scans in the dashboard

Once the codes are out in the world, open the link's stats. Each scan shows up as a click with its country, city, device, browser and timestamp — so you can watch scan volume build over the campaign and see exactly where it's coming from.

Tell which placement drove the scans.

The single most useful habit with printed QR codes is one link per placement. If the same poster design goes up in three cities, give each city its own short link — even though they all open the identical page. Now the scan counts split cleanly: 412 in Berlin, 88 in Munich, 19 in Hamburg, instead of one undifferentiated "519 scans."

UTM tags do the same job inside your analytics tool. Naming the surface in utm_sourceposter, flyer, table-tent, packaging — lets you compare formats: did the table tents or the window posters actually move people? Use both together for print: a distinct short link and descriptive UTMs, so the data is legible whether you're looking at the slsh.me stats page or GA4.

The reusable bonus: because the QR points at a short link, you can repoint that link after the stickers are printed. A sale ends, a landing page moves — change the destination once and every printed code follows, with the scan history intact.

Sorting out where each UTM value goes? The utm_source vs medium vs campaign guide has the one-line rule, and the UTM naming convention guide keeps your values tidy across a whole print run.

What a scan actually tells you.

A scan behind a short link isn't just a +1. Each one carries context you can act on.

What you see Why it's useful for a print campaign
Scan count over timeSee the spike when posters went up, and how long the long tail of scans lasts after.
Country & cityConfirm the regional placements are working — and catch scans from somewhere you didn't print.
Device & browserQR scans skew mobile; a wall of desktop hits usually means the link also got shared online.
ReferrerA scan from the camera app has no referrer — a handy way to separate real scans from web clicks on the same link.
utm_source / campaignCompare placements and campaigns side by side in your analytics tool, attributed to the exact surface.

Want to see what that looks like live? Tour the slsh.me analytics — the same dashboard every short link gets, free.

The pre-print checklist.

Run through these before the QR goes to the printer — fixing a printed code is expensive.

[x]The QR encodes a short link, not the raw destination URL.
[x]The destination carries UTM tags that name the physical placement (utm_medium=qr).
[x]Each distinct placement has its own link or UTMs so the counts don't merge.
[x]You exported a high-resolution SVG so the code stays crisp at print size.
[x]You test-scanned the final artwork on a real phone, from the real distance.

Make a trackable QR, free.

Encode a short link, print the code, and every scan lands in your dashboard with the geo, device and time attached. No app, no signup to make the QR — and the analytics come with every link.

The free slsh.me QR code generator turns any link into a crisp SVG or PNG that scans from across the room — point it at a short link and the scans count themselves.

Make a QR code with the free tool

Want the scan analytics too? Create a short link on slsh.me — real-time clicks on every link, free forever.

Every scan, counted.

Put a slsh.me short link behind your QR and each scan becomes a tracked click — country, device and time, live. Change the destination anytime. Free.

Create a link with slsh.me

Free forever · see pricing