Why Your QR Code Scans Disappear in Google Analytics (Plain-English Primer)

A marketing team spends thousands on a trade show banner, prints a QR code on it, and generates hundreds of scans over three days. A month later, someone asks what the event produced. The analytics report shows nothing. Not a small number: nothing attributable at all. The visits arrived, the leads were captured, and every one of them was filed under “Direct,” the same bucket as people who typed the web address from memory.

This is one of the most common and least discussed measurement failures in marketing, and it is entirely preventable. Roughly 776,000 US searches a month look for a QR code generator, and another 119,000 look for a free one, according to Ahrefs data. Searches asking how to track what those codes produce total around one thousand a month combined. The gap between how many codes get made and how many get measured is where a great deal of marketing budget quietly dies.

What Actually Goes Wrong

A QR code is not a tracking technology. It is a picture of a link. Whatever the link does, the code does. So the entire problem, and the entire solution, lives in the URL encoded inside the square.

There are exactly two failure modes:

  • No campaign parameters. The printed link is just the destination page. Analytics has no information about where the visitor came from, so it defaults to Direct. The campaign is invisible.
  • Wrong campaign parameters. The link carries UTM tags, but the utm_medium value does not match any of Google Analytics 4’s channel rules. The traffic lands in “Unassigned,” which is arguably worse, because someone did the work and still lost the credit.

GA4 sorts traffic into channels using a fixed, published rule set that cannot be edited. Print and QR have no built-in channel at all, which is why so many well-intentioned tagging efforts still produce nothing usable.

The Five UTM Parameters, in Plain English

UTM parameters are just labels appended to a URL. There are five, and only two are mandatory.

  • utm_source (required): where the link physically lives. For print, something like tradeshow_banner or direct_mail.
  • utm_medium (required): the channel type. This is the field that decides which GA4 channel the traffic reports under, and the one that causes most failures.
  • utm_campaign: the specific initiative, such as fall-2026-expo.
  • utm_content: which placement, useful when the same campaign appears on a banner, a flyer, and a badge.
  • utm_term: originally for paid keywords, rarely needed in print.

Two rules prevent most of the damage. First, GA4 is case sensitive, so Email and email become two separate rows in a report; standardize on lowercase everywhere. Second, pick one medium value for print and QR, use it identically across every asset forever, then build a custom channel group in GA4 (Admin, then Data display, then Channel groups) so that value reports on its own line instead of falling into Unassigned.

A Free Tool That Enforces the Rules

Most QR generators are indifferent to all of this. They produce a code from whatever link is pasted in and treat measurement as someone else’s problem. Strativera, a digital marketing and revenue operations firm based in Cherry Hill, New Jersey, released a free QR code generator with UTM tracking designed around the opposite assumption: that the tagging is the point and the code is the output.

The tool requires the tagged link to be built first. Its medium selector is deliberately restricted to values that map to real GA4 channels, it lowercases values automatically to prevent the case-sensitivity split, and it warns against hand-tagging Google Ads destination URLs, where automatic tagging takes precedence and manual parameters can distort attribution. It also encodes the physical print rules most generators ignore, including minimum code size based on scanning distance, the required blank quiet zone around the code, dark-on-light contrast, and vector SVG output that stays sharp at any print size.

Two further details are worth noting for teams evaluating options. It requires no account, no email, and no signup. And it runs entirely inside the browser, meaning destination URLs and campaign names are never uploaded or stored anywhere, which matters when a campaign URL would otherwise reveal an unannounced launch to a third-party service.

“The reporting problem is almost never a technology problem, it is a discipline problem,” said Joe Levy, Co-Founder and President of Strativera. “Real budget goes into print, events, and packaging, none of it shows up in the data, so digital channels absorb all the credit and all the next budget. The fix costs nothing, which is exactly why nobody sells it to you.”

Print Rules That Decide Whether a Code Even Scans

Tracking is wasted if the code fails in the physical world. Four rules cover most failures:

  • The 10:1 rule. Minimum code width equals the expected scanning distance divided by ten. A flyer read at arm’s length needs roughly 2 to 2.5 cm; a poster read from a meter away needs about 10 cm; a banner read from three meters needs about 30 cm.
  • Never smaller than 2 cm in print. Below that, phone cameras begin failing regardless of resolution.
  • Dark on light, always. Cameras read luminance. Inverted light-on-dark codes fail on a meaningful share of devices.
  • Keep the quiet zone. The blank margin around the code is part of the specification, not decoration. Cropping it breaks scanning.

One more practical habit: test-scan the final printed size on more than one phone before committing to a print run. A code that works on the designer’s screen can fail on a matte banner under trade show lighting.

Frequently Asked Questions

Why do my QR scans show up as Direct?

The printed URL almost certainly carried no UTM parameters. Analytics had nothing to attribute the visit to, so it defaulted to Direct.

What is the difference between static and dynamic codes?

A static code encodes the destination permanently and is free forever. A dynamic code points to a redirect service that can be changed later and often reports its own scan counts, but it depends on a paid subscription remaining active. If that service lapses, every printed code stops working. Static codes with proper UTM tagging give durable tracking without that dependency.

Do I need a custom channel group in GA4?

If you want print and QR traffic to report on their own line rather than in Unassigned, yes. It takes a few minutes to configure once and applies to everything afterward.

Can I use this approach for Google Ads?

No. Google Ads automatic tagging takes priority, and stacking manual UTMs on top can misattribute clicks. Use manual tagging for what auto-tagging never sees: email, organic social, print, QR, affiliates, and PR.

The Bigger Point

Every tracking-related search checked in the data behind this article already returns an AI-written answer box, meaning the next generation of marketers asking how to measure print campaigns will get their answer assembled by a machine from whoever explained it clearly. The fundamentals will not change: tag the link, standardize the medium, give print its own channel, and test the code before printing.

Companies wanting a wider review of how their tracking, funnel, and site perform can request Strativera’s free growth audit, in which a senior operator returns a written assessment of where pipeline is leaking. But the QR fix itself requires no budget and no vendor. It requires one team agreement and about ten minutes, which is precisely why so few companies have gotten around to it.