QRCodeStyled

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:

LevelRecoversUse when
L7%Clean environment, smallest possible code
M15%A sensible default for screens
Q25%Print, light decoration
H30%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.