QR code error correction levels (L, M, Q, H): what they mean and which one to use
If you have ever had a QR code that scans fine on your laptop screen but fails on a poster, the problem is usually not the URL.
It is the physical reality:
- glare
- low contrast
- motion blur
- cheap paper
- a logo covering modules
- someone printed it too small
This is where error correction helps.
It can make a QR code survive damage and still decode.
But it comes with a tradeoff: higher error correction usually means a denser code that can be harder to scan at a distance.
This guide explains the four QR code error correction levels (L, M, Q, H) and how to choose the right one.
TL;DR
- Error correction is built-in redundancy that helps a QR code decode when parts are missing or distorted.
- Levels are L, M, Q, H (from lowest to highest redundancy).
- Use M for most normal use cases.
- Use Q or H if you will add a logo, expect damage, or print on tricky surfaces.
- Do not use H to "fix" a QR code that is too small. Fix size, contrast, and quiet zone first.
What is QR code error correction?
QR codes include extra data so the scanner can reconstruct the payload even if some modules are unreadable.
This is implemented using Reed-Solomon error correction.
You do not need to understand the math to use it well.
You only need to understand the outcome:
- higher error correction = more tolerance to damage and dirt
- higher error correction = more modules (denser pattern) for the same data
The four levels: L, M, Q, H
You will usually see the levels displayed as letters:
- L (Low)
- M (Medium)
- Q (Quartile)
- H (High)
Roughly speaking, they can recover from about:
- L: ~7% damage
- M: ~15% damage
- Q: ~25% damage
- H: ~30% damage
These percentages are rules of thumb, not guarantees.
Real-world scanning depends on print quality, lighting, camera, and distance.
Which error correction level should you use?
Here is the practical decision tree.
Use level M for most QR codes
If you are generating a normal QR code (link, WiFi, vCard) and you are not doing fancy design, M is a safe default.
Examples:
- QR code on a website
- QR code on a product insert
- QR code on an invoice
- QR code on a menu (printed cleanly)
Use level Q when you expect real-world mess
Choose Q if any of these are true:
- you print on matte paper that might smudge
- the code might get scratched
- you want more tolerance for motion blur (people scanning quickly)
- you are printing on packaging where curvature can distort the pattern
Q often gives you a better safety margin without making the code too dense.
Use level H when you add a logo or cut into the code
Choose H when you:
- place a logo in the center
- intentionally remove modules for a stylized design
- print on surfaces that degrade (outdoor signage, stickers, shipping labels)
But be careful.
If you use H and your QR code becomes very dense, it can become harder to scan from far away.
That is why H works best when:
- the payload is short
- the code is printed large enough
When to use level L
Level L is useful when:
- your payload is short
- your print is clean
- you want the code to be as simple as possible
Common scenarios:
- a QR code displayed on a screen at close range
- a quick internal workflow where scanning conditions are controlled
In marketing, L is rarely the best choice.
The real scan killers (and why error correction will not save you)
Error correction is not magic.
These are the issues that break QR codes even with high levels.
1) Too small for the scan distance
If you print a tiny QR code on a poster and expect it to scan from 2 meters away, no error correction level will fix that.
Fix the size.
If you want a rule of thumb: increase QR size as scan distance increases.
Related: QR code size and scanning distance: a practical guide
2) Missing quiet zone
The quiet zone is the empty border around the QR code.
If designers cram the code against text or a border, scanners struggle.
Related: QR quiet zone explained (with size examples)
3) Low contrast or inverted colors
QR codes scan best when dark modules sit on a light background.
If you want a custom look, do it carefully.
Related: QR code contrast: how to design it so it still scans
4) Long URLs and tracking bloat
A long URL creates a denser QR code.
A denser code is harder to scan, especially when printed small.
If you need tracking, consider:
- a short redirect URL
- a reusable QR code that points to a short link
Related: QR redirects: best practices
Error correction and logos: the safe way
If you plan to put a logo in the center:
- start with H
- keep the logo small
- keep it centered
- preserve the finder patterns (the three big squares)
- test on multiple phones
Do not cover corners.
The corners are not decoration.
They are how scanners detect orientation.
A quick checklist before you print
Use this before you ship a campaign.
- Payload is short (or you use a redirect)
- Quiet zone is present and clean
- Contrast is high
- Error correction is M (default), Q (messy), or H (logo)
- Printed size matches scan distance
- Tested on at least 3 phones in realistic lighting
How QRShuffle helps
QRShuffle is built for QR codes that work in the real world.
You can:
- create QR codes fast
- keep your links clean (no tracking mess in the QR payload)
- design codes that match your brand while staying scannable
If you want to stop guessing, create your next QR code in QRShuffle.
CTA: Create a QR code in minutes at https://qrshuffle.com
