
QR code error correction: what L, M, Q and H actually mean (and which to use)
L, M, Q or H? A QR code's error correction level decides whether it survives the real world. Here is what the four levels really recover, why the famous "30% damage" figure is a myth, and which level to choose for screen, print, outdoor and logos.
ScanKit · Organization
· 13 min read
Every QR code you generate carries a hidden setting that decides whether it survives the real world. It is the error correction level, and most tools bury it behind a single letter: L, M, Q or H. Pick the wrong one and a code that scanned perfectly on your monitor fails on a weathered poster, behind a coffee ring, or the moment a designer drops a logo into the middle. Pick the right one and the same artwork shrugs off dirt, glare and a printer's bad day.
This is the setting that gets explained badly more than almost any other. You will read that "level H lets you damage 30% of the code", which is true in a narrow technical sense and misleading in every way that matters to a printed campaign. So this article does two things: it tells you exactly what the four levels are, and it corrects the myth that surrounds them, so you can choose a level on purpose rather than leaving the default to chance.
What error correction actually is
A QR code does not just store your data. It stores your data plus a deliberate surplus of redundant information, calculated so that a scanner can rebuild the original even when part of the symbol is unreadable. The maths behind it is Reed-Solomon error correction, the same family of codes that lets a scratched CD still play and a deep-space probe still phone home. Denso Wave, the company that invented the QR code, built this in from the start precisely because the codes were meant to be read off dirty factory parts, not pristine screens.
The mechanism is worth understanding because it explains everything that follows. Your data is split into blocks, and each block gets a batch of extra "error correction codewords" bolted on. When a scanner reads a damaged code, it uses those extra codewords to detect which parts are wrong and reconstruct them. The more redundancy you add, the more damage it can absorb, but the bigger and denser the code becomes. That trade is the whole story.
The four levels, and what each really recovers
The standard that governs QR codes (ISO/IEC 18004, maintained from Denso Wave's original design) defines four error correction levels. Each is quoted as the approximate share of the code's total codewords that can be restored if they are lost or corrupted.
- Level L (Low): about 7% recovery. The leanest option. Best where you know the code will be clean: a screen, a slide, a video, a digital ad.
- Level M (Medium): about 15% recovery. The general-purpose default, and the level most generators select if you never touch the setting. Right for ordinary indoor print: flyers, menus, business cards, packaging inserts.
- Level Q (Quartile): about 25% recovery. The outdoor and high-wear choice. Window stickers, A-frames, vehicle graphics, anything that lives with weather and handling.
- Level H (High): about 30% recovery. The maximum. Reserved for harsh conditions and, in practice, for any code with a logo dropped into it.
Those percentages are hard specification, taken straight from Denso Wave's own documentation. The advice attached to each level is the industry rule of thumb that has grown up around it, and it is sound, but the percentages are where people go wrong. So before you treat "30%" as a damage allowance, read the next section, because it almost certainly does not mean what you think.
The "30% damage" myth, corrected
Here is the claim you will see everywhere: choose level H and you can damage, cover or lose 30% of the QR code and it will still scan. It sounds like a licence to slap a quarter of the artwork over with a logo. It is not, and believing it is how good-looking codes end up unscannable.
Three things are true at once, and together they puncture the myth.
First, the percentage is measured in codewords, not in physical area. Denso Wave is explicit that the figure is a "data restoration rate for total codewords". A codeword is a block of eight modules (the little squares), and they are scattered and interleaved across the whole symbol, not laid out in a tidy grid you can carve a corner from. So "30% of codewords" does not map cleanly onto "30% of the square you can see".
Second, some parts of the code cannot be recovered at any level. The three big squares in the corners are the finder patterns, and the lines running between them are the timing patterns. They are how a scanner locates and squares up the code in the first place. Damage those and there is no decoding step to reach, error correction or not. The redundancy protects your data, not the structure that lets a camera find it.
Third, real-world damage behaves worse than the theory. The most careful public test of this, by engineer Huon Wilson, generated thousands of codes and damaged them progressively. Level H codes typically stopped scanning once the damage passed roughly 20% of the area, well short of the headline 30%, and the lower levels failed earlier still. The honest reading is that the percentages rank the levels correctly (H really is far tougher than L; Wilson found markedly more H codes survived damage than L codes) but the numbers are a theoretical ceiling, not a field allowance. Budget for less, and never let the damage touch a corner.

The diagram above shows the four levels side by side. Read it like this:
- Level L carries the least redundancy, so the code is the loosest and the central clear space for a logo is smallest.
- Level M adds enough headroom for everyday print without growing the code much.
- Level Q noticeably increases the density, buying real outdoor durability.
- Level H packs in the most redundancy, which is what lets a centred logo sit on top without breaking the scan, at the cost of the busiest, densest code of the four.
What higher correction costs you
Redundancy is not free. To recover more, the code has to carry more, and for a fixed amount of data that means more modules. A QR code grows in fixed steps called versions, from version 1 at 21 by 21 modules up to version 40 at 177 by 177, adding four modules a side at each step. Push the error correction up and you push the version up, because the extra codewords have to go somewhere.
The size of that penalty is real. Denso Wave's own figures show that reaching the higher correction levels roughly doubles the codeword overhead. For a fixed payload, Wilson's measurements put a level H code at well over twice the module count of the equivalent level L code. Looked at the other way, error correction eats into how much you can store: a version 1 symbol holds 41 numeric characters at level L but only 17 at level H. If you want the full picture of that trade, our guide to how much data a QR code can hold walks through the version tables.
Why does that matter for a printed campaign? Because more modules at the same physical size means smaller modules, and smaller modules are harder for a phone camera to resolve, especially at distance or in poor light. So cranking everything to H "just to be safe" can backfire: you trade theoretical damage tolerance for a denser code that a passer-by struggles to scan at all. This is the same density-versus-legibility tension covered in how big a QR code should be, and error correction is one of the dials feeding into it.
Which level to actually choose
Strip away the theory and the decision is short. Match the level to where the code will live.
- On a screen (digital signage, a slide, an email, a video), use L. There is no dirt to recover from, and the leaner code reads faster and from further away. Higher levels here are pure cost with no benefit.
- For ordinary indoor print (flyers, menus, brochures, business cards), M is the right default and the one most tools already pick.
- For outdoor or high-handling placements (windows, A-boards, vehicles, signage that takes weather and touch), step up to Q. When you are unsure between M and Q for something that lives outside, choose Q; the size cost is modest and the durability is worth it.
- For harsh environments or any code carrying a logo, use H. Most branded-QR tools force H (or at least Q) automatically the moment you add a logo, because the logo is, to the scanner, simply damage it has to recover from.
Notice that "always use H" is not on the list. It is a common reflex and usually the wrong one. On a clean screen, H gives you a denser, harder-to-read code in exchange for damage protection you will never need.
Logos, and the level that makes them possible
The single most common reason an agency cares about this setting is the logo. A client wants their mark in the centre of the code, and error correction is what lets that work: the scanner treats the covered modules as damage and rebuilds them from the redundancy elsewhere. That is why logo placement effectively requires level H, and why the more of the code your logo hides, the less headroom remains for the genuine wear the code will meet in the field.
The working rule is to keep the logo centred, cover no more than about a fifth of the code with it, leave a little clear padding around the mark, and never let it creep over the three corner finder patterns. Treat the error correction budget as shared between the logo and the real world: a logo that eats most of it leaves nothing for a smudge or a bad camera angle. We cover the full method, including colour and contrast, in putting a logo in a QR code without breaking the scan.
The short-URL advantage you can design around
Here is a lever many people miss, and it is the one place where the kind of code you use changes the maths. Error correction and data length both push the version up. If you encode a long destination URL directly into a static code, you are already spending modules on that URL before you add any redundancy, so reaching level Q or H forces a large, dense symbol.
A dynamic QR code sidesteps this. It encodes only a short redirect address (in ScanKit, a compact /r/ link), and the real destination lives behind that hop where you can change it any time. Because the encoded payload is tiny, you have spare capacity to spend on error correction instead. The practical result is that you can run level Q or H at the same physical size without the module count exploding, so you get the durability and the logo headroom without the legibility penalty. That short payload is a direct consequence of how versions and capacity work, and it is one more reason agencies lean on dynamic rather than static codes.
Where error correction will not save you
It is just as important to know what this setting cannot fix, because reaching for a higher level is the wrong instinct for several common failures.
Error correction handles localised loss: a scuff, a smudge, mud across one region, a logo in the centre. The redundancy is spread across the symbol, so a knocked-out patch can be rebuilt from what survives. What it cannot handle is anything that degrades the whole code at once. Sun-faded ink, weak printed contrast, and a glossy lamination that throws glare across the surface all hurt every module together, including the finder patterns, and no error correction level recovers from that. Those are contrast and finishing problems, fixed with a darker code on a lighter background, a matte finish, and a proper quiet zone, not with a bump from M to H. Our print preparation guide covers the production side, and if a specific code is failing, the not-scanning diagnostic walks through the usual suspects in order.
Frequently asked questions
What are the four QR code error correction levels?
There are four: L, M, Q and H. They restore roughly 7%, 15%, 25% and 30% of the code's total codewords respectively if part of the symbol is lost or damaged. L is the leanest and suits clean digital display; H is the most robust and is used for harsh conditions and for codes with a logo. M is the common default for ordinary print.
How much of a QR code can be damaged before it stops scanning?
Less than the headline percentages suggest. The figures (up to about 30% at level H) refer to recoverable codewords, not to a contiguous chunk of the visible square, and they exclude the corner finder patterns, which cannot be recovered at all. In controlled testing, level H codes typically failed once damage passed roughly 20% of the area, and lower levels failed sooner. Treat the percentages as a ranking, not a guarantee, and keep damage away from the corners.
Which error correction level should I use for a printed QR code?
For ordinary indoor print such as flyers and menus, level M is the sensible default. For outdoor or high-handling placements like windows, signage and vehicles, step up to Q. Reserve H for harsh environments and for any code carrying a logo.
What error correction level do I need for a QR code with a logo?
Level H, in almost every case. The logo covers part of the code, and the scanner treats those covered modules as damage to reconstruct, so you need the highest redundancy. Keep the logo centred, cover no more than about a fifth of the code, and never let it touch the three corner finder patterns. Many branded-QR tools switch to H automatically when you add a logo.
Does a higher error correction level make a QR code harder to scan?
It can. Higher correction adds redundant codewords, which for the same data pushes the code to a higher version with more, smaller modules. On a clean surface that denser code is actually harder for a camera to read, not easier, which is why level L is preferable on screens and H is overkill there. Match the level to the conditions rather than maxing it out by reflex.
Does error correction reduce how much data a QR code can hold?
Yes. The redundant codewords take up space that would otherwise hold your data, so capacity drops as the level rises. A version 1 code holds 41 numeric characters at level L but only 17 at level H. Keeping the encoded payload short, for example by using a dynamic redirect URL, leaves more room for both your data and a higher correction level.
The short version
Error correction is the redundancy a QR code carries so it can be read after the world has had a go at it. There are four levels: L for clean screens, M for ordinary print, Q for outdoor and high-wear placements, and H for harsh conditions and any code with a logo. The famous "30% damage" figure is a codeword ceiling, not a physical area you can cover, the corner finder patterns are never recoverable, and in the field codes tend to fail before the headline number, so budget conservatively. Higher levels cost you density and capacity, which is why "always use H" is the wrong default and why a short dynamic URL is worth designing around: it frees up the capacity to run a robust level at a readable size. Open your QR tool, find the L/M/Q/H setting, and set it for where the code will actually live before you send the artwork to print.
Keep reading

· 12 min read
QR codes for events and trade shows: the agency playbook for capture, tracking and follow-up
How agencies should use QR codes at events: a distinct, trackable, dynamic code on every touchpoint, honest opt-in lead capture, per-touchpoint attribution, and fast follow-up. The playbook for turning a booth into a measurable funnel.
Read more
· 11 min read
QR code menus for restaurants: the agency guide to doing it right
A good QR code menu is faster than paper, instantly updatable, and accessible. The agency guide: view-only vs order-and-pay, why the code must be dynamic, accessibility, privacy, and how to place and measure the codes.
Read more