Most QR codes in marketing fail quietly. Nobody complains that the code on a flyer led to a slow homepage, or that the one on a shop window was too small to scan from the pavement. People simply do not scan, or they scan once, bounce, and never become a measurable visit. The printer is paid, the campaign "ran", and nobody can say whether it worked.
That is a waste, because a QR code is one of the few cheap ways to connect a physical moment (a poster, a package, a table, a business card) to a page you control and a session you can measure. Phone cameras on both major mobile platforms read QR codes natively, so the old objection that people need a special app no longer applies. The remaining problems are all decisions the marketer makes: where the code goes, what kind of code it is, how it is printed, where it points and how it is tagged.
This guide walks through those decisions in the order you will meet them on a real job, with the settings we use, a worked example with numbers, and the security problem that has grown alongside QR adoption: fake codes stuck over real ones.
Where a QR code earns its place on a printed piece
A QR code works when three conditions meet: the person has a reason to want more than the print can give them, they have a few seconds of attention to spare, and they can hold a phone steady at a sensible distance. If one of those is missing, the code is decoration.
Think about the moment of scanning rather than the medium. Someone waiting at a bus shelter has time but may be 3 metres away. Someone holding a product box has the distance right and is often motivated (setup instructions, a recipe, a warranty). Someone driving past a billboard should never be asked to scan anything.
| Placement | Typical scan context | Fit for a QR code | Best destination |
|---|---|---|---|
| Product packaging and inserts | At home, close range, motivated owner | Strong | Setup guide, registration, reorder page, how-to video |
| Restaurant tables, counters, receipts | Seated or waiting, close range | Strong | Menu, review request, loyalty sign-up, reorder |
| Direct mail and catalogues | At home, unhurried | Strong | Personalised offer page or booking form |
| Event signage and badges | Standing, 1–2 m, often patchy signal | Good if the page is light | Agenda, contact card, session slides, lead form |
| Shop windows and A-boards | Walking past, 1–3 m | Moderate; needs a large code and a clear reason | Opening hours, booking, today's offer |
| Transit posters and shelters | Waiting, 1–4 m | Moderate; size the code for the real distance | Short offer page, app download, ticket |
| Roadside billboards | Driving or passing at speed | Poor and unsafe | Use a short memorable URL or brand search term instead |
| TV and streaming ads | Sofa, a few seconds on screen | Moderate; keep it on screen long enough | Offer page that matches the ad |
If you are putting codes on mail pieces, our guide to direct mail marketing covers list, format and offer choices that sit around the code. For signage at shows and pop-ups, the planning in experiential marketing applies too.
Static or dynamic: the choice you cannot undo after printing
A static QR code stores the destination URL directly in the pattern. Once printed, it points there forever. A dynamic QR code stores a short redirect URL owned by a QR platform (or by you), and that redirect forwards scanners to whatever destination you set today.
Both are just URLs in the end, so the difference is who controls the hop in the middle and what happens if that hop disappears.
| Factor | Static code | Dynamic code (third-party platform) | Dynamic code (your own redirect) |
|---|---|---|---|
| Change destination after printing | No | Yes | Yes |
| Scan counts without analytics | No | Yes, in the platform dashboard | Yes, in your server logs |
| Ongoing cost | None | Usually a subscription | Hosting you already pay for |
| Risk if the vendor account lapses | None | Codes can stop working or show the vendor's page | None while your domain is renewed |
| Pattern density | Grows with URL length | Short and easy to scan | Short if you use a short path |
| Trust signal for the scanner | Shows your real domain in the preview | Shows the vendor's domain | Shows your domain |
Our default is the third column: a dynamic code that points at a short path on the brand's own domain (for example example.com/go/spring-menu), which then redirects with a 302 to the full, UTM-tagged landing page. You keep editability and scan logging, the preview on the phone shows a domain the scanner recognises, and nothing breaks if you cancel a QR subscription. If you do not control your server, a WordPress redirect plugin or your host's redirect rules can do the same job; see 301 vs 302 redirects for why a temporary redirect suits a destination you plan to change.
Use static codes for things that genuinely never change and do not need measuring, such as a Wi-Fi join code or a link to permanent product documentation.
Print settings that make a code scan first time
QR codes are forgiving, but print production finds every weakness. These are the variables worth controlling.
Size for the real scanning distance
A common rule of thumb in print and signage work is a minimum code width of about one tenth of the scanning distance: roughly 2 cm wide at 20 cm, 10 cm at 1 metre, 30 cm at 3 metres. Treat that as a starting point, not a standard, and increase it when the URL is long (more modules), the light is poor or the surface is curved. For business cards and packaging, do not go much below 2 cm.
Contrast, colour and the quiet zone
Dark modules on a light background scan most reliably. Inverted codes (light on dark) and low-contrast brand colours are read by many phones but not all. Keep a clear margin, the "quiet zone", around the code; the QR specification calls for four modules of empty space on every side. Designers often crop this to save space, and it is the single most common reason a code scans on a screen proof but not on a printed poster with a busy background.
Error correction and logos
QR codes carry redundant data so they can still be read when part of the pattern is damaged or covered. The level is chosen when the code is generated.
| Error correction level | Approximate data recoverable | When to use it |
|---|---|---|
| L (Low) | About 7% | Clean digital displays, smallest possible code |
| M (Medium) | About 15% | Default for most print |
| Q (Quartile) | About 25% | Outdoor print, packaging that gets scuffed, small logo overlays |
| H (High) | About 30% | Logo in the centre, harsh environments |
Higher levels make the pattern denser, so a short URL matters even more if you plan to drop a logo in the middle. Keep logos well under the recoverable share and never cover the three large square finder patterns in the corners.
A five-minute pre-print test
- Export the code as a vector (SVG or PDF), not a low-resolution PNG, and place it in the final artwork at final size.
- Print one copy on the actual stock, or a close equivalent, at 100% scale.
- Scan it with the default camera app on at least one iPhone and one Android phone, plus an older device if you have one.
- Test at the realistic distance and angle, in the actual lighting (a dim restaurant, a sunny window).
- Confirm the destination loads over mobile data, not just office Wi-Fi, and that the UTM parameters survive any redirects.
- Write the short URL in small text under the code so people can type it if scanning fails.
The landing page a scanner actually wants
Someone who scans has already done you a favour. The page has to reward that within a second or two on a phone, often on a weak connection.
- Match the promise printed next to the code. "Scan for tonight's specials" must open tonight's specials, not the homepage. If the print says "10% off your first order", the code shown on that page should apply automatically or be visible above the fold. Printed offers are advertising like any other; the FTC's advertising basics require claims to be truthful and evidence-based.
- Design for one thumb. Large buttons, short forms, no pop-up that covers the content before it loads. Our guide to website pop-ups that convert explains when an overlay helps and when it hurts.
- Keep the page light. Compress images, avoid autoplay video and defer heavy third-party scripts. Field data from real phones matters more than a desktop lab score; field data vs lab data explains the difference.
- Offer the next physical step. Directions, call, book, add to wallet, reorder. A QR visitor is often standing near your premises or holding your product.
- Decide whether it should be indexed. Campaign-only pages with offers that expire are often better set to
noindexso they do not compete with your main pages in search.
If you are building several campaign pages per quarter, the patterns in PPC landing pages carry over directly: one goal, one message, fast load.
Tagging every code so scans show up properly in GA4
Without tagging, most QR visits arrive in Google Analytics 4 as Direct, because a camera app passes no referrer. That makes them indistinguishable from people typing your URL. The fix is to put UTM parameters on the final destination of every code.
“Parameter values are case sensitive, e.g. utm_source=google is different from utm_source=Google.”
— Google Analytics Help, URL builders: Collect campaign data with custom URLs
That case-sensitivity point is exactly why QR campaigns end up with "Flyer", "flyer" and "flyers" as three separate sources. Agree a naming scheme before the first code is generated and write it down.
| Parameter | Our convention for QR | Example value |
|---|---|---|
utm_source | The physical item or placement type | table-tent, packaging, bus-shelter |
utm_medium | Always the same word for every printed code | qr |
utm_campaign | The campaign or promotion | spring-menu-2026 |
utm_content | Variant, location or creative | store-leeds, version-b |
utm_id (optional) | Campaign ID if you import cost data | sm26 |
Two practical notes. First, GA4's default channel grouping does not have a "QR" channel, so sessions with utm_medium=qr may land in a catch-all group; create a custom channel group with a rule such as "Medium exactly matches qr" so QR traffic gets its own line. Our guide to GA4 unassigned traffic shows how custom mediums get classified. Second, if leads from QR visits go into a CRM, pass the UTM values into hidden form fields so sales can see which poster produced which deal, as described in UTM data in your CRM. For the wider tagging discipline, see our main guide to UTM parameters.
Scan counts and sessions will never match exactly. A dynamic-code dashboard counts redirects, including repeat scans, link-preview bots and people who closed the page before analytics loaded; GA4 counts sessions where the tag fired and, in regions that require it, where consent allowed measurement. Use scans as the top of the funnel and GA4 key events as the outcome.
Worked example: testing two table-tent offers in a café group
This is a hypothetical example to show the arithmetic; the numbers are illustrative, not client data.
A café group with four sites wants more loyalty sign-ups. It prints 200 table tents with two versions: version A says "Scan for the menu", version B says "Scan to join and get your next coffee free". Each version goes on half the tables at every site for four weeks. Each tent uses its own dynamic code pointing to a short path on the café's domain, redirecting to a tagged page with utm_content=version-a or version-b.
| Metric (4 weeks) | Version A: menu | Version B: free coffee |
|---|---|---|
| Scans (redirect logs) | 1,840 | 960 |
| GA4 sessions with medium = qr | 1,610 | 870 |
| Loyalty sign-ups (key event) | 48 | 215 |
| Sign-up rate per session | 3.0% | 24.7% |
| Print cost share | £110 | £110 |
| Cost per sign-up (print only) | £2.29 | £0.51 |
Version A wins on scans, which is what a scan-count dashboard alone would celebrate. Version B wins on the outcome the business wanted, by a wide margin, even after you allow for the cost of the free coffee. The lesson generalises: optimise the code's promise for the action you want, and judge it on the key event, not on scans. Before calling a winner on smaller numbers, check significance with the method in our guide to A/B test statistical significance.
Quishing: fake codes stuck over real ones
Because a QR code hides its destination until it is scanned, criminals use it as a phishing wrapper, sometimes called "quishing". The common pattern in public places is a sticker with a malicious code placed over a genuine one on a parking meter, an EV charger, a menu or a poster, leading to a fake payment page. On 3 September 2026 the US Federal Trade Commission published a consumer alert about exactly this pattern on parking meters.
“It seems like a convenient way to pay, but it turns out scammers like using QR codes, too.”
— FTC Bureau of Consumer Protection staff, See a QR code parked somewhere? Don't scan it…yet!
Emailed codes that lead to fake login pages are the other common variant, because a code inside an image can slip past link scanners.
Marketers are not only potential victims here; your brand can be the bait. Practical defences:
- Use your own domain in the code. When the phone shows a preview of
yourbrand.com/go/..., people can check it. A generic shortener or vendor domain teaches customers to trust anything. - Never send people straight to a payment form from a public code. Land them on a branded page first, and use established payment providers.
- Print codes into the artwork rather than as stickers, so an overlay is easier for staff to spot. Use tamper-evident materials for high-value placements such as car parks.
- Audit placements. Ask staff at each location to check public codes weekly and report anything stuck on top.
- Monitor your redirect logs for sudden drops at one location, which can mean a code has been covered.
- Avoid QR codes in email unless there is a clear reason; a plain text link with your domain is more transparent and easier for filters to assess.
- Keep the redirect domain renewed. If a domain behind a printed code lapses, someone else can register it and inherit every scan.
Questions marketers ask about QR code campaigns
Do QR codes help SEO?
Not directly. A scan is a direct visit to a URL, so it does not create a link or a ranking signal. QR codes can lift branded demand indirectly (people who see your name in print may later search for it), which is why it is worth watching branded search alongside scan data.
How small can a QR code be on a business card?
Around 2 cm square is a practical floor for close-range scanning, provided the URL is short, contrast is high and the quiet zone is kept. Test on the actual card stock before printing a full run.
Should I pay for a QR code generator?
Only if you need its dashboard or bulk management. A free generator plus your own redirect paths gives you editable, trackable codes without a subscription that could break printed material if it lapses.
Why do my QR scans not match GA4 sessions?
Scan counts include repeat scans and preview fetches, and GA4 only records sessions when the tag loads (and, where required, when consent allows). A gap of 10–20% is normal; a much larger gap usually means a slow page, a broken redirect or lost UTM parameters.
Can I change where a printed QR code goes?
Only if it is dynamic, meaning it points at a redirect you or a vendor control. A static code is fixed forever.
Where to put your first properly tracked QR code this month
Pick one placement where people already have time and a reason to scan, usually packaging, tables, receipts or direct mail. Create a short redirect path on your own domain, tag the destination with your agreed UTM scheme, build a fast single-purpose landing page, and run the pre-print test before anything goes to the printer. After four weeks, compare key events by placement and variant, not scans.
If you would like help building the landing pages and measurement around offline campaigns, our conversion optimisation team does this work every week, and our local SEO services make sure people who see your print can also find you in search. Get a quote and tell us what you are printing.
Further reading on qr codes in marketing
- Billboards and Out-of-Home Advertising for Local Businesses
- Cause Marketing: Partner With Causes Without Looking Opportunistic
- Guerrilla Marketing: Low-Budget Tactics That Get Noticed




