Avoid Unattributed Direct Traffic With UTM for QR Codes in Four Moves

Yes, you can and should UTM a QR code. Put UTM parameters on the destination URL, shorten that tagged link, generate a dynamic QR code that points to the short link, then test the scan before it ever reaches print. Skip this and every scan lands in Google Analytics as unattributed Direct traffic, and your entire offline campaign becomes invisible.
TL;DR:
- Shortening UTM-tagged URLs before generating QR codes reduces code density, enhances scan distance, and allows for easy link updates if needed.
- Using a consistent UTM naming convention with source as “qr_code” and medium matching the placement type simplifies filtering and accurate campaign attribution in analytics.
- Conducting thorough testing, including real-world scans and contrast checks, is essential to ensure QR codes work reliably in their final printed environment.
- Relying on dynamic QR code platforms with redirect guarantees and editable destinations prevents campaign disruption if a generator platform shuts down.
- Assigning unique, short links to each placement and pairing them with specific conversion events delivers valuable attribution and performance insights beyond just scan counts.
Table of Contents
- How do you set up UTM for QR codes step by step?
- What UTM naming convention works best for QR campaigns?
- Why shorten UTM links before generating the QR?
- Why do QR scans show up as Direct traffic without UTMs?
- What happens when a QR code generator shuts down your codes?
- What tying QR scans to real campaign goals actually looks like
- Put this workflow into practice with Qrlytics
- Sources
- FAQ
How do you set up UTM for QR codes step by step?
The workflow has four moves, and getting the order right is what separates a QR code that reports cleanly from one that muddies your data.
1. Build the UTM-tagged destination URL first. Start with the page you want people to land on, then append your parameters. A typical tagged URL looks like this:
https://yourbrand.com/spring-sale?utm_source=qr_code&utm_medium=print&utm_campaign=spring_sale_260315&utm_content=poster_high_street
Keep everything lowercase, use underscores consistently, and never leave spaces in a parameter value. This step happens before you touch a QR generator.
2. Shorten the tagged URL. A full UTM string can be quite long once you add source, medium, campaign, and content values. Feeding that raw into a QR generator forces a denser code with smaller modules, which struggles at distance or on curved surfaces. Shortening the URL first keeps the QR simple and reliable, and if the short link is dynamic, you can repoint it later without reprinting anything.
3. Generate a dynamic QR code from the short link. Point the QR at the short URL, not the long tagged one. For print, export as SVG wherever the file allows vector scaling; use PNG at 300 DPI or higher only when SVG isn’t supported by the print vendor.
4. Test before it goes anywhere near a printer. Scan the code with at least two different phone models and both major operating systems. Confirm the browser address bar shows the full UTM string after any redirect, then check that the session appears in your analytics in real time.
Before signing off on a print run, run through this checklist:
- Print a physical sample at final size, not just on screen.
- Check the quiet zone (the blank border) is untouched by design elements.
- Verify contrast between the QR and its background meets a clear light/dark threshold.
- Test scan distance matching the code’s real placement (a poster read from six feet needs a larger code than a table card read from twelve inches).
- Confirm minimum module size hasn’t been compressed by a template or resizing tool.
Pro Tip: Build your UTM list in a spreadsheet before you shorten anything. Tools like Microsoft Excel make it far easier to catch typos and duplicate campaign names across dozens of placements than trying to review them one at a time in a URL shortener.
For a look at how this plays out across flyers, packaging, and live events, see how teams handle printed material tracking at scale.
What UTM naming convention works best for QR campaigns?
Consistency matters more than cleverness here. A QR-focused UTM builder typically pre-fills utm_source=qr_code and utm_medium=print or offline, which is worth adopting even if you build links manually, because a fixed utm_source value makes filtering every QR scan trivial later in your reporting.
Recommended pattern:
utm_source=qr_codeutm_medium=print(oroffline,event,packagingdepending on placement type)utm_campaign=springsale_260315(initiative name plus a date suffix, so repeat campaigns never collide)utm_content=poster_highstreet(the specific placement, not the campaign)
Quick examples:
| Placement | utm_content value |
|---|---|
| Magazine advert | magazine_marchissue |
| Poster at bus stop | poster_busstop |
| Table card in restaurant | tablecard_dining |
Lowercase everything, pick underscores or hyphens and stick with one, and never reuse a utm_campaign value across two different pushes.
Why shorten UTM links before generating the QR?
A QR code’s density is measured in “versions,” and every extra character in the encoded URL can push the code to a higher version with smaller, more tightly packed modules. Long UTM strings are prime offenders. Shortening the tagged URL before encoding keeps the module size larger and the code easier to scan from a distance or in poor lighting.
This is also where the static-versus-dynamic decision matters:
- Dynamic QR codes point to a short link you control, so you can fix a broken UTM, swap a landing page, or redirect an entire campaign after the code is already printed on ten thousand flyers.
- Static QR codes encode the destination directly with no way to edit it later, fine only for genuinely permanent content like a business card or a plaque.
For print output, SVG scales cleanly at any size, while PNG needs enough resolution (300 DPI minimum) to survive enlargement. Landing pages should also meet basic accessibility standards, following guidance such as Section 508, since anyone reaching your page via a scan deserves the same usable experience as anyone arriving from a search result.
If it still reads cleanly there, it’ll read cleanly everywhere.*
Why do QR scans show up as Direct traffic without UTMs?
A scanned QR code opens a URL exactly like typing it into a browser, with no referring page attached, so Google Analytics 4 files it under Direct traffic unless UTM parameters tell it otherwise. Every scan you can’t attribute is a scan that looks, statistically, identical to someone who typed your URL from memory.
Verifying that your UTMs are actually working takes three steps:
- Open GA4’s Realtime report, then scan your test code from a phone on mobile data (not the office Wi-Fi, which can behave oddly with some redirect chains).
- Watch the Realtime overview for the active user, then check the “Traffic acquisition” report a few minutes later to confirm the session grouped correctly under your source and medium.
- Add
utm_contentas a secondary dimension in that report to compare individual placements, and export the results to Looker Studio if you need a dashboard for stakeholders.
If a scan doesn’t show up correctly, check three culprits first: a redirect that strips query strings on the way to the final page, a CMS or page builder that scrubs URL parameters automatically, and an ad-blocker preventing the analytics script from firing at all. Any one of these can make a perfectly good UTM vanish before it’s ever recorded.
Dynamic QR platforms typically log scan metadata like timestamp, device type, and approximate location independently of GA4, which gives you a second data source to cross-check against when a report looks off. For a broader view of connecting scan data to your existing analytics stack, this QR code tracking guide covers the integration side in more depth, and if you’re troubleshooting unusual traffic patterns, this GA4 breakdown on identifying non-standard sources is a useful companion read.
What happens when a QR code generator shuts down your codes?
The most damaging failure in QR marketing has nothing to do with UTMs. It’s operational: a free generator suspends your account, or you cancel a subscription, and every code you’ve printed goes dead overnight. Posters, packaging, signage, all pointing at a broken link with no way to fix it short of a full reprint.
Before committing to any platform for a print campaign, check for:
- A permanent redirect guarantee that survives billing changes or cancellations.
- Dynamic URL editing, so you can correct a UTM mistake or update a destination after printing.
- Exportable analytics (CSV at minimum) so your data isn’t locked inside one dashboard.
- GDPR-compliant tracking, particularly if scans originate from EU-based audiences.
- Scan heat maps, useful for comparing performance across physical placements like storefronts versus events.
- Onboarding that doesn’t demand a credit card just to test the workflow.
Qrlytics is built around exactly this checklist: dynamic QR codes that stay editable after printing, redirect permanence that isn’t tied to your billing status, and analytics designed for exactly the kind of validation described above.
What tying QR scans to real campaign goals actually looks like
Give every physical placement its own short link, not just its own utm_content value. That’s the only way to know whether the window decal or the receipt insert actually drove the scan. Pair each landing page with a defined conversion event, because scan counts alone tell you reach, not value. Feed short-link data alongside GA4 into your CRM where it’s available, so attribution gaps surface early rather than at quarter’s end.
— The.
Put this workflow into practice with Qrlytics
Some platforms provide a dynamic QR layer with editable codes after printing, redirect guarantees unrelated to billing issues, real-time scan analytics with heat maps, and GDPR-compliant tracking. Onboarding can be quick and may not require a credit card, letting users build UTM-tagged links, shorten them, and generate codes without upfront commitments.

Start by creating a code with the free QR code generator and running it through the pre-print checklist from this guide. Once you’re ready to manage campaigns at scale, with editable destinations and full analytics and heat maps, move up to the dynamic QR code generator and keep every printed placement trackable for as long as the campaign runs.
Sources
FAQ
Can you UTM a QR code?
Yes. Add UTM parameters to the destination URL before generating the code, since the QR itself just encodes whatever link you give it.
How do I get a UTM link for a QR code?
Build your destination URL with utm_source, utm_medium, utm_campaign, and utm_content parameters appended, then shorten that tagged URL before encoding it into the QR code.
Is a UTM the same as a URL?
No. A UTM is a set of tracking parameters added to the end of a URL. The URL is the destination; the UTM parameters are the tags that tell your analytics where the visit came from.
How do I make a URL for a QR code?
Start with your landing page address, append UTM parameters for source, medium, campaign, and content, shorten the result, and use that short link as the QR code’s destination rather than encoding the long tagged URL directly.
Why do QR scans show up as Direct traffic in GA4 without UTMs?
A scan behaves like someone typing a URL directly into a browser, with no referrer data attached, so GA4 defaults it to Direct unless UTM parameters specify the actual source and medium.