Guides/ Tools
qr_code

QR Code Best Practices: Design, Size & Error Correction

QR codes look simple, but poor implementation leads to codes that fail to scan, direct users to broken URLs, or have no tracking. These best practices ensure your QR codes work reliably in print and digital contexts.

April 2026 · 8 min read

Error Correction Levels

LevelData RecoveryUse CaseSize Overhead
L (Low)~7% recoveryClean digital displays, no logo overlaySmallest
M (Medium)~15% recoveryStandard use, slight logo overlaySmall
Q (Quartile)~25% recoveryRecommended for print, small logosMedium
H (High)~30% recoveryLarge logo overlay, harsh environmentsLargest (most modules)

Choosing Error Correction Level

Use M or Q for most cases. M works for clean digital screens. Q is recommended for print (which may be photocopied, creased, or partially obscured). H is necessary if you embed a logo — it allows the covered modules to be reconstructed. Note: higher error correction = more dense QR code = potentially harder to scan at small sizes. Balance logo size with QR code size.

Minimum Print Sizes

Use CaseMinimum SizeRecommended Size
Business card2 × 2 cm (0.8in)3 × 3 cm (1.2in)
Flyer / poster3 × 3 cm (1.2in)5 × 5 cm (2in)
Retail/product label2 × 2 cm (0.8in)4 × 4 cm (1.6in)
Billboard (far distance)Depends on distance1/10 of viewing distance
Digital display150 × 150 px minimum200 × 200 px+

URL Optimization for QR Codes

Shorter URLs generate less dense QR codes with fewer modules, making them easier to scan. Use a URL shortener or redirect for print campaigns, and always use HTTPS.


https://example.com/s/spring-sale


https://example.com?utm_source=print&utm_medium=flyer&utm_campaign=spring-sale



https://ex.co/flyer26


https://example.com/products/category/subcategory/spring-sale-2026?ref=flyer&coupon=SAVE20

Logo Embedding Guidelines

Embedding a logo in a QR code is purely cosmetic — it reduces scannability. If you add a logo, follow these rules to minimize scan failure:

Use H error correction level when adding a logo — the covered modules need to be reconstructable.

Cover no more than 30% of the QR code with the logo (the theoretical H-level recovery limit). In practice, keep it under 20% for reliable scanning.

Place the logo in the exact center — QR readers expect the corner finder patterns to be intact. Never cover the three corner squares.

Always test with multiple devices — an older Android phone or low-light scan will be the weakest test. Test before printing.

QR Code Design Rules

  • Maintain the quiet zone — QR codes require a 4-module white border (quiet zone) on all sides. Eliminating it prevents scanners from locating the code boundaries.
  • High contrast is mandatory — dark modules on light background (not the other way around — inverted QR codes often fail). Minimum 4:1 contrast ratio between module colors.
  • Never use busy backgrounds — placing a QR code over a photograph or pattern reduces scannability. Use a solid white or light background pad behind the code.
  • Verify before printing — generate the final code and test scan it with at least 3 different devices (iPhone, Android, desktop) before committing to print.
  • Always add a call to action — print 'Scan for menu' or 'Scan to shop' near the QR code. Codes without context have significantly lower scan rates.

Frequently Asked Questions

Do QR codes expire?
Static QR codes (where the URL is encoded directly) never expire — as long as the destination URL works, the code works. Dynamic QR codes (managed by a QR platform that redirects) can expire if you stop paying for the service. For permanent use, use static QR codes pointing to URLs you control.
Can I track QR code scans?
Yes — add UTM parameters to the destination URL (utm_source, utm_medium, utm_campaign) and Google Analytics/GA4 will track scans as website traffic. For more detailed tracking (scan location, device type, time), use a dynamic QR service like Bitly or QR.io.
What's the difference between static and dynamic QR codes?
Static QR codes encode the final URL directly — they can't be changed after printing. Dynamic QR codes encode a short URL managed by a platform, which redirects to the real destination — this allows updating the destination URL without reprinting. Use dynamic for print campaigns where the destination might change.
Why won't my QR code scan?
Common causes: too small (increase size), low contrast (darken modules, lighten background), no quiet zone (add white border), damaged/creased print (reprint), URL too long (shorten the URL), or logo too large (reduce to under 20%). Test on multiple devices to narrow down the issue.