QR code placement best practices (and CTA copy that gets scans)
A QR code that does not get scanned is not a QR code problem.
It is a conversion problem.
Most campaigns fail for boring reasons:
- the code is hard to notice
- it is physically awkward to scan
- the user does not know what they get
- the page is slow or irrelevant
This guide gives you a practical placement checklist you can use for posters, flyers, menus, packaging, and storefronts.
TL;DR
- Put the code where a person can scan it in one smooth motion.
- Use a benefit first CTA. Do not just write “Scan me”.
- Make it big enough for the scan distance. When in doubt, go bigger.
- Protect the quiet zone and contrast.
- If you need to update the destination later, use a dynamic QR code.
- Track performance by using unique destinations per placement.
The placement rule that matters most
A person must be able to:
- see the code
- understand the value
- scan it without feeling awkward
If any of those fail, you do not get the scan.
Where to place a QR code (by channel)
Posters and flyers
Best practices:
- Place it at eye level or slightly below.
- Avoid the bottom corner. People miss it.
- Leave enough whitespace so it looks intentional.
A simple layout that works:
- headline
- 1 line benefit
- QR code
- 1 line instruction
Example CTA:
- “Scan to get the menu and pay in 30 seconds.”
Table tents and menus
Best practices:
- Put the QR code where the phone already is (on the table).
- Do not place it where it is blocked by cups or plates.
- Use a short CTA with a clear outcome.
Example CTA:
- “Scan to order, no app.”
Storefront windows
Best practices:
- Think about glare. A glossy window can destroy scan reliability.
- Put the code at a height where people can scan without crouching.
- Add a bold CTA that explains what happens after scanning.
Example CTA:
- “Scan to book an appointment.”
Product packaging
Best practices:
- Avoid folds, corners, and curved edges.
- Keep the code on a flat face.
- If the packaging is small, simplify the destination and keep the QR payload short.
Example CTA:
- “Scan for setup instructions and warranty.”
Receipts and invoices
Best practices:
- People scan receipts when they are already in phone mode.
- Use it for reviews, reorders, and loyalty enrollment.
Example CTA:
- “Scan to get 10 percent off your next visit.”
CTA copy templates that get scanned
Most QR codes fail because the user has no reason to scan.
Use this formula:
Verb + benefit + time or friction reducer
Examples:
- “Scan to get today’s offer.”
- “Scan to join rewards and earn points.”
- “Scan to see sizes in stock.”
- “Scan to download the PDF.”
- “Scan to book in 30 seconds.”
Avoid vague CTAs:
- “Scan me”
- “QR code”
- “More info”
The scan distance sizing shortcut
A simple field rule:
- farther scan distance requires a larger code
- if you are unsure, print larger and test with 2 different phones
If you need a deeper sizing guide, see:
- /blog/qr-code-size-scanning-distance
- /blog/qr-code-size-guide-print-posters
Do not break the basics
If you get these wrong, no placement trick will save you:
- enough contrast (dark code on light background is safest)
- a clean quiet zone
- no busy texture behind the code
Related guides:
- /blog/qr-quiet-zone-explained
- /blog/qr-design-contrast
Tracking: how to know which placement works
If you want real conversion insight, do not reuse the same QR destination everywhere.
Instead:
- Use a different destination per location or placement.
- Add UTM tags when you can.
- Keep naming consistent so reporting is easy.
See:
- /blog/utm-tags-for-qr-codes
- /blog/qr-code-campaign-tracking-utm
The fastest way to improve results
If your scans are low, do this in order:
- Add a clear benefit CTA.
- Move the code higher and make it bigger.
- Ensure the landing page loads fast.
- If you need edits later, switch to a dynamic QR.
Create and test your QR code in minutes
QRShuffle is built for fast iteration:
- generate a QR code in seconds
- adjust your destination without reprinting (dynamic links)
- create variants per placement for better tracking
Create your next QR code here:
