QR Code Error Correction Levels: L, M, Q, or H — Which Is Best?
The Short Answer
Every QR code carries built-in redundancy that lets scanners read it even when part of the code is damaged, dirty, or obscured. That redundancy is controlled by the error correction level, and you have four options: L, M, Q, and H. Higher levels recover from more damage but produce a denser, larger code.
For most everyday uses, M (Medium) hits the right balance. If you’re printing on materials that wear out or adding a logo over the center, go with Q or H. If file size matters more than durability, for example in a digital display that never gets scratched, L is fine.
The rest of this guide breaks down exactly what each level does, where each one makes sense, and how to choose without second-guessing yourself.
What Error Correction Actually Does
QR codes aren’t just a grid of random dots. The standard (ISO/IEC 18004) encodes your data multiple times using Reed-Solomon error correction, the same math used in CDs and barcodes. When a scanner reads a damaged code, it reconstructs the missing pieces from the redundant copies.
The trade-off is size. More redundancy means more modules (the small squares) in the grid, which means a physically larger or denser code to carry the same payload.
Breaking Down Each Error Correction Level
L (Low): 7% Recovery
Level L can recover from up to 7% module damage. It produces the smallest, least dense QR code of the four options.
This level makes sense when the code lives in a controlled environment: a laptop screen, a digital menu on a monitor, or a PDF that users open on their phones. Nobody is going to scratch a screen with a key, and the code never gets wet.
The downside is that any real-world wear, a smudge, a fold in paper, a partial shadow, can push damage past that 7% ceiling and make the code unreadable.
M (Medium): 15% Recovery
Level M recovers from up to 15% damage. It’s the default in most generators because it covers the majority of practical print scenarios without bloating the code size significantly.
Business cards, flyers, posters, and product packaging all work well at M. The code is compact enough to look clean, and 15% tolerance handles minor scuffs, low-quality printing, and brief exposure to moisture.
If you’re not sure which level to use, M is a safe starting point.
Q (Quartile): 25% Recovery
Level Q recovers from up to 25% damage. Codes generated at this level are noticeably denser, but they hold up in rougher conditions.
Outdoor signage, labels on physical products that change hands repeatedly, and any code that will be placed on a surface people touch frequently all benefit from Q. It’s also the minimum recommended level when you’re overlaying a logo on the center of the code, since the logo itself counts as “damage” from the scanner’s perspective.
H (High): 30% Recovery
Level H is the most resilient option, recovering from up to 30% module loss. The code is the largest and densest of the four.
Use H when the code will be printed on materials that degrade, stamped into metal, embroidered, etched onto wood, or used in industrial environments. It’s also the right call when the logo overlay covers more than roughly 20% of the code surface.
The one practical caution: at H, a short URL can still produce a compact code, but a long data string (a full vCard, a long web address) will generate a very large grid. If print space is tight, shorten your URL first.
Side-by-Side Comparison
| Level | Recovery Rate | Code Density | Best Environment | Logo Overlay Safe? |
|---|---|---|---|---|
| L | 7% | Lowest | Digital screens, PDFs | No |
| M | 15% | Low-Medium | Office print, basic marketing | No (risky) |
| Q | 25% | Medium-High | Outdoor signage, product labels | Yes (up to ~20%) |
| H | 30% | Highest | Industrial, textiles, engraving | Yes (up to ~30%) |
A Real-World Example
Fernwood Coffee Roasters, a specialty roaster with a retail shop in Portland, Oregon, printed 2,000 kraft paper bags with a QR code linking to their brewing guide. They used Level M, which seemed reasonable at the time.
Within a few weeks, customer complaints trickled in: the codes wouldn’t scan. The kraft paper, slightly textured and prone to absorbing oils from coffee beans, degraded the printed dots more than a smooth surface would. Combined with the fact that the bags were often handled with damp hands, the 15% tolerance wasn’t enough.
They reprinted at Level Q. The new codes were slightly larger, but they scanned reliably for the full shelf life of the product, and the complaint volume dropped to zero. The only change was one setting in the generator.
Decision Framework
Choose L if:
- The code will only ever appear on a screen
- You’re embedding a QR code in a PDF or digital document
- Data payload is large and you need to minimize code size
- Durability is completely irrelevant to the use case
Choose M if:
- You’re printing on standard paper in a controlled indoor environment
- The code is on a flyer, brochure, or business card
- No logo overlay is planned
- You want a sensible default without thinking too hard about it
Choose Q if:
- The code goes on outdoor signage, product packaging, or labels
- You’re adding a logo over the center of the code
- The printed surface is textured, curved, or likely to pick up wear
- The code will be scanned repeatedly by members of the public
Choose H if:
- The code is engraved, etched, embroidered, or stamped
- It lives in a harsh environment: high humidity, direct sunlight, industrial handling
- The logo or design overlay covers more than 20% of the code area
- Long-term legibility is more important than compact size
How to Set the Error Correction Level Step by Step
-
Decide on your destination URL or data first. Shorter strings produce smaller codes at every level. If you’re linking to a long page URL, use a URL shortener before generating.
-
Pick your level using the decision framework above. When in doubt between two adjacent levels, go with the higher one. The size difference is small; the reliability difference is not.
-
Open QRapid’s free generator at qrapid.co. Enter your URL or text, then look for the error correction setting in the customization panel. Select L, M, Q, or H from the dropdown.
-
Add your logo if applicable. Only do this at Q or H. At M or L, a logo overlay will likely push damage past the recovery threshold and cause scan failures.
-
Download and test before printing. Print a single copy at the actual intended size and scan it with at least two different phones: one current-model iPhone and one Android device. If both scan cleanly, you’re good.
-
For print runs, test at degraded quality. Photocopy the printed code once, or photograph it at an angle in dim light. If it still scans, your error correction level is appropriate for real-world conditions.
Static QR codes never expire and require no subscription to keep working, so whatever level you choose, the code remains functional indefinitely.
Frequently Asked Questions
Q: Does a higher error correction level make the QR code scan faster?
Not directly. Scan speed depends more on camera quality, lighting, and code contrast than on the error correction level. However, a higher level can make a damaged or low-contrast code scan successfully when a lower level would fail entirely. In practice, a clean, high-contrast code at any level scans in under a second on a modern phone.
Q: Can I change the error correction level after I’ve already generated and printed the code?
No. Once a QR code is generated and printed, the error correction level is fixed. If you need to change it, you have to generate a new code. This is one reason to test thoroughly before committing to a print run. The good news is that generating a new code at qrapid.co is free and takes about thirty seconds.
Q: Why does my QR code with a logo sometimes fail to scan even though I used a high error correction level?
Usually this comes down to logo size or placement. Even at Level H (30% recovery), a logo that covers more than 30% of the code’s surface area will exceed the recovery capacity. The fix is to reduce the logo to roughly 20-25% of the code area. Also check that the logo hasn’t been placed asymmetrically, covering timing patterns or finder patterns at the corners, which are critical for the scanner to locate the code in the first place.