Design
Logo size limits by error-correction level
Error correction level sets the logo budget — L tolerates 7% damage and allows no logo, M around 15% allows roughly 10% coverage, Q around 25% allows 18%, and H around 30% allows about 20%. Stay under the ceiling because print damage and camera angle spend the same budget as the logo.
The budget table
A centred logo is deliberate damage, paid for from the error-correction budget. Each error-correction level buys a recovery capacity, and the practical logo allowance is meaningfully below it:
| Level | Codewords recoverable | Theoretical ceiling | Practical centre logo |
|---|---|---|---|
| L | ~7% | 7% | none |
| M (default) | ~15% | 15% | up to ~10% of area |
| Q | ~25% | 25% | up to ~18% |
| H | ~30% | 30% | up to ~20% |
Two reasons the practical column is smaller. First, the budget is shared: ink spread, glare, a bent surface and an angled camera all consume recovery capacity, and a logo that spends the whole budget leaves nothing for the physical world — the "scans on screen, fails in print" signature. Second, a logo's damage is contiguous. Error correction is organised in blocks and interleaved precisely to spread localised damage across blocks, but a large solid patch still concentrates losses more than the same percentage scattered as random noise. Percentages near the ceiling behave worse than the arithmetic suggests. The spec-side derivation of these numbers is on maximum safe logo coverage, and the mechanism on how logos work without breaking a code.
Reading the table as a designer
- Ship at H with ~20% coverage for any logo that matters. This is the combination with genuine headroom.
- Q at ~15–18% is a good compromise when H would push the code a version denser than the layout can afford.
- M fits only a small mark — a favicon-scale glyph around 10%.
- L is for codes with no logo at all.
UseQR enforces sanity here: the logo option defaults to 20% of the code width and hard-clamps at 35%, and the renderer knocks out the modules beneath the logo with one clear module of padding, so the logo sits on a clean panel instead of half-covering modules — ambiguous, partially covered modules are worse for a decoder than cleanly missing ones. Position is not negotiable either: the budget only exists for data regions, which is why logos stay central, far from the finder patterns and timing rows that no error correction protects — the full placement rules are in logo best practices.
Raising EC is not free
Stepping M → H roughly doubles the correction codewords, which pushes the symbol to a higher version: more, smaller modules at the same printed size. For a dense payload that can cost more robustness than the logo budget gains. The stable order of operations:
- Shorten the payload (a shorter URL drops the version).
- Raise error correction (
ec=H). - Add the logo at ≤ 20%.
- Decode the finished artwork with the validator, which reports whether the styled, logoed code actually reads — the only number that finally matters.
FAQ
How big can a logo be in a QR code?
About 20% of the code's area at error-correction level H, around 18% at Q, and roughly 10% at the default level M. The theoretical tolerances are higher — 30%, 25% and 15% — but real-world damage draws on the same budget.
Which error correction level should I use with a logo?
H for logos near 20% coverage, Q for smaller marks when density is a concern. Shorten the payload first: raising the level increases density, and a dense high-EC code can end up more fragile than a sparser Q-level one.
Why did my 25% logo break the code when H tolerates 30%?
The tolerance assumes ideal conditions and distributed damage. A logo is one contiguous patch, and printing, glare and angle consume the remaining margin. Near-ceiling coverage fails intermittently, which is the worst way to fail.
Does the logo shape matter, or just the percentage?
Both. A compact central logo on a clean knockout panel is the best case; wide banners, off-centre placements and logos overlapping structural patterns fail at far lower coverage. Keep it central, padded, and verified by decoding.
Try it — free, no signup
Related
- QR code design best practices — seven rules ranked — The seven design rules that decide whether a styled QR code scans, ranked by how often breaking them kills codes, with the number behind each rule.
- Adding a logo to a QR code, safely — Keep the logo central, under about 20–25% of the code area, at error-correction level Q or H, on a solid light panel with two or three modules of…
- Transparent background QR codes — the moving floor — A transparent QR code inherits whatever sits behind it as its background, so contrast must be re-checked per placement. When bg=t helps and when it bites.
- QR code frames and CTA labels, done safely — Frames and scan-me labels help when they name the destination and sit outside the quiet zone. Placement rules, sizes, and the label parameter in UseQR.