MakeQR

Google Analytics QR Code Tracking

A UTM link trick, not a built-in feature

  • Free, and no account to create
  • Never expires, unlimited scans
  • Checked to scan before you print it

Free and permanent, but it can never be edited or tracked once printed.

Scan to test

Y
yoursite.com
Print as poster, table card or stickers · free for 14 days with an account

Free, no account. Works forever and never expires.

Google Analytics QR code tracking works by adding UTM parameters to the link a code points to, not through any built-in integration. MakeQR encodes the full URL exactly as typed, parameters included, so Analytics attributes visits from the code to whatever source and campaign you define, the same way it tracks any tagged link.

Google Analytics QR code tracking isn't a feature built into a QR generator — it's a URL trick that works with any of them. Add UTM parameters to the link a code points to, and Google Analytics attributes every visit arriving through that link to a source and medium you define, the same way it tracks a link in an email or an ad. A MakeQR code, static or dynamic, works for this because it encodes the URL exactly as typed, UTM parameters included, with nothing stripped or rewritten along the way.

  1. Build the destination URL with UTM parameters

    Add utm_source, utm_medium and utm_campaign to the end of the page's URL — for example utm_source=qr, utm_medium=print, utm_campaign=storefront-poster — using Google's Campaign URL Builder or typing them in directly.

  2. Paste the full URL into the generator

    Use the complete link, parameters included, as the code's content. Nothing about a QR code affects how the parameters travel; the phone opens exactly the URL that's encoded.

  3. Choose static or dynamic based on whether the campaign will change

    A one-off flyer with a fixed campaign name is fine as a free static code. A poster reused across campaigns benefits from a dynamic code, since the underlying link and its UTM parameters can be updated without reprinting.

  4. Confirm the parameters survive a real scan

    Scan the printed or on-screen code with your own phone and check the address bar shows the full URL with parameters intact before relying on it for a live campaign.

  5. Check Google Analytics after the first scans come in

    Traffic tagged with utm_source=qr appears in Analytics' acquisition reports after the platform's normal processing delay, grouped by whatever source and medium values were set.

What Google Analytics actually sees

Analytics has no idea a QR code was involved — it only sees a visit arriving at a URL with certain parameters attached. That's why the parameters have to be set deliberately: without them, a scan looks identical to someone typing the same address directly, and the two get grouped together in reports.

Two counts, tracking two different things

MakeQR's own dynamic codes show a separate count of how many times the code itself was scanned. Google Analytics tracks the opposite: everything that happens once someone lands on the page, tied to the UTM tag rather than to the code. Running both together gives a fuller picture than either alone — a scan count that doesn't line up with the matching Analytics figure usually means some scans didn't finish loading the page, worth investigating on its own.

Keeping campaign names usable as they grow

Consistency in the UTM values matters more than the exact words chosen. Using one fixed utm_medium value across every printed code, rather than mixing 'qr', 'QR-code' and 'scan' between campaigns, is what keeps the source data usable once a handful of codes becomes dozens.

What's actually stored in the code

The full destination URL, parameters and all, exactly as built — nothing UTM-specific happens inside the QR pattern itself. A scanner reading the raw code sees the same link as anyone reading the URL directly.

Inside the code
https://example.com/menu?utm_source=qr&utm_medium=print&utm_campaign=storefront-poster

Printing a tracked code without changing the rules

UTM parameters add length to the encoded URL but don't otherwise change how the code should be sized or placed — print it at roughly one-tenth the intended scanning distance, at least 20mm on a card.

Print it at least 20 mm (2.0 cm) wide

Where UTM-tracked codes go wrong

  • Reusing one UTM tag across every code

    A single generic tag on every printed code collapses all campaigns into one line in Analytics, which defeats the purpose. Give each placement — storefront, flyer, vehicle wrap — its own campaign value.

  • Forgetting the code after the campaign plan changes

    A static code with an outdated UTM tag still works and still gets scanned, but every visit is now misattributed. A dynamic code lets the underlying link update without a reprint; a static one needs a new code entirely.

  • Not testing the parameter string for typos

    A single misspelled parameter name means Analytics won't recognize it at all, and the traffic falls into an unassigned or direct bucket instead of the intended campaign.

Static or dynamic for a UTM-tagged code

Static works for a fixed campaign that won't be revised. Dynamic is worth using one of the free tier's two codes for if the same physical sign or card gets reused for a different campaign later — updating the UTM tag behind a dynamic code is a link edit, not a reprint.

How dynamic QR codes work

Situations where UTM tracking on a QR code helps

  • A retailer comparing scan volume from a window sticker against an in-store table tent.
  • A direct-mail postcard measured against the same offer run as a QR code in a print ad.
  • A trade show badge insert tracked separately from the booth's own standee code.
  • A vehicle wrap code tagged distinctly from a matching flyer to see which drives more site visits.

A QR code that still works next year

Most of what goes wrong with a QR code happens after it is printed. These six things are why ours does not.

  • Checked before you print

    We decode every code you make and read it back. If a logo covers too much or a colour is too faint for paper, you find out here — not after the print run.

  • Unlimited scans, every plan

    Including the free one. A scan cap kills a printed code at the moment it starts working, which is why we do not have one.

  • We do not switch off your codes

    Two dynamic codes stay yours permanently, whatever you pay us. Cancel a paid plan and you keep them — the rest pause after 30 days, with three warnings first, and a paused code shows a neutral page, never a sales page.

  • Made on your device

    Static codes never reach our servers. Your WiFi password, your contact details and your logo stay in the browser — which is also why there is no limit.

  • Ready for the printer

    SVG for anything that gets scaled, and PNG at 1024px so the edges stay hard. Both free, no account.

  • Available in English, Norwegian Bokmål, Danish, Swedish, German, French, Dutch, Italian, Spanish, Finnish, Portuguese, and Polish

    The generator and every page speak English, Norwegian Bokmål, Danish, Swedish, German, French, Dutch, Italian, Spanish, Finnish, Portuguese, and Polish. More languages follow as each one is reviewed by a native speaker.

See what happens after you print

A dynamic code points at a short link you own. Change where it goes without reprinting anything, and see how often each code has been scanned and when the last scan was.

  • Change the destination any time, as often as you like
  • A scan count and the last scan for every code
  • No scan limit, on any plan
  • Cancel and you keep two codes permanently — the rest pause after 30 days
Start free

2 codes free. Paid from $7/month. Compare plans

MakeQRCNCafe Nord

Analytics

Aug 14 – Sep 12

7D30D90D1Y

Total scans

11,875

18%

Unique scanners

8,431

14%

Active codes

24

3

Scans per day

396

18%

Scans over time

0
200
400
600
800
Aug 14Aug 21Aug 28Sep 4Sep 11

Devices

62%

of scans came from an iPhone

  • iPhone62%
  • Android34%
  • Other4%

Google Analytics QR Code Tracking: questions and answers

Short answers to what people ask before they print. Anything else, write to us.

Ask us something else

Does MakeQR integrate directly with Google Analytics?

No. There's no built-in integration — UTM tracking works because the full destination URL, parameters included, is encoded exactly as typed. Any analytics platform that reads UTM parameters works the same way.

Do I need a dynamic code for UTM tracking to work?

No. UTM parameters are part of the URL itself, so a free static code tracks just as well as a dynamic one, as long as the campaign details won't need to change later.

Why don't my QR scans show up in Analytics right away?

Analytics reports run on the platform's normal processing delay rather than in real time. Confirm the link itself works first, then allow for that delay before assuming the tracking failed.

Can I see the scan count and the Analytics visits together?

MakeQR's dynamic scan count and Google Analytics measure different things — one counts scans of the code, the other counts sessions on the destination — and the two figures can differ if some scans don't complete the page load.

What UTM medium should I use for a printed QR code?

There's no required value, but picking one term, commonly 'qr' or 'qr-code', and using it consistently across every code keeps campaign reports comparable over time.

Make a code that still works next year

Free static codes with no account, two permanent dynamic codes, unlimited scans on every plan, and a check that tells you it scans before you print it.

Make a QR code

No account for static codes. Nothing to cancel.