How much of a QR code can a logo cover?

Every QR code carries more information than it needs, on purpose. That surplus is what lets a phone read a code with a coffee stain on it, a scratch across the middle — or your logo sitting right on top. The mechanism is called error correction, and the level you pick decides how big a logo the code can tolerate, how much dirt it survives, and how many modules it needs. This guide explains the four levels in plain language, walks through the parts of a code that error correction cannot rescue, and ends with numbers you can use when you place a logo.
Four levels, four promises
The QR standard (ISO/IEC 18004) defines four error-correction levels. Level L can restore about 7 % of the code's codewords, M about 15 %, Q about 25 % and H about 30 %. The percentage refers to the data and correction bytes together, not to the picture's area, but for planning purposes the two are close enough to treat as the same thing.
The safety costs space. A 47-byte link fits in a version 3 code (29×29 modules) at level L but needs version 6 (41×41) at level H — almost twice as many modules for the same content. On a poster that is irrelevant; on a 2 cm sticker, smaller modules mean the printer and the camera both have less to work with.
A sensible default is M for plain codes that will be printed cleanly, Q for codes that live outdoors or on packaging, and H whenever a logo covers part of the code. QR Nook switches to H automatically the moment you add a logo, and you can lower it again if the scan check stays green.
Reed–Solomon in plain words
QR codes protect their content with Reed–Solomon codes, the same family of codes used on CDs and in deep-space radio. Your data is split into 8-bit codewords, and the encoder computes extra parity codewords from them using polynomial arithmetic. The parity is not a copy of the data — it is a set of equations that any small enough number of wrong codewords can be solved from.
The catch is that the decoder does not know which codewords are wrong. Correcting an error at an unknown position costs two parity codewords; correcting a known gap (an erasure) costs one. Damage from a logo is unknown-position damage as far as the decoder is concerned, which is why the level H figure is 30 % rather than the 60 % the parity count would suggest.
Larger codes split the codewords into several blocks and interleave them across the picture. A single blot then spoils a little of every block instead of wiping out one of them entirely, which is exactly what makes a centred logo survivable.
Versions 1 to 40 and why bigger codes are more fragile
A QR "version" is its size in modules: version 1 is 21×21, each further version adds four modules per side, and version 40 is 177×177. Capacity grows with version and shrinks with the correction level — a version 40 code holds 2,953 bytes at level L but only 1,273 at level H.
At a fixed printed size, a higher version means smaller modules. Small modules are the real enemy: a slightly soft print, a low-resolution camera or a bit of glare turns a few of them into the wrong colour, and every misread module eats into the same correction budget your logo is using. Keep the payload short so the version stays low, then spend the correction budget on the logo.
The parts you must never cover
Error correction protects the data region only. The three large squares in the corners are finder patterns; the camera uses them to locate the code and work out its angle, and a logo over one of them means the code is simply not found. The single-module-wide lines connecting the finders, along row 6 and column 6, are timing patterns that tell the decoder how many modules there are.
The 15 bits of format information hugging the finders tell the decoder which correction level and mask were used; they are stored twice, but covering both copies is fatal. From version 2 onwards there are also small 5×5 alignment patterns — one near the bottom-right corner in small codes, a whole grid of them in large ones — that keep the sampling grid straight when the paper is curved.
Finally, the quiet zone: the standard asks for four modules of empty background on every side. It is not part of the code, so error correction cannot compensate for it. A frame that touches the modules or a busy photo behind a transparent code takes away the contrast edge the locator needs.
How big a logo, really
Think in area, not width. A logo that spans 30 % of the code's width covers 9 % of its area; 40 % of the width covers 16 %; 50 % covers 25 %. At level H the budget is 30 %, but the same budget also has to absorb print defects, so a comfortable rule is: area under 15 %, which means width under about 38 %. QR Nook's logo slider tops out at 45 % for a reason, and the scan check turns red before you get there on most payloads.
Clearing the modules behind the logo ("knockout") does not reduce the damage — those modules are lost either way — but it makes the code look intentional and stops a semi-transparent logo from producing half-grey modules that decoders find harder to classify than a clean gap. Add a few pixels of padding so the logo's own edge does not blur into neighbouring modules.
Testing before you print
A decoder on a screen is a good first test, not the last one. QR Nook rasterizes your design at 600 px on white and runs the open-source jsQR decoder over it — if that fails, a phone will almost certainly fail too. If it passes, print the code at its final size on the final material and scan it with at least two phones: the camera app on an iPhone and on an Android phone, ideally an older model.
Test at the real scanning distance, under the real light, and with the code slightly tilted. Glossy lamination and metallic inks reflect the phone's flash straight back into the lens; matte paper is kinder. If a print fails, the fixes are always the same: fewer modules, larger modules, smaller logo, higher level, wider quiet zone.
The takeaway
Error correction is a budget: H gives you 30 % of the codewords to lose, and a logo, print defects and glare all draw from the same account. Keep the logo's area under about 15 % of the code, never touch the corner finders or the quiet zone, keep the payload short so modules stay large, and confirm with a real phone on the real print.
Build a styled code, check that it scans, export PNG or SVG
More guides

Wi-Fi QR codes: how they work
The WIFI: string phones understand, the characters you must escape, which phones join from the camera, and why a printed code is a password.

vCard QR codes for business cards
Why vCard 3.0 beats 4.0 in QR codes, which fields phones import, what each costs in modules, and how large to print the code on a card.