# Maximum safe logo coverage by error correction level

> Safe logo area coverage by error correction level, L (7% damage tolerance) is effectively unusable for logos, M (15%) allows about 8% of the code area, Q (25%) about 16%, and H (30%) about 20%. Those are area figures — a logo spanning 45% of the code's side covers 20% of its area.

Source: https://useqr.app/docs/spec/maximum-safe-logo-coverage · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The table

Each error-correction level tolerates a fixed fraction of damaged codewords. A logo should
spend at most about two thirds of that tolerance, leaving the rest for print damage, glare
and camera noise:

| EC level | Damage tolerance | Safe logo **area** | Logo **side** (of code width) |
|---|---|---|---|
| L | ~7% | none — do not use for logos | — |
| M | ~15% | ~8% | up to ~28% |
| Q | ~25% | ~16% | up to ~40% |
| H | ~30% | **~20%** | up to ~45% |

The mechanics of *why* a logo consumes error-correction budget are on
[how logos work without breaking a code](/docs/spec/how-logos-work-without-breaking-a-code);
this page is the numbers.

## Area vs side — the unit trap

The single most common mistake in logo sizing is confusing the two columns above.
Generators (UseQR included) specify logo size as a fraction of the code's **side**; the
error-correction budget is spent by **area**, and area is the side fraction squared:

| Logo side ratio | Area covered |
|---|---|
| 0.20 (typical default) | 4% |
| 0.30 | 9% |
| 0.35 (UseQR's maximum) | 12.25% |
| 0.40 | 16% |
| 0.45 | 20% |

So a "20% logo" in a generator's settings usually means 20% of the side — a modest 4% of
the area, comfortably safe even at level M. UseQR clamps the side ratio to 0.35, which caps
area coverage at 12.25%, about half the level-H safe line — and it raises error correction
to H automatically when you add a logo, unless you have pinned a level yourself.

## Why the safe figures sit below the tolerance

Three effects eat the gap between "~30% tolerance" and "~20% safe":

1. **The budget is shared.** Scuffs, ink problems and low light draw from the same
   Reed–Solomon account as the logo. A code that scans in the office at 29% coverage fails
   on a wet poster.
2. **Edges are messy.** Anti-aliased logo borders and translucent shadows turn crisp
   erasures into partial, *wrong* modules — and errors cost double the correction capacity
   of erasures.
3. **Damage is not perfectly spread.** [Interleaving](/docs/spec/error-correction-block-interleaving)
   distributes a central patch across blocks well, but the distribution is not exact; one
   block always runs closer to its individual limit than the average suggests.

Raising coverage from 20% to 25% at level H does not fail on your desk. It fails
probabilistically, in the field, on the phones and prints you did not test — which is the
worst possible way to find out.

## Verify, do not extrapolate

The table is a planning tool, not a guarantee: payload density, logo edge treatment and
colour contrast all shift the real threshold. The definitive check is a
[decode–verify loop](/glossary/decode-verify) — render the exact artwork, then read it back
with a real decoder. [/validate](/validate) does precisely this and warns when a large logo
is paired with an EC level below H. Design-side sizing guidance, including per-level visual
examples, lives at [logo size limits by error correction level](/docs/design/logo-size-limits-by-error-correction-level).

## FAQ

### What is the maximum logo size for a QR code?
About 20% of the code's area with error correction H — a logo spanning up to roughly 45% of the code's width. Push beyond that and you are spending margin reserved for print damage, so field scan rates degrade before desk tests fail.

### Can I put a logo on a level L QR code?
No, not safely. Level L tolerates only about 7% codeword damage, which real-world print imperfections can consume on their own. Regenerate the code at Q or H before adding any logo.

### Does a bigger logo need a bigger QR code?
Indirectly. Raising error correction to H to afford the logo increases the version, adding modules; keeping the printed size fixed then shrinks every module. If the code is dense, enlarge the print or shorten the payload alongside the logo.

### How do I know if my logo is too big?
Render the final artwork and decode it with a real scanner or a verify tool. If it fails, or only just decodes, shrink the logo side ratio or raise the error correction level and test again — arithmetic estimates, including this table, are starting points rather than proof.

## Try it

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