QR Code Logo Size: How Much Can a Logo Actually Cover?
Almost every guide to branded QR codes repeats the same rule: set error correction to H and your logo can cover up to 30% of the code. The 30% is a real number from a real standard. It just does not mean what the rule says it means โ and codes designed to it fail. Here is what the figure actually counts, and what the limit really is.
Search for how big a logo on a QR code can be and the answers converge on one rule: use error correction level H, which tolerates 30% damage, and keep your logo under 30%. It is repeated by generator vendors, design blogs and documentation pages, and it sounds authoritative because the 30% is genuine โ it comes straight from the QR specification.
The problem is what it counts. The 7%, 15%, 25% and 30% attached to levels L, M, Q and H are approximate proportions of a symbol's codewords that Reed–Solomon error correction can restore. A codeword is an eight-bit unit of encoded data, not a region of the picture. The figure is a data recovery rate; the rule treats it as a licence to paint over 30% of the image. Those are different quantities, and the gap between them is where branded codes go to die.
We built the arithmetic out properly and then tested it against a real decoder. A logo covering 30% of a level H code's area failed to decode in every configuration we tried. Here is why, and what the limit actually is.
The Short Answer
- The 30% is codewords, not area. Level H can repair roughly 30% of a symbol's eight-bit codewords. It says nothing directly about how much of the picture you may cover.
- A logo destroys more codewords than its area suggests. A codeword is all-or-nothing: clip one of its eight modules and the whole thing is an error. Every codeword the logo touches, including the ones it only grazes, is written off.
- Nobody says whether they mean width or area. A logo spanning 30% of the width covers 9% of the area. A logo covering 30% of the area spans nearly 55% of the width. That is a factor of more than three, hiding inside the same sentence.
- Some of the code cannot be repaired at all. The corner squares, the timing lines and the format information sit outside the error-correction stream. Cover them and the decode never starts, whatever level you picked.
- In practice, for a typical short URL at level H, a square logo of about 30–33% of the code's width is a sensible maximum — roughly 9–11% of its area. Work it out for your own code with the QR code logo size calculator.
Where the 30% Comes From
A QR code is not a picture of your data. It is a grid of modules holding codewords — eight-bit units — of which some carry your content and the rest carry Reed–Solomon error correction. ISO/IEC 18004, the standard that defines the symbology, offers four levels of that protection, and the figures usually quoted for them are approximate proportions of the symbol's codewords that can be restored:
| Level | Approximate codeword recovery | Typical use |
|---|---|---|
| L | about 7% | Clean digital display, maximum data |
| M | about 15% | The common default |
| Q | about 25% | Print that will be handled |
| H | about 30% | Harsh environments — and logos |
Those percentages are what the specification and Denso Wave, which developed the symbology, publish. They are restoration rates for codewords. They are not, and have never been, guaranteed proportions of the visible image that may be cropped, covered or damaged. The slide from one to the other happens quietly, usually in a sentence like "level H tolerates 30% damage", and once it has happened the number looks like a design allowance.
There is a second detail worth knowing, because it explains why the figure is lower than you might expect from the amount of redundancy present. Reed–Solomon corrects errors at unknown positions, and each one costs two error-correction codewords: one to locate it, one to repair it. A decoder looking at a QR code has no idea where your logo is, so every corrupted codeword is an error rather than an erasure. A symbol carrying E error-correction codewords can therefore repair about E/2 corrupted ones. That halving is already baked into the 7/15/25/30 figures.
Why a Small Logo Destroys So Many Codewords
Here is the step the percentage rules skip entirely.
Codewords are not scattered through the symbol at random, and they are not stored as neat rows. The standard lays them out along a serpentine path: two-module-wide columns running from the right-hand edge, alternating upward and downward, stepping over the vertical timing line. In an open stretch of the symbol a single codeword occupies a block two modules wide and four modules tall.
That shape is what makes logos expensive. A codeword is all-or-nothing — corrupt any one of its eight modules and the decoder must treat the entire codeword as an error. A logo therefore writes off not only the codewords it sits squarely on top of, but every codeword it clips at the edge. For a small logo the boundary dominates, so the proportion of codewords lost runs well ahead of the proportion of area covered.
A worked example. Take a 53×53 module symbol (version 9) at level H, carrying an 85-character URL — the sort of thing you get once campaign tracking parameters are attached. Place a square logo spanning 20% of the code's width:
| Quantity | Value |
|---|---|
| Logo width | 20% of the symbol |
| Area covered | 4.0% |
| Modules covered | 121 of 2,809 |
| Codewords destroyed | 19 of 292 — 6.5% of the symbol |
| Codewords this symbol can repair | 96 |
| Share of the correction budget spent | 20% |
Four per cent of the area has cost six and a half per cent of the codewords and a fifth of the entire error-correction budget — and this is a conservative, well-behaved logo. The relationship is not linear, and it is never in your favour.
Thirty Per Cent of What, Exactly?
This is the ambiguity that does the most damage, because both readings appear in published guidance and almost nobody states which they mean.
| If "30%" means... | Then the logo spans... | And covers... |
|---|---|---|
| 30% of the width | 30% of the code's width | 9% of its area |
| 30% of the area | 54.8% of the code's width | 30% of its area |
A logo spanning 55% of a QR code's width is not a discreet brand mark in the middle. On most codes it reaches past the alignment patterns and towards the timing lines. Read one way the rule is roughly sensible; read the other it is a instruction to destroy the code. Same sentence.
So we checked which reading survives contact with a decoder. Using a reference decoder against synthetically generated codes with a white logo plate, a logo covering 30% of the area failed to decode at every level and every symbol size we tried, level H included. The width reading is the one that works, and only just.
The Parts Error Correction Cannot Save
Reed–Solomon protects the data and error-correction codewords. It does not protect the scaffolding, and a QR code has a lot of scaffolding:
- The three finder patterns — the large corner squares. A decoder uses them to locate the symbol, establish its orientation and work out the module size. Damage them and error correction never runs, because the decode never begins. This is the one hard rule, and no error-correction level changes it.
- The timing patterns — the alternating row and column between the finders, which fix the module grid.
- The format information — which records the error-correction level and mask. It carries its own separate protection and is stored twice, so it is more robust than the rest of the scaffolding, but it is not covered by the budget a logo draws on.
- The alignment patterns — the small concentric squares dotted through larger symbols, which let a decoder re-establish the grid when the image is distorted.
The alignment patterns deserve a paragraph of their own, because there is a claim in circulation that the centre of a QR code is the safe place to put a logo partly because it "sits away from the alignment patterns". For a lot of QR codes that is exactly backwards.
The alignment coordinates are laid out symmetrically, starting at module 6 and ending seven modules from the far edge. When a version has an odd number of them, the middle coordinate falls on the centre of the symbol — so there is an alignment pattern sitting precisely where logos go. We worked through all 40 versions: on 18 of them, a centred logo lands on an alignment pattern no matter how small you make it. Versions 7 through 13 are in that group, and those are ordinary sizes — a URL of 80 to 140 characters at level H lands squarely in the range.
This is not automatically fatal. A decoder can usually rebuild the grid from the remaining alignment patterns and the timing lines. But the alignment pattern nearest the centre is the reference that corrects for curvature and viewing angle, and losing it is one of the better explanations for why a branded code reads perfectly from the artwork file and then fails on a curved bottle, a shrink-wrapped label or a poster read from an angle.
What We Measured
Arithmetic gives a ceiling: exceed the number of codewords the symbol can repair and recovery is mathematically impossible. But staying under the ceiling only makes a decode possible, not certain. To find out how much daylight you actually need, we generated codes across 120 combinations of version, error-correction level and logo shape, overlaid a logo at two sizes each, and put them through a reference decoder.
| Logo sized to... | Decoded | Failed |
|---|---|---|
| The arithmetic ceiling (100% of the correction budget) | 74 | 46 |
| Half the correction budget | 119 | 1 |
Designing to the ceiling failed well over a third of the time on clean, synthetic images with perfect contrast, no print gain, no blur and no perspective — the easiest scan a code will ever face. Leaving half the budget in reserve worked in all but one case, a very large symbol whose logo swallowed an alignment pattern.
That is the practical rule worth taking away: the budget is a ceiling, not a target, and half of it belongs to the real world. Ink spread on absorbent stock, imperfect contrast, a phone camera that will not quite focus, a scan at 40 degrees in bad light — all of it draws on the same reserve the logo is eating.
Raising the Level Is Not Free
The standard advice when a logo does not fit is to push error correction up to H. It does buy budget, but it charges for it, and the charge is easy to miss.
A symbol of a given version has a fixed number of codewords. Raising the error-correction level converts data codewords into error-correction codewords, so the same content may no longer fit and the encoder moves up to a larger version. Take a 63-character URL:
| Level | Version | Grid | Repairable codewords | Max logo width, half budget |
|---|---|---|---|---|
| L | 4 | 33×33 | 10 | 9.0% |
| M | 5 | 37×37 | 24 | 18.9% |
| Q | 6 | 41×41 | 48 | 26.8% |
| H | 7 | 45×45 | 65 | 33.3% |
Level H does allow a substantially bigger logo here. But the grid has grown from 33 modules across to 45. Printed at the same physical size, every module is now 27% narrower, and module size is the thing a camera has to resolve. You can gain correction budget and lose scannability in the same move — which is why this only settles by testing, and why the print size calculator is the companion to this one.
The cheapest fix is almost always upstream: shorten the content. A shorter URL means a lower version, fewer and larger modules, and a bigger logo for free. If tracking parameters are what is inflating the link, build it deliberately in the UTM link builder and see what it costs before committing. Our guide to creating a QR code for a link covers the same trade-off from the other direction.
A Method That Works
- Fix the content first. Shorten the URL before you design anything. Every character you remove is budget you did not have to buy.
- Work out the real limit for your code rather than applying a rule of thumb. The logo size calculator counts the codewords your logo destroys and compares them to what the symbol can actually repair.
- Spend half the budget, not all of it. The other half is for print, ink, light and lenses.
- Keep well clear of the corner squares. Not a budget question — a hard stop.
- Keep the contrast honest. A logo and a weak colour pairing draw on the same reserve. The colour contrast checker covers the other half of that problem, and our piece on AI-generated and artistic QR codes looks at what happens when the whole symbol becomes decoration.
- Print it and scan the print. At final size, on the final stock, with an ordinary phone, from the distance and angle people will really use. Nothing else settles it.
That last step is not a formality. Every number above describes a clean digital image; paper, ink and cameras are where codes actually fail. If a test scan of the printed piece works on a couple of handsets at a realistic distance, the design is sound. If it does not, the calculator will tell you how much to give back.
Frequently Asked Questions
How big can a logo on a QR code be?
There is no single number, because it depends on how much data the code carries, which error-correction level it uses, and how much reserve you keep for the real world. As a starting point, a typical short URL at level H tolerates a square logo of roughly 30 to 33% of the code's width, which is about 9 to 11% of its area, while still keeping half the correction budget in hand. A longer URL, or a lower level, brings that down sharply — at level L on the same content it can fall below 10% of the width.
Does level H really let a logo cover 30% of the code?
No. The 30% is an approximate proportion of the symbol's codewords that Reed–Solomon can restore, and a codeword is an eight-bit unit spread across eight modules rather than a region of the picture. Covering 30% of the area of a level H code requires a logo spanning about 55% of its width, and in our decode testing that failed to read in every configuration tried. If the rule is read as 30% of the width it is roughly sensible; read as area it destroys the code.
Why does a logo destroy more codewords than the area it covers?
Because a codeword is all-or-nothing. Its eight bits occupy a two-module-wide, four-module-tall block, so corrupting a single module writes off the whole codeword. A logo therefore loses every codeword it touches, including those it only clips at the edge. On a small logo the boundary dominates, which is why a shape covering 4% of the area can destroy 6.5% of the codewords.
Can I put a logo over the corner squares if I use level H?
No, and this is the one genuinely hard rule. The corner squares are finder patterns, and together with the timing patterns and the format information they sit outside the data and error-correction stream. A decoder needs them to locate the symbol and read its parameters before error correction runs at all, so damaging them is not an expensive choice — the decode never starts. No error-correction level changes this.
Why does a branded QR code scan on screen but fail in print?
Because the logo has already spent the budget that print needs. Ink spread on absorbent stock, imperfect registration, lower contrast under shop lighting and a camera that cannot quite focus all corrupt modules too, and they draw on the same correction capacity the logo is consuming. A code sitting at 90% of its budget from the logo alone has almost nothing left. This is the main argument for the half-budget reserve.
Does a round logo let me go bigger than a square one?
Yes, modestly. A circle covers about 78.5% of the area of the square that encloses it, so at the same nominal width it destroys fewer codewords and can be a few percentage points wider for the same cost. It is a real saving rather than a large one, and it does not change anything about the finder patterns or the alignment patterns underneath.
Should I just always use error correction level H?
Not automatically. Raising the level converts data capacity into error-correction capacity, so the same content may no longer fit in the same version and the encoder steps up to a larger grid. At a fixed printed size that means more, smaller modules for a camera to resolve. You can gain correction budget and lose scannability in the same change, so check whether the version number moved before assuming H was an improvement.
Is there an alignment pattern under my logo?
On 18 of the 40 QR versions there is one close enough to the centre that a centred logo touches it at any size, including the common versions 7 to 13. It is not automatically fatal, because a decoder can often rebuild the grid from the other alignment patterns and the timing lines. But that pattern is what corrects for curvature and viewing angle, so losing it matters most on bottles, curved labels and codes read at a steep angle.
The Short Version
The 30% attached to error-correction level H is real, and it is not a design allowance. It counts codewords — eight-bit units of encoded data — not square millimetres of artwork. Because a codeword is destroyed by damage to any one of its eight modules, a logo always costs more codewords than its footprint suggests, and because the corner squares, timing lines and alignment patterns carry no error correction at all, part of the symbol is not negotiable at any level.
Work the limit out for the code you are actually shipping rather than applying a number you read somewhere, spend no more than half the budget, and prove it with a scan of the printed piece. A branded code that does not scan is worse than a plain one that does.