QR Code Error Correction Levels (L, M, Q, H) Explained
A deep dive into the four QR code error correction levels — what they mean, how much damage each can handle, and which one to pick for your use case.
What Error Correction Means in a QR Code
Error correction is the feature that lets a QR code survive damage and still scan correctly. Built into every QR code is a layer of redundant data, generated using Reed-Solomon algorithms. When a scanner reads the code, it can reconstruct missing or corrupted modules from this redundancy. Without error correction, a single smudge, tear, or printer defect would make the entire code unreadable.
Every QR code carries one of four error correction levels, chosen when the code is generated: L, M, Q, or H. Each level reserves a different amount of the code for redundancy. A higher level means more of the data is duplicated, which lets the code survive more damage — but at the cost of a denser code with more modules packed into the same area. Picking the right level is a direct tradeoff between resilience and compactness.
The Four Levels Side by Side
Level L (Low) reserves about 7 percent of the code's data for error correction. This is the densest and smallest QR code option. It is used when space is extremely limited and the code will be displayed digitally or in pristine print conditions. The tradeoff is clear: a small scratch, fingerprint, or poor print quality can easily push the code past the recoverable threshold.
Level M (Medium) is the default for most QR code generators, including ours. It reserves about 15 percent for error correction. This is the sweet spot for general printed materials — flyers, menus, business cards — where some minor wear and tear is expected but the code will not be exposed to significant damage. Level M strikes a balance between code size and survivability.
Level Q (Quartile) reserves about 25 percent of the code for error correction. This is the right choice when the code will be printed on surfaces that experience wear — product packaging that gets handled in shipping, outdoor signage exposed to weather, or stickers that might get partially peeled. Level Q codes are noticeably denser than Level M codes with the same data, but they can tolerate real-world abuse.
Level H (High) reserves about 30 percent of the code for error correction. This is the maximum. Level H codes are the densest but also the most resilient. They are required when you want to place a logo, graphic, or decorative element in the middle of the QR code — the logo obscures part of the data, and the extra redundancy makes up for what is covered. If you are branding a QR code with a logo, use Level H.
How Reed-Solomon Error Correction Actually Works
Reed-Solomon is a mathematical coding scheme developed in 1960 for correcting errors in data transmission. It treats the data as a polynomial over a finite mathematical field, adds extra checksum symbols derived from that polynomial, and uses the checksums to detect and reconstruct corrupted symbols on the receiving end. The same algorithm is used in CDs, DVDs, deep-space communications, and QR codes.
In a QR code, the data is split into blocks. Each block gets its own set of Reed-Solomon error correction codewords. If part of a block is destroyed — say, a corner gets torn off, or a coffee stain covers some modules — the scanner can use the intact codewords from that block plus the redundant codewords to rebuild the missing information. As long as the damage stays under the block's error correction capacity, the code still decodes perfectly.
The important nuance is that error correction is per-block, not global. A single concentrated smudge that wipes out one whole block is harder to recover than the same amount of damage spread evenly across the code. Level H gives every block 30 percent headroom, which is why logos placed in the center survive: the center spans just a few blocks, and the surrounding intact blocks still decode normally.
Which Level Should You Choose?
For pure digital use — QR codes displayed on a website, in an app, or in an email — Level L is sometimes tempting because it produces the smallest image. In practice, the savings are negligible and the risk of a slightly fuzzy screen capture breaking the code is real. Stick with Level M for digital use and you will never have a surprise failure.
For standard print — menus, flyers, business cards, posters, tickets — Level M is almost always correct. The code is compact enough to fit comfortably, and 15 percent redundancy handles normal handling wear. If the material will be laminated or protected by glass, Level M is more than enough.
For outdoor or high-wear placements — product labels that get scratched, packaging that goes through shipping, signage exposed to sun and rain — move up to Level Q. The extra density is worth it for the higher survivability. Many retail packaging QR codes use Level Q by default because the code has to survive a trip through a warehouse and across a shelf.
For branded or logo-embedded QR codes, always use Level H. Any logo covers data, and Level H gives you the 30 percent tolerance you need to still scan reliably. Our generator automatically switches to Level H the moment you upload a logo, so you do not have to remember this rule manually.
Error Correction and Logo Placement
The interaction between error correction and logo placement is where most custom QR code failures happen. Designers assume that adding a logo is just a cosmetic overlay, but every pixel of the logo is covering data the scanner needs. If you place a logo without increasing error correction, you are silently eating into the code's damage tolerance — and the code may still scan in the designer's office but fail on a customer's phone with worse lighting.
The rule of thumb is conservative: keep the logo under 20 percent of the total code area at Level H. Some generators will let you push it to 25 percent, but you are losing margin with every percentage point. If you want a large centered logo, the better approach is to design a bigger QR code, not a bigger logo — a 5 by 5 centimeter code with a 20 percent logo overlay is far more reliable than a 2 by 2 centimeter code with a 30 percent logo.
Shape also matters. A square logo sits cleanly within the data region. A circular or irregular logo creates an uneven dead zone that is harder for Reed-Solomon to recover from. If you must use a round logo, set a tight bounding box and keep the overall coverage under 15 percent.
Testing and Real-World Validation
Error correction levels give you a theoretical damage tolerance, but real-world testing is the only way to confirm a specific code survives its use case. Print the code, then deliberately damage a copy — scratch it, cover part with your thumb, fold a corner — and see if it still scans. This is especially important when you have pushed the limits with a large logo or an unusual color pair.
Another useful test is the distance test. A Level H code scans reliably up close but may fail from far away because the denser module grid is harder to resolve at lower pixel density. Walk away from the printed code with a phone and find the furthest distance where it still scans within two seconds. If the placement requires a longer scan distance than that, enlarge the print.
When in doubt, pick Level H and enlarge the code. A code that is 10 percent larger and survives real-world conditions beats a compact code that looks neat but fails once out of every ten scans. QR codes are free to print larger, but a dead code costs every customer interaction it fails on.