A logo in a QR code works because of error correction, the spare codewords that let a scanner repair damage. The logo is damage you chose. The job is to keep it inside the budget.
Step 1: set error correction to H
Level H lets a scanner recover about 30% of codewords. That is the budget for the logo plus real-world wear. Anything lower and a logo of useful size will push the code over the edge. The error correction explainer shows why the percentages are of codewords, not of the picture, which is why the safe logo size is smaller than 30%.
Do this
Level H, short link, logo covering 22% of the area.
Not this
Level L because it made the code smaller, logo covering 20%. Fails on the first scan.
Step 2: centre it
The three corner squares are finder patterns; the small square near the bottom-right is an alignment pattern. Cover any of them and the scanner cannot even find the code. The centre is the furthest point from all of them.
Do this
Logo centred, at least three modules clear of any finder or alignment pattern.
Not this
Logo shifted to the lower right for visual balance, covering the alignment pattern.
Step 3: size it by area
The logo safe-area tool blanks the modules under a logo of your chosen size and tries to decode the result, so its verdict is real. As a starting point:
| Error correction | Logo area (of the whole code) |
|---|---|
| H | up to about 25% |
| Q | up to about 20% |
| M | up to about 12% |
| L | none |
A logo that is 40% of the width covers 16% of the area; 50% of the width covers 25%. Wide logos cover less area than square ones at the same width.
Step 4: give it a white margin
Logos have dark edges. Without a gap, the scanner reads those edges as modules and the damage spreads beyond the logo’s footprint. A margin of one module of white around the logo, or a white rounded rectangle behind it, fixes it. It also looks more deliberate.
Do this
Logo on a white rounded tile with a margin of one module all round.
Not this
Logo dropped straight onto the modules so its outline merges with them.
Step 5: shorten the content
Fewer modules means each module is larger and the logo covers fewer of them. A short link at version 3 tolerates a far bigger logo than a long tracking URL at version 8. Dynamic codes are short by nature.
Step 6: test with the worst phone you can find
Your phone is not the test. The oldest phone in the office, in the dimmest corner, at the real distance, is the test. Then run the exported artwork through the scannability tester.
Common mistake
Recolouring the modules to match the logo and pushing contrast down at the same time as adding the logo. Each is fine alone; together they fail.
The alternative: a frame
A frame puts the logo and a call to action outside the code. It costs nothing in error correction, keeps the code small, and is what most professionally designed codes do. Save the in-code logo for when the design really needs it.
Try it in QR Studio
Add a logo in QR Studio and the error-correction level moves to H automatically, a white tile is added, and the scannability check warns if the logo is still too big.
Checklist
- Error correction H
- Logo centred, clear of finder and alignment patterns
- Logo area under 25%, checked with the safe-area tool
- White margin or tile behind the logo
- Content as short as possible
- Tested on an old phone in poor light, then with the scannability tester
Try it yourself
Drag the size slider until the decoder says no. Then step back two notches. That is your maximum.