QRBestQR code generatorOpen the generator

Error correction levels, and which one you actually need

6 min read

Every QR code carries more data than it strictly needs. The extra is redundancy, and it lets a scanner rebuild the message when part of the code is dirty, damaged, or covered. You choose how much redundancy to spend on, and the choice has a cost that is easy to overlook.

The four levels

LevelRecoverableTypical use
L (Low)about 7%Clean digital display, short content, printed large
M (Medium)about 15%The sensible default for almost everything
Q (Quartile)about 25%Industrial labels, surfaces that get scuffed
H (High)about 30%A logo covering the middle, or a code that will take abuse

The cost nobody mentions

Redundancy is data, and data is modules. Raising the level does not leave the code the same and make it tougher. It makes the code hold more, which means either more modules in the same square, or a physically larger square.

More modules in the same square means each module is smaller. A smaller module is harder for a camera to resolve. So there is a point where raising the error correction level makes a code less likely to scan, because you have traded a robustness you did not need for a module size you cannot afford.

This is the common failure. Someone encodes a long tracking URL, sets the level to H because it sounds safest, prints the result at 20mm on a flyer, and gets a dense grid that phones struggle with. The same URL at level M, printed at the same size, would have larger modules and would scan from further away.

What "30% recoverable" does not mean

It does not mean you can cover any 30% of the picture. Recovery works on data codewords, and some parts of a QR code are not data at all. The three large squares in the corners are finder patterns, and they are how a scanner locates and orients the code in the first place. The thin dotted lines running between them are timing patterns, which set the grid spacing. The bands beside the finders carry format information.

Damage any of those and no amount of error correction saves you, because the scanner never gets as far as decoding. This is why a logo goes in the centre and not in a corner.

How to choose

  • No logo, ordinary use: M. It is the default for a reason, and it handles a fingerprint, a crease, or a slightly bad print.
  • With a centred logo: H. The logo is deliberate damage, and you need the budget to absorb it. Then keep the content short so the code does not become dense.
  • Very long content, printed small: L or M, and shorten the content instead. Every character you remove makes every module bigger.
  • Outdoors, on equipment, on packaging that rubs: Q or H. Here the damage is real rather than decorative.

The shortest content wins

Before raising the error correction level, look at what you are encoding. A URL with fifty characters of campaign tracking on the end produces a much denser code than the bare address. Dropping the tracking parameters, or using a shorter path on your own domain, buys you more real-world reliability than any setting in this tool.

Once the code is built, test it. Read what size to print a QR code before sending anything to a printer.


More guides