QR Code Best Practices: The Sourced Checklist for Codes That Scan (and Convert)
QR code best practices, sourced from ISO/IEC 18004: contrast, quiet zone, the 10:1 size rule, logos, testing, CTAs and tracking. No invented stats.
You design a flyer, a menu, a product label or a poster, you drop a QR code on it, you send 5,000 copies to the printer, and then the dread sets in: what if it doesn't scan? That single fear is the reason most "best practices" lists exist, because a QR code is the bridge between your print and someone's phone, and if the bridge collapses the whole campaign goes with it.
The good news is that scanning QR codes is now a normal, learned behavior. In its State of QR Code Scans 2026, Bitly reports that scans are growing faster than new codes are being created in nearly every region — in Europe, code creation rose about 7% year over year while scans rose 53% — and concludes that "QR Code fatigue isn't happening… QR literacy is increasing." The behavior is there. The job left to you is to ship a code that earns the scan and survives the print.
This guide is the checklist for doing exactly that. Two things make it different from the usual roundup. First, every number below carries a real source link — minimum size, the quiet zone, error-correction levels, the distance rule. Second, where the popular "best practices" posts repeat a conversion stat with no traceable study behind it ("a CTA adds 80% more scans," "branded codes get 3.8× the scans"), we refuse to quote a number we can't source. We state the principle and move on. You deserve advice you can act on, not folklore dressed up as data.
QR code best practices in brief
If you read nothing else: keep dark modules on a light background (contrast at least 3:1, aim for 4:1 or higher), leave a 4-module quiet-zone border on every side, print it at least 2 × 2 cm and follow the 10:1 distance rule, use error-correction Level H if you add a logo, write a clear call to action, and always test a real printed proof on several phones before you commit.
The quick checklist (TL;DR)
- Contrast: dark code on a light background, contrast ≥ 3:1 (target 4:1+). Never invert.
- Quiet zone: keep a clear 4-module border on all four sides.
- Size: at least 2 × 2 cm for close range; scale up with the 10:1 rule for distance.
- Logo: use error-correction Level H, keep the logo to ~20–30% of the area, never cover the corners.
- Format: 300 DPI for print, SVG for large or scalable formats, high-res PNG otherwise. No lossy JPG.
- Placement: eye level, flat, reachable, non-glossy.
- CTA: tell people what they get ("Scan to see the menu").
- Destination: fast, mobile-first landing page; nothing dead.
- Editable + measurable: use a dynamic code (a short redirect you can change and track).
- Test: on at least 3 phones, on a real proof, in the real lighting — before you print.
Design best practices (so the camera can read it)
A QR code is read by a camera looking for a high-contrast pattern of squares. Almost every design rule below is really one rule in disguise: keep the pattern unambiguous. If you want the underlying anatomy — finder patterns, modules, the data matrix — our companion guide on what a QR code is walks through it.
Contrast: dark on light, never inverted
The single most reliable design choice is dark modules on a light background. Guidance from QRLynx and Pageloot converges on a minimum contrast of roughly 3:1, with 4:1 or higher recommended for reliability. Two mistakes recur. The first is inverting the code — light modules on a dark field — which scans noticeably worse because many cameras and decoders expect the dark-on-light convention. The second is the "brand color on brand color" trap: a navy code on a slate background may look elegant in your mockup and be nearly invisible to a phone in poor light. When in doubt, pure black on white is undefeated.
Quiet zone: the border people keep cropping off
The quiet zone is the empty margin around the code, and it is not decorative — it tells the scanner where the symbol begins and ends. The ISO/IEC 18004 standard specifies a minimum quiet zone of 4 modules on all sides (a "module" is one of the small squares that make up the code). Cropping it too tight is, by wide agreement among practitioners, the single most common cause of scan failure. The QR Code Generator team and QRLynx both flag it as the rule designers break most often, usually because a layout is tight and the code gets nudged against text or an image edge. Give it room.
Adding a logo without breaking the code
You can place a logo in the center of a QR code because the format has built-in error correction: it can reconstruct data even when part of the symbol is obscured. ISO/IEC 18004 defines four levels, and the highest, Level H, recovers up to about 30% of the code. The practical recipe: switch to Level H, keep the logo small — sources vary between roughly 20% and 30% of the code area, so stay at or below ~25% to be safe — and never cover the three finder patterns (the large squares in the corners), which the scanner uses to orient itself. A small light pad behind the logo helps preserve local contrast. Then test, because every logo placement is a little different.
Error-correction levels at a glance
Higher error correction buys resilience but adds data, which makes the code denser (more, smaller modules) for the same physical size. That density is the trade-off you're managing.
| Level | Data recovery | When to use it |
|---|---|---|
| L (Low) | ~7% | Clean, large, screen-only codes with no logo |
| M (Medium) | ~15% | The common default for plain print |
| Q (Quartile) | ~25% | Print exposed to wear, light dirt or scuffing |
| H (High) | ~30% | Any code with a logo or heavy customization |
Source: QRLynx and the ISO/IEC 18004 explainer. The current edition of the standard was updated in 2024.
Colors, eyes, shapes — and accessibility
Customizing the module shape, the corner "eyes," and the colors is fine as long as contrast holds. Round modules, rounded eyes and a brand color can all coexist with a scannable code — the constraint is never the style, it's the contrast and the quiet zone. Test every variant you intend to ship.
One accessibility note that rarely makes these lists: don't rely on red and green to carry your contrast. A peer-reviewed review puts red-green color vision deficiency at roughly 8% of men and 0.5% of women of Northern European descent. A code (or a CTA next to it) that depends on a red/green distinction excludes a meaningful slice of your audience and can also reduce effective contrast for the camera. Lightness difference is what scanners and colorblind users both rely on.
Size and print best practices (so it scans from where people stand)
Minimum size
For close-range scanning — a business card, a table tent, packaging held in the hand — aim for at least 2 × 2 cm (about 0.8 inches), per QRLynx. That's a floor, not a target. The more data the code encodes and the higher the error-correction level, the denser the modules become, so a complex code printed small can fall below what a phone camera can resolve. When you have the room, go bigger.
The 10:1 distance rule
The most useful sizing heuristic is the 10:1 rule: the maximum scanning distance is roughly ten times the code's width. Flip it around to size your code — take the distance people will scan from and divide by ten.
| Scanning distance | Minimum code width | Typical context |
|---|---|---|
| 20 cm | 2 cm | Business card, label held in hand |
| 1 m | 10 cm | Poster, menu, shelf talker |
| 3 m | 30 cm | Store window, wall display |
| 10 m | 1 m | Billboard, banner, signage |
The 10:1 rule, per QRLynx. Treat these as minimums and add margin for poor lighting or motion.
Resolution and file format
Print QR codes at 300 DPI. For large-format or anything that needs to scale — banners, signage, a code that might be resized — use SVG, a vector format that stays sharp at any size. For screens and most print uploads, a high-resolution PNG (1000 px or more) is fine. The one format to avoid is lossy JPG: its compression artifacts blur the hard edges between modules, which is precisely the information the scanner needs. This guidance is laid out by QRLynx.
Placement and material
Where the code physically lives matters as much as how it looks. Put it at eye level, on a flat, reachable, non-glossy surface. Avoid curves (a code wrapped around a bottle distorts), folds (it lands on a crease in the brochure), and reflective lamination that throws glare under store lighting. And match the medium to the moment: a billboard code that nobody can get within ten meters of, or a TV-ad code that flashes for three seconds, is fighting physics. The contrast is stark in the data — QR Tiger cites a connected-packaging scan rate of about 14% (a Time & Space report) versus a CTV/TV-ad scan rate of roughly 0.011% (a Brightline report). Packaging is held, dwelled on, and scannable; a TV code is far away with no dwell time. Placement is destiny.
Make it convert, not just scan
A code that scans is table stakes. A code that converts gives someone a reason to lift their phone and something worth landing on. This is also where the internet's "best practices" posts get sloppiest, so we'll be careful.
Always pair the code with a CTA and a value
A bare QR code is a question mark. People scan when they know what they'll get, so spell it out: "Scan to see the menu," "Scan for 10% off," "Scan to watch the demo." This is the most repeated piece of QR advice in the industry — and also the most over-claimed. You'll see figures like "a CTA adds 80% more scans" or "branded codes get 3.8× the scans" cited confidently across vendor blogs. We've traced those back and they have no underlying study — they circulate from one marketing post to the next without a primary source. So here's our honest position: a clear CTA and good design improve scan rates — that's the principle, and we'll state it without inventing a percentage to dress it up. Treat any "+X% scans" stat you see elsewhere with healthy suspicion unless it links to a real study.
Match the destination to the moment
The scan is a promise; the landing page keeps it. Send people to a mobile-first page that loads fast and shows the promised action immediately — the menu, the discount, the video — not your homepage with three taps to go. A slow or non-mobile page wastes the scan you worked to earn, and a dead link wastes the whole print run.
Make it editable and measurable
This is the practice that separates a one-shot code from a campaign asset. A dynamic QR code doesn't encode the destination directly — it encodes a short redirect URL that you control. That means you can change where it points after it's printed, and you can see how often it's scanned. A static code bakes the destination in: once it's printed, it's frozen and invisible. The clearest explainer of the distinction is from the QR Code Generator team.
The mechanism behind "dynamic" is just URL shortening: a short redirect link sits between the code and the final page. That's why a URL shortener and a QR strategy go together — the short link is the editable, trackable layer. If you want the data side, our guide on how to track link clicks for free shows what you can measure without paying for an enterprise platform, and the analytics feature page covers what's available on each plan.
A/B test placement, size and copy
Because dynamic codes are trackable, you can actually test instead of guess. Run two versions of the CTA, two placements, or two sizes, and read the scan data — count, time, location, device — to see what works. Iteration beats theory, and the only way to iterate is to measure.
Test before you print (non-negotiable)
Everything above is undone by skipping this step. Testing is the highest-leverage thing on the list because it's the only point where a mistake is still free to fix. Once it's on 5,000 flyers, it isn't. If you're building your first code, walk through how to create a QR code first, then test it like this.
Test on at least three phones
Use the native camera app, not a downloaded scanner — that's what real people use. QR Insights recommends testing on at least three devices: one iPhone, one recent Android, and one older or budget phone, which is where lower-resolution cameras expose a code that's too small or too dense.
Test a real printed proof, not the screen
A code that scans flawlessly on your monitor can fail on paper. Ink bleed, paper texture, the surface it's mounted on, and the lighting all change scannability, as the QR Code Generator team notes. Print a proof on the actual stock and test it in the conditions where it'll live — bright sun for a store window, dim ambient light for a bar menu, harsh overhead light in a retail aisle.
Test the full journey
Scanning is only step one. Confirm the landing page loads fast, looks right on mobile, and that the destination is still live — and if you're using a dynamic code, confirm the tracking actually fires. QR Tiger stresses verifying the whole path, because a perfect code pointing at a broken page is still a failed campaign.
Static vs dynamic: pick the right one for the job
"Dynamic is always better" is a sales line, not a best practice. Each type has a right job.
| Static | Dynamic | |
|---|---|---|
| Editable after printing | No | Yes |
| Trackable (scans, time, device) | No | Yes |
| Free & permanent | Yes | Usually paid/limited |
| Best for | Wi-Fi, vCard, a URL you'll never change | Any printed campaign you might edit or measure |
Definitions per the QR Code Generator.
Use static when the information is fixed forever and you'll never need analytics — sharing a Wi-Fi password on a guest-room card, encoding a vCard, linking to a permanent page. It's free, it never expires, and there's nothing to manage. Use dynamic for anything with stakes: a printed campaign where the destination might change, a discount that ends, or any time you want to know whether the code actually worked. If you're weighing tools for either, our roundup of the best free QR code generators in 2026 compares them honestly.
Common mistakes that kill scans
- Never testing on a real printed proof.
- A logo that's too big or sits over a corner finder pattern.
- Low contrast, or inverting the colors (light on dark).
- No quiet zone — cropping the border too tight.
- Printing it too small, or ignoring the 10:1 distance rule.
- Exporting a low-resolution or lossy JPG.
- No CTA, so nobody knows why they'd scan.
- A slow or non-mobile landing page.
- A static code you can't fix after it's printed.
Track your QR codes with Minily (the honest version)
Here's where most "best practices" articles pivot to a hard sell. We'll keep it straight, because the editorial point of this guide is to not lie to you.
The trackable, editable layer of any QR strategy is the short link behind it. With Minily's QR generator you can create unlimited QR codes on every plan, including the free one — there's no "2 codes a month" quota. To make a code editable and measurable, point it at a Minily short link: you can change where the link goes after the code is printed, and you can see the clicks. That's the honest framing — a QR pointing at a trackable short link — not a standalone enterprise dynamic-QR analytics product.
The real free limits, stated plainly: 5 short links, unlimited QR codes, global analytics (total clicks, your top-3 countries, the last 10 clicks), plus password protection, link expiration and scheduling, and conditional geo/device redirects. Pro (5 €/month or 48 €/year) lifts the link cap and unlocks full per-link analytics — cities, device, OS, referrer, every country, unlimited clicks, and live mode. The whole breakdown is on the pricing page.
And the honest boundary: if you need a public REST API, white-labeling, or per-code dynamic-QR analytics at enterprise scale, Minily isn't built for that — reach for a dedicated platform. Minily is a strong fit if you want unlimited QR generation plus a short link you can edit and whose clicks you can see, without paying for features you won't use. If a static code is genuinely the right call for your use case (a Wi-Fi card, a vCard), use a static code — we're not going to push a tool you don't need. You can make a code right now for free.
Frequently Asked Questions
What makes a good QR code?
High contrast (dark modules on a light background), a 4-module quiet zone on every side, a size big enough for the scanning distance (the 10:1 rule), error-correction Level H if it carries a logo, a clear call to action, and a tested, fast, mobile-friendly destination.
What's the minimum size for a QR code?
About 2 × 2 cm (0.8 in) for close range. Scale up with the 10:1 rule: the code's width should be at least one-tenth of the distance people will scan from. A 1-meter scanning distance wants a code at least 10 cm wide.
What is the quiet zone and how big should it be?
It's the empty margin around the code that tells a scanner where the symbol starts and ends. ISO/IEC 18004 requires at least 4 modules on all sides. Cropping it too tight is the most common cause of a code that won't scan.
Can I add a logo to a QR code?
Yes. Switch error correction to Level H, keep the logo to roughly 20–30% of the code area (stay at or below ~25% to be safe), and never cover the three corner finder patterns. Add a small light pad behind the logo, then test the result.
What colors work best for QR codes?
Dark modules on a light background, with contrast of at least 3:1 and ideally 4:1 or higher. Never invert (light on dark scans worse), and don't rely on red versus green alone — about 8% of men have red-green color vision deficiency.
PNG or SVG for printing a QR code?
Use SVG (a vector format) for large-format or anything that needs to scale, since it stays sharp at any size. A high-resolution PNG (1000 px or more, at 300 DPI) is fine for screens and most print uploads. Avoid lossy JPG — its compression blurs the module edges.
Should I use a static or dynamic QR code?
Use dynamic for any printed campaign you might edit or want to measure, because it's both changeable and trackable. Use static only for fixed information you'll never change, such as a Wi-Fi password or a vCard, where its free-and-permanent nature is an advantage.
Why isn't my QR code scanning?
Usually one of a few things: no quiet zone, low contrast or inverted colors, a logo that's too big or covers a corner, it was printed too small, it was exported as a low-resolution JPG, or it was simply never tested on a real printed proof before printing at scale.
The takeaway
A QR code that works isn't lucky — it follows a short list of rules the camera and the standard actually care about: real contrast, a 4-module quiet zone, enough size for the distance, the right error correction for any logo, a clean high-resolution export, a clear reason to scan, a fast destination, and a test on a real proof before anything goes to print. Make it dynamic if you'll ever need to change or measure it; leave it static if it truly never changes. None of that requires inventing a conversion stat — it just requires not skipping a step. When you're ready, you can generate one for free and test it the same day.