A logo in the center of a QR code is the classic branding move — and the classic scan-killer when done wrong. The good news: the math is well understood. Error correction is deliberately designed to tolerate damage, and a centered overlay is exactly the damage pattern it can survive — if you respect the size, correction, and contrast rules.
How it works: error correction as insurance
QR codes store redundant data so scanners can reconstruct damaged patterns. At error correction level H, a scanner can recover up to 30% of the code's modules. A centered logo covers a contiguous region — which error correction handles surprisingly well, because QR's Reed–Solomon coding distributes redundancy across the whole pattern. The rules below keep the covered region inside the recoverable budget.
The three rules
1. Size: ≤15% of code width. The logo should cover at most ~15% of the code's width — roughly a quarter of the central area. Bigger logos push the covered region past what level H can reconstruct:
code width 100px → logo ≤ 15px
code width 512px → logo ≤ 76px
code width 1024px → logo ≤ 153px
2. Correction: level H. With an overlay, error correction jumps to H (30%). This makes the pattern denser — which means the minimum print size grows. A logo'd code at 2cm won't scan like a clean code at 2cm; test the actual print.
3. Contrast: light plate behind the logo. The logo's own colors will collide with module colors. A white (or brand-tinted light) circular or rounded plate behind the logo keeps the boundary legible and gives scanners a clean edge to read around.
What to avoid
| Anti-pattern | Failure mode |
|---|---|
| Logo > 20% of width | Modules unrecoverable; code fails on older scanners |
| Level M or L with logo | Recovery budget too small for the overlay |
| Logo without plate | Logo edges merge with modules; boundary unreadable |
| Colored modules (light blue, yellow) | Contrast falls below scanner threshold |
| Cropping the quiet zone | Scanner can't find the code at all |
The workflow that never ships a broken code
- Generate the code at the final size with the QR API (level H where available).
- Overlay the logo + plate in the design tool, respecting the 15% rule.
- Print it for real — screen proofs lie; ink and paper don't.
- Test with 2–3 phones, including an older Android camera app, at the real viewing distance.
- Keep a clean (no-logo) variant in the asset library as the fallback.
# base code at print size
curl "https://yas.sh/api/v1/qr?url=https://go.yourbrand.com/launch&size=1024&format=png" -o code-clean.png
When to skip the logo entirely
- Tiny formats (business cards, stickers < 2cm) — the logo eats too much of the budget.
- High-volume print with inconsistent quality (newspapers, uncoated stock).
- Codes expected to last years — the more damage tolerance, the better.
In those cases, put the brand mark next to the code instead of inside it — the business QR guide shows the layout pattern.
Conclusion
Logo overlays are safe when they respect three numbers: ~15% of width, level H correction, and a light plate behind the mark. Respect the print test and the scan test, and the branded code works everywhere a clean code does. Generate the base at the QR endpoint, overlay in your design tool, and verify on paper before you print the run.
