Error correction and the logo in the middle
Why "30% error correction" does not mean you can cover 30% of the area, and how large a logo can safely be.
Updated 2026-08-13
QR codes correct their own errors: a symbol that is scratched, smudged or partly covered still reads. That is why you can put a logo in the middle. But the figure "30%" is routinely misread in a way that leads people to cover far too much.
The four levels
Per Denso Wave, who created the format:
| Level | Recovers | Use when |
|---|---|---|
| L | 7% | Clean environment, smallest possible code |
| M | 15% | A sensible default for screens |
| Q | 25% | Print, light decoration |
| H | 30% | A logo, or a surface that gets dirty |
Higher levels mean more modules for the same content. That is the trade.
Thirty percent of what, exactly
This is the part that trips people up. Denso Wave states plainly that it is a ratio of the total codewords — of the data — and not 30% of the image area.
Three practical consequences:
First, it is a ceiling, not an allowance to spend. If a logo consumes the whole 30%, the code still decodes in perfect conditions — but nothing is left for a crease, dust, glare, ink spread or a slightly shaky photo. In practice keep a logo at 20–25% when using ECC H.
Second, error correction works per block. Data is split into Reed–Solomon blocks and then interleaved. Damage concentrated in one block can exceed that block's capacity even while the total stays under 30%. Because of that interleaving, a centred logo is considerably safer than one of the same area pushed toward a corner.
Third, error correction does not protect the function patterns. The three large squares in the corners, the timing lines, the alignment squares and the format information are all outside the protected data. Covering any part of them kills the code regardless of the level you chose. This is why a logo belongs in the centre and must never grow far enough to touch the corners.
The quiet zone is not optional either
The specification calls for a 4-module quiet zone around the symbol. It is not decorative whitespace — it is what lets a scanner separate the code from its surroundings. Placing a code flush against an image edge or against text is one of those failures that looks perfectly fine to the eye.
Contrast: the numbers to keep
You need at least 3:1 between the pattern and the background; for print, aim for 4.5:1 or better. And keep it dark on light. Light-on-dark codes work in some scanners, but nothing in the format obliges them to — and plenty simply refuse.
One caution about contrast specifically: a code at 1.9:1 can still decode from a clean digital image on screen, yet fail on paper in ordinary light. If your tool only checks by decoding a digital render, it will report "fine" for a design that is about to fail in print.
What to do, in short
- Use H when there is a logo.
- Keep the logo centred, under 25% of the code's width.
- Never let it touch the three corner squares.
- Keep the 4-module quiet zone.
- Contrast 4.5:1 or better, dark on light.
- Print at the real size and scan with a real phone at least once before printing in volume.