# QR code error correction levels explained

> L, M, Q and H tolerate roughly 7%, 15%, 25% and 30% damage. Higher levels cost capacity, so the same payload needs a bigger version — which means smaller modules at the same printed size. Raising the level to make a code more robust can make it harder to scan.

Source: https://useqr.app/docs/spec/error-correction-levels-explained · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The four levels

| Level | Damage tolerated | Capacity vs L | Use for |
|---|---|---|---|
| **L** | ~7% | 100% | Screens, maximum data in minimum size |
| **M** | ~15% | ~79% | The default; most print work |
| **Q** | ~25% | ~56% | Codes with a logo, moderately dirty environments |
| **H** | ~30% | ~43% | Heavy logos, industrial labels, outdoor signage |

## The trade that catches people out

Higher error correction does not add robustness for free. It spends capacity on redundancy,
so the same payload needs a **higher version** — more modules, each smaller at the same
printed size.

A 200-character URL:

| Level | Version | Modules | Module size at 3 cm |
|---|---|---|---|
| L | 7 | 45 | 0.67 mm |
| M | 8 | 49 | 0.61 mm |
| Q | 10 | 57 | 0.53 mm |
| H | 12 | 65 | 0.46 mm |

If the code is already near the limit of what your printed size supports, moving M → H makes
it *worse*. This is the most common mistake in QR troubleshooting: the instinct is to raise
error correction, and for a dense code that is backwards.

## The correct order

1. **Shorten the payload.** Biggest effect, no cost.
2. **Choose the error-correction level** the environment actually needs.
3. **Size the code** for the distance and the module floor.
4. **Verify** by decoding the rendered output.

## What error correction does not protect

Reed–Solomon protects the **data** region. It does not protect:

- [Finder patterns](/glossary/finder-pattern) — cover one and the code cannot be located.
- The [quiet zone](/glossary/quiet-zone).
- [Format information](/glossary/format-information) beside the finders — though this has its
  own BCH protection and is stored twice.
- [Timing patterns](/glossary/timing-pattern).

This is why a centre logo is safe at Q or H and a corner logo is not at any level.

## Erasures versus errors

Reed–Solomon corrects **erasures** — damage in a known location — at twice the rate of
**errors**, where the decoder does not know which symbols are wrong. A clean logo covering a
region reads as an erasure; scattered print noise reads as errors. That is why a solid,
obviously-covered patch is more survivable than the same area of speckle.

## FAQ

### Which error correction level should I use?
M for most printed work. Q or H only when adding a logo or printing on something that will be scuffed, wet or faded. L for screens where you want the smallest possible code.

### Does higher error correction make a QR code easier to scan?
Not necessarily. It increases the version, making every module smaller at the same printed size. For a dense code that makes scanning harder, not easier.

### How much of a QR code can be damaged?
Roughly 7% at level L, 15% at M, 25% at Q and 30% at H — but only in the data region. Damage to the corner finder patterns or the quiet zone is not recoverable at any level.

### Why is a logo safer than random damage?
A logo covers a known contiguous region, which Reed–Solomon treats as erasures and corrects at twice the rate of scattered errors.

## Try it

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