QR Code Best Practices: The Guide for Marketers Who Actually Measure Results
QR codes are everywhere again — but most marketers deploy them without UTM tracking, test scanning, or size guidelines. Here's how to build a QR strategy that you can actually measure.
A QR code is a two-dimensional barcode that encodes a URL (or other data) into a scannable image. When a user scans it with a smartphone camera, it opens the encoded URL in their browser. For marketers, QR codes bridge offline and online touchpoints — print ads, product packaging, event signage, and out-of-home placements can all trigger measurable digital journeys.
The problem is that most QR codes in the wild are deployed incorrectly: no UTM tracking, no redirect layer for analytics, untested at actual print sizes, and with no plan for what happens if the destination URL changes. This guide fixes all of that.
Quick answer: Always add UTM parameters to every QR code destination URL before generating the code — because the QR code scan produces no referrer data whatsoever, making UTM tagging the only way to attribute traffic in GA4. Use
utm_medium=qrand setutm_sourceto the physical context (print, packaging, event, billboard). Route all QR codes through a redirect URL you control so you can update the destination without reprinting.
Table of Contents
- Why QR Codes Produce "Direct" Traffic Without UTMs
- UTM Strategy for QR Codes
- The Redirect Layer: The Most Overlooked Best Practice
- QR Code Size Guidelines for Print
- Error Correction and Scan Reliability
- Design Best Practices
- Testing Before You Print
- Measuring QR Code Performance
- Common QR Code Mistakes
- FAQ
Why QR Codes Produce "Direct" Traffic Without UTMs
When a user scans a QR code, their camera app or QR scanner opens the URL in a browser. No referrer header is passed. From Google Analytics 4's perspective, the visit looks exactly like someone typed the URL directly — it shows up as "Direct / None" in your source/medium reports.
This is the fundamental attribution problem with QR codes. Unlike a digital ad click (which carries gclid or UTM data) or an organic search (which carries a referrer from Google), a QR scan arrives completely dark.
Without UTM parameters embedded in the QR code's destination URL, you have no way to:
- Know how many people scanned the QR code
- Compare performance across different QR placements (storefront vs. packaging vs. flyer)
- Calculate conversion rate from scan to purchase
- Justify QR code placements to stakeholders
UTM tagging is not optional for QR codes — it's the only attribution mechanism available.
UTM Strategy for QR Codes
Because every QR scan arrives without a referrer, your UTMs carry all the attribution weight. Here's the recommended parameter structure:
| Parameter | Recommended value | Notes |
|---|---|---|
utm_medium | qr | Consistent across all QR placements |
utm_source | Physical context | print, packaging, event, billboard, in-store, direct-mail |
utm_campaign | Campaign name | e.g., summer-sale-2026, product-launch-q3 |
utm_content | Specific placement | e.g., storefront-poster, unboxing-insert, brochure-page-3 |
Example UTM-tagged QR URLs
Product packaging:
https://yoursite.com/shop/?utm_source=packaging&utm_medium=qr&utm_campaign=product-launch-q3&utm_content=unboxing-insert
Event table signage:
https://yoursite.com/demo/?utm_source=event&utm_medium=qr&utm_campaign=summit-2026&utm_content=booth-table-card
Billboard:
https://yoursite.com/?utm_source=billboard&utm_medium=qr&utm_campaign=brand-awareness-q2&utm_content=highway-101-south
In-store shelf talker:
https://yoursite.com/products/x/?utm_source=in-store&utm_medium=qr&utm_campaign=summer-endcap&utm_content=aisle-7-shelf
Use the UTM Builder on MarketerTools to generate these URLs consistently, then paste the output into the QR Generator to create your code.
The Redirect Layer: The Most Overlooked Best Practice
There's a problem with encoding long UTM-tagged URLs directly into QR codes: you can never update them.
A QR code encodes a specific URL. If that URL is your final destination with UTMs baked in, and your website structure changes, your campaign ends, or your landing page moves — the printed QR codes now lead to dead ends. You'd need to reprint everything.
The solution is a redirect layer: instead of encoding the final UTM URL, encode a short redirect URL that you control and can update without touching the printed material.
There are two ways to do this:
Option 1: Use a URL shortener that supports redirect updating. Tools like Bitly, Rebrandly, or your own short domain (via the URL Shortener on MarketerTools) can create a short URL that redirects to your UTM-tagged destination. If the destination changes, you update the redirect — the short URL in the QR code stays the same. The QR code itself never needs to be reprinted.
Option 2: Use a vanity URL on your own domain.
Set up a redirect like yoursite.com/scan/packaging-spring-2026 that redirects to your UTM-tagged product page. You control this server-side redirect and can update the destination at any time.
Important: whichever redirect method you use, make sure it's a 301 or 302 redirect — not a JavaScript redirect or a meta refresh. Some QR scanner apps won't follow JS redirects, which breaks the whole flow.
Also ensure the redirect preserves (or adds) UTM parameters. If your short URL redirects to a UTM-tagged destination, confirm that the UTM parameters survive the redirect chain by testing with GA4 DebugView after scanning.
QR Code Size Guidelines for Print
QR code scannability depends heavily on physical size. Too small and modern smartphones can't reliably decode the dense pixel pattern; too large and it dominates the visual layout unnecessarily.
| Print context | Minimum recommended size | Typical range |
|---|---|---|
| Business card | 2.5 cm × 2.5 cm (1 in × 1 in) | 2.5–3.5 cm |
| Flyer / A5 | 3 cm × 3 cm | 3–5 cm |
| Poster / A3 | 4 cm × 4 cm | 4–8 cm |
| Brochure page | 3.5 cm × 3.5 cm | 3.5–6 cm |
| Retail shelf talker | 3 cm × 3 cm | 3–5 cm |
| Product packaging (small) | 1.5 cm × 1.5 cm | 1.5–2.5 cm |
| Product packaging (large) | 2 cm × 2 cm | 2–4 cm |
| Window decal | 5 cm × 5 cm | 5–12 cm |
| Billboard / large format | 10 cm × 10 cm minimum | 10–30+ cm |
| Trade show banner | 8 cm × 8 cm minimum | 8–20 cm |
General rule: the QR code should be at least 1/30th of the scanning distance. If someone will scan from 30cm away, the minimum size is 1cm. If scanning from a car window (3m), minimum is 10cm. For billboards, factor in that drivers or pedestrians may be 5–10m away.
The minimum module size (the individual black squares in a QR code) should be at least 0.5mm in print to be reliably scannable on most modern smartphone cameras. At very small print sizes with high-density (many encoded characters) QR codes, module size can drop below this threshold — which is why keeping URLs short (via a redirect layer) directly impacts scan reliability.
Error Correction and Scan Reliability
QR codes have four error correction levels that determine how much of the code can be damaged or obscured while still being scannable:
| Level | Can survive | Code density | Use case |
|---|---|---|---|
| L (Low) | 7% damage | Smallest / least dense | Clean digital environments, no logo overlay |
| M (Medium) | 15% damage | Moderate | General use default |
| Q (Quartile) | 25% damage | Denser | Packaging, environments with potential wear |
| H (High) | 30% damage | Densest | Logos embedded in center, outdoor environments |
Choose H (High) for any QR code that will:
- Have a logo embedded in the center of the code
- Be printed on packaging that may experience wear, moisture, or handling damage
- Appear outdoors where UV degradation, rain, or scuffing is possible
- Be placed on surfaces with any visual complexity (wood grain, fabric, irregular textures)
Choose M (Medium) for:
- Standard digital placements and screens
- Clean print environments (flyers, brochures, posters)
- Any code without logo embedding
Higher error correction makes the code slightly denser (more modules per area), which is why it's more important to keep your encoded URL short when using H correction at small print sizes.
Design Best Practices
Most QR codes generated by generic tools look identical — black squares on a white background. Custom design improves scan rates by making codes visually distinct and trustworthy, but only within certain constraints.
What you can safely customize:
- Color: Can replace black modules with any dark color, and white/quiet zone with any light color. Maintain sufficient contrast (minimum 40% luminance difference between module and background colors). Dark modules on light background always — never light-on-dark.
- Logo in center: Can embed a logo image in the center "quiet zone" of the code. Size the logo to no more than 30% of the total QR code area. Use H error correction when embedding a logo.
- Rounded modules: Many QR generators support rounded or "dot" style modules instead of sharp squares. Scannable as long as the individual modules remain distinct and sufficiently contrasted.
- Corner eye style: The three square "position detection patterns" in the corners can be customized (rounded corners, dot patterns). Keep them recognizable as the high-contrast squares that QR readers use for orientation.
What will break scannability:
- Inverting colors (light modules on dark background) — most QR readers expect dark on light
- Removing or obscuring the quiet zone (the white border around the code) — requires at least 4 module widths of quiet zone on all sides
- Reducing contrast below readable threshold (e.g., light gray on white)
- Embedding a logo larger than 30% of code area
- Distorting the code's proportions (QR codes must be square)
Use the QR Generator on MarketerTools to customize color, style, error correction, and download at print-ready resolution.
Testing Before You Print
This step is non-negotiable: test your QR code on physical print material at actual production size and in actual environmental conditions before your full print run.
Testing checklist:
- Print a proof at final size — don't test on screen or at a different size than production
- Scan with multiple phones — iPhone (native camera), Android (native camera), and an older mid-range Android. Scan rates can vary significantly across devices and OS versions
- Test at expected scanning distance — not held right up to the camera. If it's a poster that people scan from arm's length, test from arm's length
- Test in actual lighting conditions — QR codes in glossy print under direct overhead lighting can glare. Test under the lights that will actually be present (store lighting, natural light, etc.)
- Verify the redirect chain — scan the code and confirm you land on the correct destination page with UTM parameters intact. Check GA4 DebugView to confirm the session registers with the correct source/medium
- Test with and without internet — some QR codes are designed for offline environments; confirm your use case is handled
Measuring QR Code Performance
Once your UTM strategy is in place and QR codes are live, here's what to measure and where:
In GA4:
- Sessions by source/medium filtered to
medium = qr— total scan volume - Source breakdown within
medium = qr— which physical placements drive the most scans - Campaign breakdown — how different campaigns perform in QR volume
- Goal/conversion rate — what percentage of scans complete your target action
Key metrics to track:
| Metric | What it tells you |
|---|---|
| Sessions (utm_medium=qr) | Total scan volume |
| Conversion rate (scans → goal) | Landing page quality for QR traffic |
| Bounce rate | Whether the page context matches scan intent |
| Sessions by utm_source | Which physical placements drive volume |
| Sessions by utm_content | Which specific creative/placement performs best |
| Sessions by utm_campaign | Campaign-level QR contribution |
If you use a redirect layer with analytics: tools like Bitly Analytics, Rebrandly, or your own URL shortener can also give you raw scan counts independent of GA4 (important since some users may decline cookies, meaning GA4 undercounts slightly while your redirect layer counts the actual HTTP request).
Common QR Code Mistakes
1. Linking directly to a homepage with no tracking. A QR code that sends everyone to your homepage with no UTM parameters and no dedicated landing page gives you zero actionable data. Always link to the most specific relevant page and always add UTMs.
2. Encoding a URL you can't update. Printing 50,000 flyers with a QR code that goes directly to a promotional page that will expire in 30 days. Use a redirect layer.
3. Printing at sizes too small to reliably scan. Anything below 2cm on a physical print surface is risky with a complex or high-density QR code. Keep URLs short; use the redirect layer.
4. No quiet zone around the code. Placing a QR code flush against a colored background without a white border. The quiet zone (white space around the perimeter) is required for scanners to identify where the code starts and ends. Minimum: 4 module widths on all sides.
5. Low contrast color choices. Dark green modules on a medium-green background. Dark gray on light gray. Any color combination with insufficient contrast will fail to scan on many devices.
6. Not testing the full user journey. Scanning the code and confirming it opens "something" is not sufficient testing. Confirm that: the specific URL is correct, UTM parameters are present, the page loads correctly on mobile, and the page makes sense given the context where the QR code appears.
FAQ
What is a QR code? A QR code (Quick Response code) is a type of two-dimensional matrix barcode that can encode a URL, text, or other data into a scannable image. When scanned with a smartphone camera, it instantly opens the encoded URL in the device's browser. QR codes were invented in 1994 by a Toyota subsidiary for tracking automotive parts and were repurposed for marketing after smartphone camera apps gained native scanning support around 2019-2020.
Do QR codes expire? The QR code image itself never expires — it permanently encodes whatever URL was used to generate it. However, if the destination URL is taken down, redirected, or the domain expires, the QR code will lead to a dead end or error page. This is why using a redirect layer (a short URL you control) is so important — it lets you update the destination without reprinting the QR code.
How do I track QR code scans in Google Analytics 4?
Add UTM parameters to the destination URL before generating the QR code. Use utm_medium=qr, utm_source set to the physical context (e.g., packaging, print, event), and utm_campaign for the campaign name. In GA4, filter sessions by Session medium = qr to see all QR scan data. Because QR scans produce no referrer data, UTM parameters are the only attribution mechanism available.
What size should a QR code be for a flyer? For a standard A5 or letter-size flyer, a minimum of 3cm × 3cm (approximately 1.2 inches square) is recommended. For a larger A4/letter poster, 4–5cm works well. The general rule is that the QR code should be at least 1/30th the size of the maximum expected scanning distance. Test the physical print at production size before the full run.
Can I put a logo in the center of a QR code? Yes, with conditions. Use H (High) error correction level, which allows the code to survive 30% damage or obstruction — including a logo overlay. Size the logo to no more than 30% of the total QR code area. After adding the logo, always test the combined image for scan reliability across multiple devices before publishing.
What is the best QR code error correction level? For most print applications, M (Medium, 15% error correction) is the default. For outdoor use, packaging that may get wet or worn, or any code with a logo in the center, use H (High, 30% error correction). Higher error correction makes the code slightly denser, which is why using a short URL (via a redirect layer) is especially important when combining high error correction with small print sizes.
Why does my QR code show as direct traffic in GA4? Because QR code scans don't produce referrer data — the scan opens a URL directly in the browser without any HTTP referrer header, which looks identical to a user typing the URL manually. The only way to distinguish QR traffic from true direct traffic is UTM parameters on the destination URL. If your QR code links to an untagged URL, you have no way to measure it in GA4.
Can I use a QR code on a digital screen? Yes, though it's less common. QR codes on digital screens (event presentations, social posts, TV ads) work but require the viewer to hold their phone camera up to the screen — which is a higher friction experience than clicking a link. They're most appropriate for TV, outdoor digital signage (DOOH), and live presentations where the audience doesn't have a clickable alternative. For all digital placements where the user is already on a device, a click-through link is always lower friction than a QR scan.
How do I make a QR code for print that won't need reprinting?
Route the QR code through a redirect URL you control rather than encoding the final destination URL directly. Create a short URL (using a URL shortener with redirect-update capability) or a vanity URL on your own domain (like yoursite.com/scan/campaign-name) that you can update server-side without touching the QR code image. Print that redirect URL as the encoded destination. If your campaign changes or the page moves, update the redirect — not the printed material.
MarketerTools
Marketing Practitioners
Written by the MarketerTools team — practitioners who build and use tools for marketers every day.
Put this into practice
Use the free tools on MarketerTools to apply what you just read.
Browse all tools →