New:Experimental free plan now live for everyonev1.6.0

Ok1Second
Menu
Guide

QR code error correction, explained simply

Every QR code contains backup data alongside the real data. That redundancy is why a code still scans with a scratch across it — and why a logo in the middle does not break it.

Updated October 6, 2026 · 4 min read

The four levels

Error correction is expressed as a percentage of the code that can be lost and reconstructed. The default level is fine for clean digital use; printed codes often benefit from more.

The percentages describe how much of the pattern the scanner may fail to read — because it is covered, scratched, faded or badly lit — while still rebuilding the original data.

  • L — about 7% recoverable, smallest code
  • M — about 15%, the usual default
  • Q — about 25%, good for print
  • H — about 30%, best with logos or heavy styling

How the backup data works

A QR code is not a picture of your URL. It is a grid of data words with error-correction words woven in, computed from the data with a checksum-style algorithm. When the scanner reads the grid it can spot which words came out corrupted and solve for the originals.

Crucially, the words are interleaved: consecutive modules come from different words. That is why damage gets spread out. A scratch through a fifth of the code damages a little of many words rather than destroying a few — and each of those words has its own correction allowance to spend.

  • Redundancy is calculated from the data, not stored as a copy
  • Interleaving turns one big hole into many small, fixable ones
  • Recovery is per word — a small amount everywhere is easier than everything in one place

The trade-off

More redundancy means more modules for the same content, so the code gets denser. That is why a heavily styled code needs to be printed larger: you are asking it to carry more backup data.

Density is the thing to watch at print size. The module count rises with the correction level, so a code at H has smaller individual modules than the same content at L printed at the same physical size. Scan distance depends on module size, not on the size of the square.

  • Higher level, same content: more modules, smaller each
  • Same printed size: the H version needs a closer scan
  • Keep the 10:1 size-to-distance rule in mind when you raise the level

Choosing a level

Treat the level as a function of what the code has to survive. On a screen, nothing goes wrong and L is fine. On paper, something usually does.

  • L: screen-only, or a code read from a few centimetres under good light
  • M: general digital use and clean, large print
  • Q: the sensible default for printed codes
  • H: logos, heavy styling, curved surfaces, or anywhere the print may scuff

What error correction cannot fix

It recovers missing modules. It cannot recover a code whose modules are the wrong size for the viewing distance, or too low in contrast to be read at all — those are failures of the print, not of the data.

The same applies to a missing quiet zone, a code on a reflective surface, and a code smeared by motion blur. In each case the bits that arrive are confidently wrong, and redundancy has nothing to reconstruct from.

  • Too small or too far: a resolution problem, not a redundancy problem
  • Too little contrast: the scanner reads the wrong modules
  • No quiet zone: the scanner cannot find the code in the first place
  • Blur or glare: raising the level does not help

Frequently asked questions

Which level should I use for print?
Q as a default, or H if you are adding a logo, heavy styling or the code sits somewhere it may scuff. L and M are for screens and clean, large print.
Does error correction make a code harder to scan?
No — it makes it more tolerant. The only downside is a denser pattern, which matters at small print sizes because the individual modules shrink.
Can error correction fix a badly damaged code?
Up to a point. It recovers a proportion of missing modules, not a code that is the wrong size, has no contrast, or is missing its quiet zone.
Does a higher level make the code bigger?
Bigger in module count, not in content. For the same URL the pattern needs more modules, so at the same printed size each module is smaller — print it larger or expect a closer scan.
Which level is best with a logo?
H. It tolerates about 30% loss, which leaves room for a logo of roughly a third of the code's width, and still covers normal print wear on top.
Can I change the level after printing?
No. The level is baked into the pattern, so changing it means generating a new code and reprinting. Decide before the run, not after the first bad scan.

Keep reading

Ready to create one?

Dynamic codes are editable forever from €3/month.

Create your first dynamic QR code

Free to start. One code, editable forever, with scan tracking from the first scan.

Privacy-first analyticsNo per-scan feesEdit links anytimeNo contract