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)
| Symptom | Likely cause | Fix |
|---|---|---|
| Works on screen, fails on paper | Ink bleed / low DPI / glossy glare | Larger modules, matte print, test with several phones |
| Fails after adding a logo | Logo larger than EC budget | Raise to Q/H; shrink logo; keep logo off finder/timing patterns |
| Fails outdoors / at angle | Too small or low contrast | Bigger print; dark modules on light background; avoid coloured backgrounds under the code |
| Scanner opens wrong / partial URL | Truncated payload or old cached print | Re-encode full URL; avoid tiny version with long query strings |
| Some apps work, others don’t | Reader quality / focus / torch | Better lighting; hold steady; try the OS camera vs a dedicated scanner |
| Always fails close-up | Missing quiet zone (white margin) | Leave ≥4 modules of empty light border on all sides |
Error-correction levels
- L (Low) — ~7% recovery. Dense data, clean digital display, no logo.
- M (Medium) — ~15%. Default for many libraries; good general print.
- Q (Quartile) — ~25%. Light branding / slight wear.
- H (High) — ~30%. Centre logos and rough handling. Larger symbol for the same payload.
Higher EC makes a bigger code for the same text (more modules). That is normal: you trade size for toughness.
Quiet zone, contrast, size
- Quiet zone: empty light border around the symbol (about four module widths). Cropping it in CSS or a tight crop is a top “won’t scan” cause.
- Contrast: dark modules on a light background. Light-on-dark “inverted” codes often fail consumer cameras.
- Physical size: rough rule — module width several millimetres for handheld distance; billboards need proportionally larger codes.
- Distance & focus: phone autofocus hates tiny glossy stickers; step back or enlarge.
Logo placement tips
- Use level H (or at least Q).
- Keep the logo under ~20–25% of the symbol area; never cover the three large corner finders or the timing patterns.
- Prefer a solid centre with a light halo so modules at the edge of the logo stay readable.
- 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 .