QR Code Best Practices: Size, Contrast, Placement, and Testing
The complete checklist before you print. Minimum sizes, contrast ratios, safe margins, logo rules, static vs dynamic decisions, and the one test that catches 90 percent of failures.
Most QR code failures happen because of one thing that was skipped: testing the printed result before committing to a run. But size, contrast, quiet zone, and format all compound each other. Here is the complete checklist.
The full checklist
Size
- ✓Minimum 2 cm x 2 cm for arm's-length scanning
- ✓Billboards: 1/10th the viewing distance (10 m away = 1 m QR)
- ✓Never scale down after adding a logo — regenerate at the target size
Contrast
- ✓Dark dots on light background (4:1 minimum contrast ratio)
- ✓Black on white is always safe
- ✓Avoid: light grey on white, medium blue on medium grey, gradient backgrounds
- ✓Inverted QR (light on dark) only works if your printer supports it clearly
Quiet zone
- ✓Keep 4 module widths of empty space on all four sides
- ✓Never let text or design elements touch the QR pattern
- ✓Check the quiet zone after placing the QR in a layout
Logo
- ✓Use error-correction level H (30% tolerance) when adding a logo
- ✓Keep logo coverage under 20% of the total QR area
- ✓Centre the logo exactly on the QR (symmetry matters for finder patterns)
- ✓Test on-device after adding the logo: do not trust a preview
Format
- ✓Use SVG for print (scales to any size without quality loss)
- ✓Use PNG at 10x the intended print size for pixel-based output
- ✓Do not use JPG (compression artifacts destroy the fine QR pattern)
Static vs dynamic
- ✓If the URL might change, use dynamic QR from the start
- ✓If you are printing 1,000+ copies, budget for dynamic QR so you can fix destination errors
- ✓Static QR is correct for WiFi, vCard, plain text, and permanent URLs
Testing
- ✓Scan the digital file on your phone before ordering print
- ✓Print one copy and scan the printed result from user distance
- ✓Test on iPhone (iOS Camera) and Android (stock camera or Google Lens)
- ✓Re-test after lamination or coating, which can change surface reflection
Size: the detail most designers get wrong
The minimum is 2 cm x 2 cm for a code that someone scans at arm's length (about 30 cm). But most designers scale down a QR code in Illustrator or InDesign to fit a business card or flyer, and then print without checking that the minimum size is maintained. Always set the final print size explicitly before exporting.
For outdoor display, the 10:1 rule applies: the code should be at minimum 1/10th the width of the expected scanning distance. A window cling scanned from 1 metre needs to be at least 10 cm x 10 cm. A billboard scanned from 10 metres needs to be at least 1 metre x 1 metre. In practice, make outdoor codes as large as the design allows.
Contrast: the most common failure mode
The ISO 18004 standard requires a minimum contrast ratio of 4:1 between the dark modules (dots) and the light background. In practice, black (#000000) on white (#FFFFFF) gives you a 21:1 ratio and will scan on any camera in any lighting. Once you start using brand colors or putting the QR on a colored background, test carefully.
Common failures:
- Light grey (#AAAAAA) on white: contrast ratio about 2.3:1. Fails on most cameras in dim light.
- Medium blue on black: dark on dark. Both modules and background read as similar luminance.
- Gradient background under the QR: the contrast ratio varies across the code. Some modules scan, others do not.
- Embossed or foil QR (same hue, different finish): only scans under specific angles of light.
Quiet zone: the invisible failure
The quiet zone is the white border surrounding the QR pattern. The QR decoder's finder-pattern detection relies on a transition from white to black at the edge of the code. If other content encroaches on the quiet zone, the decoder cannot locate the code.
ISO 18004 requires 4 module widths on every side. A module is one dot in the QR grid. For a 2 cm QR code at version 1 (21 modules), each module is about 0.95 mm, so the quiet zone should be at least 3.8 mm on every side. Many generators include this automatically; check that your layout does not crop it.
Logo embedding: the right way
Error correction level H (30% recovery) is mandatory for logos. Without it, you are relying on the QR still scanning despite the logo blocking data modules, which is unpredictable. With level H, the QR has enough redundancy to recover from a logo covering up to about 25-30% of the pattern.
Keep the logo strictly centered. The three finder patterns are in the corners; placing the logo over one of them breaks the code reliably. Centering keeps the logo in the data area where error correction applies.
The one test that catches 90% of failures
Print one copy at the final intended size on the final intended substrate (coated paper, matte vinyl, packaging board, whatever you are using). Scan it from the distance a real user would stand. If it scans on your phone, scan it on one more phone with a different OS. If both pass, you are done.
This test catches:
- Size issues (the digital file scanned fine but the printed version is too small)
- Contrast issues after ink absorption into paper (colors shift on print)
- Quiet zone issues (layout program cropped the border)
- Lamination glare (glossy laminate causes reflection that fools the camera)
Static vs dynamic: decide before you print at scale
The most expensive QR code mistake is printing 5,000 flyers with a static QR that points to a URL that later changes. There is no way to recover: you have 5,000 coasters. If you are printing more than 100 copies of anything, use a dynamic QR so you can change the destination if needed.
Dynamic QR codes work through a redirect: the code points to a short URL on QRSprint, which redirects to your real destination. You update the destination from your dashboard; the code itself never changes.
Dynamic QR also gives you scan analytics: how many times, from which city, on which device, at what time of day. For marketing campaigns, this data is how you know the campaign worked.
Free QR Generator
Generate any QR code free — right now
URL, WiFi, WhatsApp, vCard, UPI, and 15 more types. No signup for static QR. Download PNG or SVG.
Make a free QR codeWant to edit it after printing and track every scan?
Dynamic QR
Dynamic QR codes live in the QRSprint app
Change the destination any time without reprinting. See every scan: count, city, device, time. Security QR rings your phone when someone scans — your number stays private.