QR Code Error Correction Levels Explained
One of the cleverest things about QR codes is that they still work when they're damaged. Scratch one, smudge it, cover part of it with a logo -- and it can still scan. This isn't magic. It's Reed-Solomon error correction, and every QR code has a configurable level of it.
The four levels
The QR code specification defines four error correction levels, each allowing recovery from increasing amounts of damage:
- L (Low) -- recovers up to ~7% damage
- M (Medium) -- recovers up to ~15% damage
- Q (Quartile) -- recovers up to ~25% damage
- H (High) -- recovers up to ~30% damage
These percentages refer to the proportion of data modules (the black and white squares) that can be destroyed or obscured while the code remains scannable.
The tradeoff
There's a catch. Higher error correction means more redundant data, which means a denser QR code. Same content at Level H will produce a visibly more complex pattern than at Level L. More modules means the code needs to be printed larger or scanned from closer to be readable.
This is a real tradeoff, not an academic one. A long URL encoded at Level H might produce a QR code so dense that it barely scans from a phone camera at arm's length. The same URL at Level M scans instantly.
Which level should you use?
Level M (Medium) is the right default for almost everyone. It's what most QR code generators use, and it balances durability with code density well. Unless you have a specific reason to change it, stick with M.
That said, here's when each level makes sense:
Level L: when data density matters
Use Level L when you're encoding a lot of data and need the QR code to stay as simple as possible. This applies when you have a very long URL or large block of text, and the code will be displayed in a clean, controlled environment -- a screen, a printed page, or packaging that won't get scuffed.
Level M: the everyday choice
Level M handles most real-world scenarios. Business cards, flyers, restaurant table tents, website displays. It provides enough error correction to survive minor printing imperfections and typical wear without making the code unnecessarily dense. When in doubt, use M.
Level Q: outdoor and rough conditions
Level Q is useful when QR codes will be exposed to weather, handling, or partial obstruction. Think outdoor signage, warehouse labels, shipping packaging, or anything that might get rained on, scuffed, or partially covered by a sticker.
Level H: logos and heavy damage
Level H is primarily used when you plan to overlay a logo or image on top of the QR code. Placing a logo in the center of a QR code physically destroys those modules. At Level H, the code can lose up to 30% of its data and still scan -- enough room for a small centered logo. If you're going this route, read how to add a logo to your QR code for the full process.
Level H is also appropriate for industrial environments where codes take serious physical abuse: factory floors, construction sites, or long-term outdoor installations.
A practical note
Always test your QR code after generating it, regardless of the error correction level. Scan it with multiple devices, at the distance people will actually use. A code that scans perfectly on your desk might fail when printed on a banner and scanned from ten feet away.
On qrmake.dev, you can switch between all four error correction levels and see the QR code update in real time. Try different levels with your content and pick the one that produces a clean, easily scannable result.