# 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.

Source: https://useqr.app/docs/design/logo-size-limits-by-error-correction-level · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The budget table

A centred logo is deliberate damage, paid for from the error-correction budget. Each
[error-correction level](/docs/spec/error-correction-levels-explained) 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](/docs/troubleshooting/qr-code-scans-on-screen-not-in-print)"
signature. Second, a logo's damage is contiguous. Error correction is organised in
blocks and [interleaved](/glossary/interleaving) 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](/docs/spec/maximum-safe-logo-coverage), and the mechanism
on [how logos work without breaking a code](/docs/spec/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](/glossary/finder-pattern) and timing rows that no error correction
protects — the full placement rules are in
[logo best practices](/docs/design/qr-code-with-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:

1. Shorten the payload (a shorter URL drops the version).
2. Raise error correction (`ec=H`).
3. Add the logo at ≤ 20%.
4. Decode the finished artwork with the [validator](/validate), 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

- https://useqr.app/url
- https://useqr.app/validate
