QR code not scanning / why a logo can sit in the middle (error correction)

Your phone will not read a QR, or you wonder how a picture in the middle still works. Both come down to the same idea: QR codes carry spare recovery data (error correction), but only within limits — and scanners still need contrast, size and a quiet border.

Why a logo in the middle still scans

A QR symbol is a grid of dark/light modules plus finder patterns. Part of the payload is redundant: Reed-Solomon parity so a reader can rebuild missing or flipped modules. Covering the centre with a logo deliberately “damages” modules; level H (~30% recovery) is the usual choice for branded codes, M (~15%) for plain print. Go past the budget and phones fail even though the code “looks fine”.

# Typical generator knobs (names vary)
# errorCorrectionLevel: 'L' | 'M' | 'Q' | 'H'
# Anvil: https://api.oddlathe.com/v1/qr.svg?text=hello&ec=H

Cause table (will not scan)

SymptomLikely causeFix
Works on screen, fails on paperInk bleed / low DPI / glossy glareLarger modules, matte print, test with several phones
Fails after adding a logoLogo larger than EC budgetRaise to Q/H; shrink logo; keep logo off finder/timing patterns
Fails outdoors / at angleToo small or low contrastBigger print; dark modules on light background; avoid coloured backgrounds under the code
Scanner opens wrong / partial URLTruncated payload or old cached printRe-encode full URL; avoid tiny version with long query strings
Some apps work, others don’tReader quality / focus / torchBetter lighting; hold steady; try the OS camera vs a dedicated scanner
Always fails close-upMissing quiet zone (white margin)Leave ≥4 modules of empty light border on all sides

Error-correction levels

Higher EC makes a bigger code for the same text (more modules). That is normal: you trade size for toughness.

Quiet zone, contrast, size

Logo placement tips

  1. Use level H (or at least Q).
  2. Keep the logo under ~20–25% of the symbol area; never cover the three large corner finders or the timing patterns.
  3. Prefer a solid centre with a light halo so modules at the edge of the logo stay readable.
  4. Test on iOS Camera, Android Camera, and one dedicated scanner before printing thousands.

Generate and preview with the free QR code tool (levels L/M/Q/H, colours with a contrast check, and a pretend centre logo). Making one for a network? See Wi-Fi QR code format. Related encoding pages: Base64 is not encryption, Base64 image data URLs.

Related

Scanning a code that is on your own screen · Is this QR code safe?

Questions

Why can a logo sit in the middle of a QR code?

Error correction stores spare data so a reader can rebuild modules the logo covers — usually with level H (~30%).

What do L, M, Q and H mean?

Four Reed-Solomon levels: roughly 7%, 15%, 25% and 30% of codewords recoverable after damage.

Why won’t my QR code scan?

Most often: too small, low contrast, missing quiet zone, logo too large, glare, or a truncated URL. Test several phones.

Does a higher error-correction level make the code bigger?

Yes. More parity needs more modules for the same payload.

Can I invert colours (white modules on black)?

Many phone cameras struggle with inverted codes. Prefer dark-on-light unless you have tested the exact readers you care about.

Is a QR with a logo less secure?

No — EC is about damage tolerance, not cryptography. Treat the payload (URL, text) as public unless you encrypt it yourself.

Published · updated .

Try it

Related guides

Newest guides