How to Put a Logo in a QR Code Without Breaking It
A logo in the middle of a code is not a trick or a hack. It works because QR codes carry redundant data. The question is how much of that redundancy you can spend before the code stops scanning.
A branded QR code gets scanned more than a plain one. It looks deliberate rather than bolted on, it signals who it belongs to before anyone commits to scanning, and — as covered in QR code safety — it is meaningfully harder for someone to cover with a fraudulent sticker.
It is also the easiest way to produce a code that looks perfect on screen and fails on paper. The difference is entirely in understanding what you are spending when you cover part of the pattern.
Why a logo works at all
QR codes carry redundant data. A portion of every code is error-correction information that lets a scanner rebuild modules it cannot read — the mechanism that keeps a scuffed label or a rain-spotted poster working.
A logo exploits exactly that. The scanner cannot read the modules under your logo, treats them as damage, and reconstructs them. Nothing clever is happening; you are simply consuming the code's damage allowance on purpose.
Which leads directly to the thing most people miss: it is a budget, and you are not the only one spending it. Whatever you give the logo is no longer available for ink spread, scuffing, glare or a coffee ring.
How much of the code can you cover?
You choose the size of the budget when you generate the code. There are four error correction levels:
| Level | Recovers roughly | Suitable for a logo? |
|---|---|---|
| L | 7% | No |
| M | 15% | Only a very small mark |
| Q | 25% | Yes, modest logo |
| H | 30% | Yes — use this |
Use level H whenever you are adding a logo. Then keep the logo itself to roughly 20% of the code's area — noticeably less than the 30% ceiling, because the remainder is your safety margin for the real world.
Twenty percent of the area is smaller than it sounds. It is about a fifth of the width and a fifth of the height of the code — a square roughly one module-block across the middle, not a third of the design.
The parts you must never cover
Error correction protects the data modules. It does not protect the structural ones, because those are what the scanner uses to find the code in the first place.
- The three large corner squares are the finder patterns. A scanner looks for these before anything else. Covering, cropping or heavily restyling one does not degrade the code — it makes it invisible.
- The dotted lines running between the corner squares are the timing patterns, which tell the scanner how wide a module is. Do not place anything over them.
- The blank margin around the whole code is the quiet zone. It is not padding you can trim. Cropping it is the single most common way printed codes get broken.
Everything in the middle is fair game, within your budget. How QR codes work shows where each of these sits if you want to see the anatomy.
Doing it properly
- Generate at error correction level H. Not after the fact — the redundancy has to be built into the code from the start.
- Put the logo dead centre. The centre is furthest from every structural element. An off-centre logo eats into areas that are harder to reconstruct and gains you nothing.
- Give the logo a solid background. A small white or light rectangle behind it, with a little padding, gives the scanner a clean boundary rather than a ragged edge of half-covered modules.
- Keep the logo simple. A monogram, icon or single word survives being small. A full lock-up with a strapline becomes unreadable at this size and wastes budget on detail nobody can see.
- Keep the code dark on light. Scanners expect a dark pattern on a light ground. A dark logo on the light background of the code is safest.
- Print larger than you otherwise would. You have added modules and removed some; give the result more room.
- Test on paper. Not on screen — see below.
Colour and styling, without going too far
Most generators will also let you restyle the modules — rounded dots, gradients, brand colours, custom corner shapes. All of it is legitimate, and all of it eats into readability if pushed.
- Contrast is what actually matters. Scanners distinguish dark from light. A strong dark brand colour on near-white works; mid-tone on mid-tone fails in poor lighting even though it looks fine on a bright monitor.
- Do not invert. Light modules on a dark background work on some scanners and not others. There is no upside worth that.
- Gradients are risky at the light end. If a gradient fades toward the background colour, the modules in that region lose contrast. Keep both ends dark.
- Rounded dots cost a little tolerance. They shrink the effective area of each module slightly. Fine on a poster, less wise on a business card.
- Never stretch the code. It must stay square.
The free generator includes colour and rounded-dot options so you can see the effect immediately, and downloads as SVG so the result stays sharp at print size.
The mistakes that produce a broken code
- A logo that is too big. By far the most common. It scans on a bright monitor at 400px and fails at 2.5cm on matt card.
- Adding the logo in a design tool afterwards. Pasting a logo over a code generated at level L or M covers data there was never redundancy for. The logo must be planned before generation.
- Covering a corner square for the sake of composition.
- Cropping the quiet zone to make the code sit tighter in a layout.
- Low-contrast brand colours chosen from a palette rather than tested.
- Testing only on screen, where backlighting and pixel sharpness hide every one of the above.
Testing a branded code
A logo takes a code closer to its limits, so the testing has to be more thorough than for a plain one:
- Print at final size on the real stock.
- Scan from the distance the reader will actually stand at.
- Try at least three phones, including an older one — a branded code near its limit is exactly the case that works on a new phone and fails on a three-year-old one.
- Test in poor light, and under a spotlight if the surface is glossy.
- Scan the printer's proof, not just your desktop print. Ink spread on the final stock thickens modules and can be what tips a marginal code over.
If it fails, shrink the logo before you touch anything else. That is the variable you introduced, and it is almost always the cause. Why QR codes fail to scan covers the rest.
Qrelux lets you add a logo, set error correction, and restyle the pattern — on dynamic codes you can update the destination without redoing the artwork.
Start a free trialFrequently asked questions
Can you put a logo in the middle of a QR code?
Yes. QR codes carry redundant error-correction data, so a scanner can reconstruct the modules hidden behind a logo. Generate the code at error correction level H and keep the logo to about 20% of the code's area, leaving the rest of the budget for real-world wear.
How big can a logo on a QR code be?
Around 20% of the code's area at error correction level H — roughly a fifth of the width and height, centred. Level H tolerates about 30% total loss, but the remainder needs to stay available for ink spread, scuffing and glare, so filling the whole budget with a logo leaves no margin.
Why did my QR code stop working after I added a logo?
Usually the logo is too large, or it was pasted over a code generated at a low error correction level. Error correction has to be set to H before the code is generated — adding a logo afterwards covers data there was never any redundancy for. Covering one of the three corner squares will also break it outright.
Which parts of a QR code must stay uncovered?
The three large corner squares (finder patterns), the dotted lines running between them (timing patterns), and the blank margin around the whole code (quiet zone). Error correction protects the data modules only — these structural elements are how the scanner locates and reads the grid at all.
Can I use brand colours in a QR code?
Yes, as long as contrast stays high and the pattern stays dark on a light background. A strong dark brand colour on near-white is safe; mid-tone on mid-tone fails in dim lighting even when it looks fine on a monitor. Avoid inverted codes and gradients that fade toward the background colour.