QRbug
Log inGet started
Blog
Marketing & Business

QR Code Best Practices: 17 Rules Every Marketer Should Follow (Avoid These Mistakes)

17 pre-flight rules that eliminate >95% of the reasons users fail to scan. Contrast, sizing, error correction, logo coverage, the quiet zone, fallback URLs, and conversion tracking.

Mert YıldızBy Mert Yıldız··9 min read
QR Code Best Practices: 17 Rules Every Marketer Should Follow (Avoid These Mistakes)

Quick Answer

These are the 17 rules every marketer should follow before printing or publishing a QR code, distilled from actual scan failure data across thousands of campaigns. Most failed QR campaigns trip on the same handful of mistakes: insufficient contrast, sizes too small, logos that exceed the error correction budget, and missing fallback URLs.

Use this as a pre-flight checklist. If your QR code passes all 17, you've eliminated >95% of the reasons users fail to scan it.

Rule 1: Always go dynamic for marketing campaigns

A static code burns the URL into the matrix forever. The day the URL changes, you reprint. For any campaign with a planned end date, A/B test, or evolving content, dynamic is non-negotiable — see dynamic QR codes explained.

The only exception: permanent, never-changing destinations (your homepage, a vCard) where static is preferable.

Rule 2: Foreground/background contrast must hit at least 4.5:1

The WCAG threshold for readable text doubles as the QR scanner's reliability threshold. Use any free contrast checker (WebAIM Contrast Checker, Colour Contrast Analyser).

  • Black on white: 21:1 ✅
  • Dark blue (#1d4ed8) on white: 9.6:1 ✅
  • Brand red (#dc2626) on white: 4.7:1 ✅
  • Light blue (#7dd3fc) on white: 1.6:1 ❌
  • White on yellow: 1.05:1 ❌ (failure mode that kills 30%+ of older Android scanners)

Inverted codes (white modules on dark background) work if contrast still hits 4.5:1, but ~5% of older scanners reject them.

Rule 3: Print at 2.5 cm × 2.5 cm minimum

Below 2 cm × 2 cm, scan reliability drops sharply. The scientific minimum is payload_length / 10 mm with a 2 cm floor. So:

  • 25-character URL: 2.5 cm minimum
  • 50-character URL: 5 cm minimum
  • 100-character URL: 10 cm minimum

Use dynamic codes to keep the encoded URL short (always ~24 characters), so you can print smaller.

Rule 4: Distance to scan = 10× the code's printed width

Rule of thumb: a QR scans reliably from a distance up to 10× its printed width. So:

  • 5 cm code → scans from 50 cm (typical phone-in-hand)
  • 30 cm code → scans from 3 m (poster, table)
  • 1 m code → scans from 10 m (billboard)

Plan code size based on where the user will be standing.

Rule 5: Use error correction Level H if you embed a logo

The four EC levels recover 7%, 15%, 25%, 30% respectively. Logo embedding requires H (30% recovery) to reconstruct the modules under the logo.

Most generators default to M (15%). Switch to H before adding the logo.

Rule 6: Keep logo coverage at or under 30%

Even at Level H, going past 30% logo coverage breaks scan reliability fast. The safe sweet spot is 22–28%. See QR code with logo tutorial for the full sizing guide.

Rule 7: Always include a plain-text fallback URL

Print the destination URL in plain text below or beside the QR. Two reasons:

  1. Phones < 5% of users still don't scan QRs natively — the text URL is their fallback.
  2. Scan failures happen — bad lighting, dirty camera, broken matrix. The text URL recovers the user.

This rule alone recovers 5–15% of would-be lost scans.

Rule 8: Add a clear "what you get" call-to-action

"Scan to learn more" is too vague. Be specific:

  • "Scan for the recipe"
  • "Scan to see the demo (90 seconds)"
  • "Scan to redeem 20% off"
  • "Scan for the menu"
  • "Scan to add to your contacts"

Specific CTAs lift scan rates 30–60% over generic "scan to learn more."

Rule 9: Test on three real phones before printing

One iOS recent (iPhone 14+), one Android recent (Pixel 7+ or Galaxy S22+), and one phone ≥3 years old. If any one fails, fix the code:

  • Increase contrast
  • Reduce logo size
  • Print larger
  • Simplify dot/eye shapes

Don't trust the generator's preview — it always shows a clean code on a perfect background.

Rule 10: Test at the actual final size

A code that scans on your laptop screen at 600×600 px may fail at 25 mm × 25 mm on print. Render and scan at the final size, not at design size.

Rule 11: Test on the actual print substrate

Glossy paper, matte cardstock, fabric, plastic — each absorbs and reflects light differently. A code that scans at 100% on inkjet may scan at 70% on offset print due to ink bleed and edge softness.

Always print one test sheet on the actual production stock and scan from typical viewing distance.

Rule 12: Avoid backgrounds that bleed into the code

Putting a QR over a busy photo or pattern? Add a solid white (or light) box behind the code with at least 4 mm padding. Without it, the photo's pixels confuse the scanner's threshold algorithm.

For dark-themed designs, use a high-contrast color block behind the code rather than placing it directly over the dark image.

Rule 13: Don't crop the quiet zone

Every QR code requires a "quiet zone" — empty padding around the matrix, at least 4 modules wide (usually 4 mm at typical print sizes).

Many designers crop the quiet zone to fit a tight layout. The result: scanners can't detect the code's edges and fail to lock on.

Always preserve at least 4 mm of empty space around the QR code in print layouts.

Rule 14: Choose dot shapes that scan well at the actual size

Modern generators offer custom dot shapes (rounded, dot, extra-rounded). They look great on screen. They're also more demanding on print quality.

Rule of thumb:

  • Square dots scan most reliably at small sizes and on cheap print
  • Rounded squares are a safe default for most uses
  • Dots look cleanest on digital but scan ~3% worse on cheap print
  • Extra-rounded (joined dots) look stunning but only work on high-quality print

Match the dot shape to the print quality you're paying for.

Rule 15: Don't put the QR upside down or rotated for "design"

QR codes rotate fine — that's what the finder squares are for. But humans expect to see them in standard orientation, and rotating to fit a layout creates a "wait, do I scan that?" pause that costs scan rate.

If the design forces a rotation, add a clear arrow/label.

Rule 16: Verify the destination on the first scan, every campaign

Before signing off on print, scan the QR yourself with a fresh phone session and verify the destination loads correctly. Specifically:

  • The URL is right
  • The page loads under 2 seconds
  • The page is mobile-optimized
  • Any tracking parameters are present
  • The page doesn't redirect through a slow chain

This is the rule most teams skip. The result: codes that scan to a 404 or a desktop-only page.

Rule 17: Wire UTM parameters and conversion tracking

Scan count is the surface metric. The real value is what users do after they scan. To measure conversion:

  1. Add ?utm_source=qr&utm_campaign=spring2026 to the destination URL
  2. Make sure analytics (GA4, PostHog, etc.) is firing on the destination page
  3. Define a conversion event (signup, purchase, video watched)
  4. Compare scan-to-conversion rate by campaign, location, time

Without UTM tracking, you have a scan number with no business context. With it, you have a measurable channel.

The 5 mistakes that destroy QR campaigns

Distilled from the 17 rules — these are the patterns that account for most failures:

1. Static code printed once, then the URL changes. The campaign goes dark. Always dynamic for campaigns.

2. Logo too big or error correction too low. Looks great, scans for 75% of users. Stay at or under 30% logo coverage at Level H.

3. Quiet zone cropped or background too busy. Scanner can't lock on. Always preserve padding.

4. Code too small for the typical viewing distance. Billboard QR at 5 cm is invisible from 3 m away. Use the 10× rule.

5. No plain-text URL fallback or CTA. Lost scans + unclear value. Always include both.

The pre-launch checklist

Before any QR code goes to print, verify each of these:

  • Dynamic for campaigns; static for permanent URLs
  • Foreground/background contrast ≥ 4.5:1
  • Print size ≥ 2.5 cm
  • Print size matches 10× viewing distance rule
  • Error correction Level H if logo embedded
  • Logo coverage ≤ 30%
  • Plain-text fallback URL printed alongside
  • Specific "what you get" CTA included
  • Tested on ≥ 3 real phones (iOS + Android, mix of ages)
  • Tested at final size on actual print substrate
  • Quiet zone preserved (≥ 4 mm padding)
  • Background not bleeding into the code
  • Destination loads in < 2 seconds and is mobile-optimized
  • UTM parameters wired
  • Analytics confirmed firing on destination
  • Conversion event defined and tracked

If any item is unchecked, fix before printing. Reprints are far more expensive than checklist time.

What "great" looks like — example campaign

A well-executed QR campaign in 2026 looks like this:

  • Dynamic QR with custom domain redirect (links.brand.com/spring)
  • Brand color foreground (verified ≥4.5:1 contrast against background)
  • Brand logo at 24% coverage, Level H error correction
  • Printed at 6 cm × 6 cm on the table tent (designed for 60 cm scan distance)
  • Plain text URL below: links.brand.com/spring
  • CTA above: "Scan to redeem 20% off this week"
  • Destination page loads in 1.4 seconds, mobile-optimized, with the discount code pre-filled
  • UTM parameters: ?utm_source=table-tent&utm_campaign=spring-2026&utm_medium=qr
  • Analytics: GA4 + PostHog firing; redemption tracked as conversion event
  • Tested on: iPhone 15, iPhone 8, Pixel 8, 4-year-old Galaxy

The campaign generates clean, attributable scan data that the marketing team can use to optimize within the first week.

FAQ

What's the most common reason a QR code fails to scan?

Insufficient contrast between modules and background. Light colors or busy photo backgrounds break the scanner's threshold algorithm. The fix: ensure ≥4.5:1 contrast and add a solid color block behind the code if needed.

Do QR codes work in low light?

Modern phone cameras handle low light reasonably well, but scan reliability drops below 50 lux. For posters in dim restaurants or low-light retail, increase the QR size by 25% to compensate.

How do I know if my QR code is "good enough"?

Pre-print, run the 17-rule checklist. Post-print, monitor scan-to-conversion rate. If scan rate is below industry benchmark for your placement (see QR code marketing campaigns), audit the code against the checklist.

Can a QR code last forever?

A static QR code stored on stable physical media (laminated print, engraved metal) can last decades. The matrix doesn't decay. The destination URL is the question — if your destination URL goes 404 in 5 years, the QR still scans, but the user lands nowhere.

For long-shelf-life codes, redirect to a stable URL (your homepage), not a campaign-specific URL.

What error correction level should I default to?

For codes without logos: Level M (15%) — adequate for most uses. For codes with logos: Level H (30%) — required. For harsh environments (outdoor, packaging): Level Q (25%) or H.

Why did my QR code work yesterday and not today?

If it's a dynamic code: the redirect server may have an outage, or the destination URL may have moved. Test the short URL directly in a browser.

If it's a static code: nothing changed in the QR; the destination URL is the issue. Test the URL.

Are QR codes still effective in 2026, or are they declining?

QR code scan volume hit an all-time high in Q1 2026 (per industry trackers). The pandemic permanence theory was right. As long as phones have native QR scanning in the camera app, the format is here.


A QR code that ticks all 17 rules has eliminated nearly every reason it could fail. A QR code that ticks 12 of 17 will lose 20–40% of potential scans to preventable mistakes.

For dynamic QR codes with the right defaults baked in (Level H, contrast warnings, logo coverage cap), QRbug handles the engineering side so you can focus on the design and placement.

Related articles

Try QRbug free

Create unlimited static QR codes — no signup required.