The Problem With Most QR Codes
You print 5,000 flyers with a QR code pointing to your website. People scan it. Traffic goes up. But you have no idea which flyer drove the traffic — the one on the coffee shop bulletin board, the one in the conference swag bag, or the one your intern taped to the office bathroom door.
This is the reality for most businesses using QR codes. They generate a code, point it at their homepage, and hope for the best. No tracking. No attribution. No way to measure ROI.
The fix is simple: UTM parameters.
What Are UTM Parameters?
UTM (Urchin Tracking Module) parameters are tags you add to the end of a URL. They don't change where the link goes — they just tell your analytics tool where the visitor came from.
A normal URL:
`https://yoursite.com/pricing`
The same URL with UTM parameters:
`https://yoursite.com/pricing?utm_source=flyer&utm_medium=qr&utm_campaign=spring-sale&utm_content=coffee-shop`
Both links land on the same pricing page. But the second one tells Google Analytics (or whatever you use) exactly how that visitor found you:
Why This Matters for QR Codes
QR codes are physical. They exist on things you can't click-track — printed flyers, product packaging, business cards, event badges, restaurant menus, window displays, direct mail.
Without UTM parameters, all QR code traffic shows up in your analytics as "direct" — lumped together with people who typed your URL manually. You can't tell what's working.
With UTM parameters baked into the QR code, every scan carries its own tracking data. You can answer questions like:
How to Build a Tracked QR Code
Step 1: Build Your UTM URL
Start with your destination URL and add parameters. Here's a practical example:
Scenario: You're a restaurant running a spring menu promotion. You're putting QR codes on table tents, window stickers, and Instagram stories.
Table tent QR code:
`https://yoursite.com/spring-menu?utm_source=table-tent&utm_medium=qr&utm_campaign=spring-menu-2026`
Window sticker QR code:
`https://yoursite.com/spring-menu?utm_source=window-sticker&utm_medium=qr&utm_campaign=spring-menu-2026`
Instagram story QR code:
`https://yoursite.com/spring-menu?utm_source=instagram&utm_medium=qr&utm_campaign=spring-menu-2026`
Same destination. Three different sources. Now you know which placement performs best.
Step 2: Generate the QR Code
Take your full UTM URL and generate a QR code. You can use FluidConvert's free QR Code Generator — paste in the full URL with parameters and download the code instantly.
The QR code doesn't care how long the URL is. UTM parameters don't make the code harder to scan — modern phones handle long URLs without issues.
Step 3: Check Your Analytics
In Google Analytics 4, go to Reports > Acquisition > Traffic Acquisition. Filter by medium = "qr" and you'll see all your QR code traffic broken down by source, campaign, and content.
You can also build custom reports to compare QR performance across campaigns, time periods, and conversion goals.
Best Practices
Be Consistent With Naming
Decide on a naming convention and stick to it. Use lowercase, hyphens instead of spaces, and keep names descriptive but short.
Bad: `utm_source=John's Flyer (March)`
Good: `utm_source=flyer-downtown&utm_campaign=march-2026`
Use utm_content for A/B Testing
Running two different flyer designs? Same source, same campaign — just change utm_content:
`utm_content=design-a` vs `utm_content=design-b`
Now you have real data on which design drives more traffic.
Don't Forget utm_medium=qr
Always tag the medium as "qr" so you can filter all QR code traffic in one view, regardless of source or campaign.
Shorten Long URLs First (Optional)
If you're concerned about QR code density (more data = more complex pattern), you can run the UTM URL through a shortener like Bitly first. The short URL redirects to the full UTM URL, keeping the QR code simple while preserving all tracking data.
That said, most modern QR scanners handle long URLs without any issue. This is an optimization, not a requirement.
Test Before Printing
Always scan your QR code with at least two different phones before sending anything to print. Verify the URL loads correctly and the UTM parameters appear in your analytics in real time.
Real-World Examples
Retail: A clothing brand puts QR codes on hang tags linking to styling guides. Each store location gets a unique utm_source. They discover their Austin store drives 3x more QR scans than Dallas — and adjust marketing spend accordingly.
Events: A SaaS company sponsors four conferences and includes QR codes on their booth banners. utm_campaign identifies each conference. Post-event analysis shows one conference generated 60% of all signups at 25% of the cost.
Packaging: A food brand adds QR codes to product packaging linking to recipes. utm_content differentiates between their pasta sauce and their salsa line. The salsa recipes get 5x more engagement — so they double down on recipe content for that product.
Real estate: An agent puts QR codes on yard signs, brochures, and direct mail. Each gets a unique source tag. Turns out yard signs drive more listing views than the $2,000/month direct mail campaign.
Common Mistakes
- Using the same QR code everywhere — defeats the entire purpose of tracking
- Forgetting to set utm_medium — makes it impossible to filter QR traffic from other channels
- Inconsistent naming — "flyer", "Flyer", "flyers", and "print-flyer" all show up as separate sources
- Not testing the code — one typo in the URL means a dead link on 5,000 printed flyers
- Pointing to the homepage — send people to a specific landing page relevant to the campaign, not your homepage
Start Tracking
Every QR code you create should have UTM parameters. Period. It takes 30 extra seconds to build the URL and gives you actual data instead of guesswork.
- Build your UTM URL with the parameters above
- Paste it into FluidConvert's QR Code Generator
- Download and print
Stop guessing which campaigns work. Start measuring.