You put a QR code on your flyers, business cards and shop counter. People visit your website. But which printed material brought them there?
If every code opens the same untagged page, your website analytics may not give you a clear answer.
To track QR code traffic, create a tagged destination URL for each placement, put it behind a separate short link, and generate a QR code for that link. You can then compare the visits each placement brings—and, if your website tracks enquiries or purchases, what those visitors do next.
Here’s a practical setup for a small business.
Decide what you want to measure
A scan count answers one question: how often was the code’s link opened?
Your website analytics answers another: what happened after someone arrived?
For a café, the useful outcome might be a table reservation. For a consultant, it might be an enquiry. For an online shop, it might be a purchase.
Pick the outcome before printing. Otherwise, you could end up celebrating a busy QR code without knowing whether it helped the business.
Give each placement its own tagged URL
Imagine you run a bakery and want to promote catering. You plan to put QR codes on:
Flyers delivered to nearby offices.
A sign beside the till.
Cards included with takeaway orders.
All three can lead to the same catering page. The tracking tags should identify where each visit came from.
UTM tags are labels added to a URL. For this campaign, use a simple naming convention:
Tag | What it identifies | Example |
|---|---|---|
utm_source | The distribution source | office_leaflet |
utm_medium | The marketing channel | |
utm_campaign | The shared promotion | catering_launch |
utm_content | The particular design or position | front_panel |
These are example values, not required names. Choose labels that your team understands and keep them consistent. Google Analytics treats differently capitalised values as distinct, so lowercase is a sensible default. See Google’s UTM documentation.
Your flyer’s destination could look like this:
https://example.com/catering?utm_source=office_leaflet&utm_medium=print&utm_campaign=catering_launch&utm_content=front_panelUse the same campaign name for the counter sign and takeaway card, but give each a different source.
You can create these URLs with the free toa.ee UTM builder.
One naming detail: using “print” makes the medium easy to recognise, but don’t assume it will appear in a dedicated “Print” channel in Google Analytics. Compare your source and medium values directly.
Put each tagged URL behind a separate short link
A long tracking URL can make a QR code denser than it needs to be. Put the complete tagged destination behind a short link, then generate the QR code for that short link.
The path becomes:
Printed QR code → short link → tagged catering page
Keep a simple record:
Placement | Destination source | Short link |
|---|---|---|
Office flyer | office_leaflet | Your flyer link |
Counter sign | shop_counter | Your counter link |
Takeaway card | takeaway_card | Your takeaway link |
Use a separate link for each placement. Reusing one QR code everywhere combines the traffic and removes the distinction you’re trying to measure.
For more on how URL length changes the printed code, see our business-card QR code comparison.
Test the whole journey before printing
A QR code opening successfully is only the first check. Scan a printed proof and confirm that:
It opens the correct page on your phone.
The destination URL retains the intended UTM tags after any redirects.
The page works comfortably on mobile.
The enquiry, booking or checkout flow works.
Your analytics setup records the visit and your chosen outcome, where applicable.
Also check that the code has a clear blank margin and enough contrast against the background.
Test every placement’s code separately. Three similar-looking QR codes can easily get mixed up in a design file.
Find the visits in Google Analytics
If your destination website uses Google Analytics 4, open the Traffic acquisition report. Look at Session source / medium and Session campaign to identify your tagged traffic. See Google’s reporting instructions.
For the bakery example, you would compare visits from:
office_leaflet / print
shop_counter / print
takeaway_card / print
Then compare the outcomes that matter to you.
A flyer that brings fewer visits but more catering enquiries may be more valuable than a counter sign that attracts lots of casual browsing.
Keep distribution in mind, too. Five hundred takeaway cards and twenty office flyers have very different opportunities to generate visits. Raw totals alone don’t establish which placement performs best.
Why scans and website visits won’t match exactly
A QR-link opening, an analytics session and a customer are different things.
Someone might open the link twice. Another person might close the page before analytics loads. Consent choices, browser protections and automated requests can also affect what different systems record.
A shared short link may receive clicks from people who never saw the printed code.
Treat the numbers as complementary:
Link activity helps you understand how often the QR destination is requested.
Website sessions show the visits your analytics captures.
Enquiries, bookings or purchases show the business outcomes you record.
Avoid describing every link opening as a unique person or a completed website visit.
Three mistakes that make QR tracking less useful
Printing the same code everywhere. Create separate links when you need to compare placements.
Changing names halfway through a campaign. Decide on your labels before generating the codes, and record them in one place.
Putting customer details in tracking tags. Use campaign labels, not names, email addresses or order details. URLs can be copied, shared and stored in logs.
Start with one small campaign
You don’t need dozens of codes to learn something useful. Start with two placements, one landing page and one clear outcome.
Build the destinations in the UTM builder, create a separate short link for each, and test the printed codes before distributing them.
Then use the results to decide where your next batch of print belongs.