Back to Blog
February 23, 20264 min readqrgrowth

QR code UTM tracking: a simple naming system you can actually trust

Want to measure QR code performance in Google Analytics? Use this practical UTM guide for QR campaigns: a naming convention, examples, common mistakes, and how to avoid broken links and messy attribution.

QR code UTM tracking: a simple naming system you can actually trust

QR codes are offline, but your measurement does not have to be.

If you put a QR code on a poster, menu, product label, or event badge, you should be able to answer:

  • how many people scanned it
  • which placement performed best
  • whether people converted after the scan

UTM parameters are still the easiest way to get clean attribution into analytics tools.

The problem is that most teams add UTMs in a way that creates:

  • broken links
  • unreadable URLs
  • inconsistent naming
  • duplicates across campaigns

This guide gives you a simple system that scales.

Related reading:

TL;DR

  • Use UTMs on the final destination URL, but do not encode long URLs into a static QR code.
  • For printed QR codes, use a dynamic QR that points to a short redirect URL.
  • Adopt one naming convention and enforce it.
  • Keep your UTMs boring. Boring UTMs are reliable UTMs.

What are UTMs?

UTM parameters are query parameters appended to a URL.

Example:

https://example.com/signup?utm_source=poster&utm_medium=qr&utm_campaign=spring_sale&utm_content=main_entrance

When someone visits that URL, many analytics tools can capture those fields as attribution metadata.

The core UTMs:

  • utm_source (where it came from)
  • utm_medium (the channel type)
  • utm_campaign (the campaign name)

Optional but useful:

  • utm_content (variant: placement, creative, version)
  • utm_term (typically paid search, but you can repurpose carefully)

The QR specific problem: long URLs create dense codes

A static QR code stores the full URL inside the code.

If you add UTMs directly to a long URL and encode it into a static QR, the code becomes dense, which can reduce scan speed and reliability.

That is why printed campaigns should usually use a dynamic QR code.

A dynamic QR code encodes a short redirect URL. You can then:

  • keep the QR pattern simple
  • change the destination later
  • update UTMs without reprinting

Related: Dynamic vs static QR code.

A naming convention that works

Here is a convention that is simple enough to follow and strict enough to compare results.

utm_medium

Use:

  • qr

Do not invent ten versions of “QR.” Pick one and stick to it.

utm_source

Use the physical source or placement type, not a vague channel name.

Examples:

  • poster
  • menu
  • product_label
  • receipt
  • event_badge
  • table_tent

utm_campaign

Use a stable campaign name that maps to your planning.

Examples:

  • 2026_q1_launch
  • spring_promo
  • store_opening_amsterdam

utm_content

Use utm_content for the variant you want to compare.

Examples:

  • front_window
  • cashier
  • table_12
  • booth_a3

If you do this well, you can answer: which placement converts best.

Examples you can copy

Poster to signup

Final destination:

https://yourdomain.com/signup?utm_source=poster&utm_medium=qr&utm_campaign=2026_q1_launch&utm_content=main_entrance

Menu to reviews

https://yourdomain.com/review?utm_source=menu&utm_medium=qr&utm_campaign=always_on&utm_content=back_page

Product label to instruction page

https://yourdomain.com/setup?utm_source=product_label&utm_medium=qr&utm_campaign=packaging&utm_content=v2

Common mistakes (and how to avoid them)

1) Mixing naming styles

If half your team uses Spring Sale and the other half uses spring-sale, your analytics will split the data.

Fix: decide on one style.

Recommendation:

  • lowercase
  • underscores
  • no spaces

2) Putting the campaign name in utm_source

This makes reporting confusing.

Fix: utm_source should answer “what object did they scan,” not “what quarter is it.”

3) Encoding UTMs into a static QR for print

This often results in a denser QR pattern.

Fix: use a dynamic QR and keep the encoded URL short.

4) Redirect chains that slow down the scan

If your QR goes:

QR -> shortener -> tracker -> router -> landing page

you increase latency and increase failure rate in weak connectivity.

Fix: minimize hops.

Related: QR code redirects: best practices.

5) Using UTMs as a replacement for first-party analytics

UTMs are useful, but they are not an event pipeline.

Fix: track scans and conversions as events, then use UTMs as attribution metadata.

A simple QR measurement workflow

  1. Pick your UTM convention
  2. Create one destination URL per placement
  3. Use a dynamic QR per placement
  4. Verify the destination loads fast on mobile
  5. Test on real phones in real lighting
  6. Review scans and conversions weekly

CTA: track QR scans without breaking the scan

If you want QR analytics that stays clean even when you iterate, use QRShuffle.

You can:

  • generate dynamic QR codes
  • edit destinations and UTMs later
  • keep the QR pattern simple for faster scans
  • track performance per placement

Create your first QR code: https://qrshuffle.com

QRSHUFFLE • CREATE

Create a QR code with editable links.

Print once. Update the destination later. Track scans. No reprints.

Editable

Update links without reprinting

Trackable

Scan analytics + UTMs

Fast

Built for real-world scans