QRWisp
Design7 min read

How to add a logo to a QR code without breaking it

Error correction levels explained, the 25% coverage limit, which parts of the code you must never cover, and how to test before you print.

A logo in the middle of a QR code is not decoration the scanner tolerates by accident. It works because of a deliberate feature — error correction — and it breaks the moment you spend more of that budget than you have.

Why it works at all

QR codes carry redundant recovery data. It exists so a code still reads when it is scratched, smudged, partly torn or badly printed.

A logo is, from the scanner's point of view, damage. A neat rectangular smudge in the middle. If enough of the surrounding pattern survives, the decoder rebuilds what is missing and reads the code perfectly.

The whole trick is staying inside the recovery budget.

The four error correction levels

LevelRecovers up toTypical use
---------
L7%Clean digital display, no logo, maximum data
M15%Default. Screens and good print, no logo
Q25%Industrial labels, small logos
H30%Any code with a logo, harsh environments

Higher levels store more recovery data, which means more modules, which means a denser code at the same physical size. That is the trade: robustness costs density.

With a logo, always use H. The extra density is worth it, and QRWisp switches to H automatically the moment you upload one.

The 25% rule

Level H recovers about 30% of the code. So why cap the logo at 25%?

Because the budget is shared. Whatever the logo does not use is what remains for real-world wear: a scuffed menu, a smudge of grease, uneven ink, a fold in a flyer, glare from a shop light.

Spend all 30% on the logo and the code becomes theoretically valid and practically fragile — it will pass on your monitor and fail on a printed card that has been in someone's wallet for a week.

25% coverage with level H is the sweet spot. Below 20% is safer still, and honestly looks better.

Note that coverage is measured by area, not width. A logo half as wide as the code covers 25% of the area, not 50%. That catches people out in both directions.

What you must never cover

Three parts of a QR code are structural, not data:

  • The three position markers — the big squares in the top-left, top-right and bottom-left corners. The scanner uses these to find the code and work out its rotation. Cover any one and the code is not merely damaged, it is unfindable.
  • The timing patterns — the alternating lines running between the position markers. These set the module grid.
  • The alignment patterns — the smaller squares that help decode a code photographed at an angle.

This is why logos go dead centre. The middle is pure data, which is exactly what error correction knows how to rebuild.

Practical rules for the logo itself

Give it a solid background. A logo with a transparent background sitting directly on the modules confuses the decoder — it cannot tell logo from data. Put it on a solid block matching the code background, with a small margin. Every good generator does this automatically.

Simple shapes beat detailed ones. A monogram or icon survives; a logo with fine text, thin strokes or a gradient turns to mush at 1 cm and steals more area for the same recognisability.

Match the contrast of the code. A pale logo on a white background is invisible. A logo that is nearly the same colour as the modules makes the boundary ambiguous.

Keep the payload short. A logo plus a long URL plus level H is a very dense code. Every character you cut buys robustness back.

Step by step

  1. Encode the shortest version of your content that works.
  2. Upload the logo. Confirm error correction moved to H.
  3. Set the logo size to 20–25%, no more.
  4. Check that the three corner markers are completely clear.
  5. Look at the scannability result before downloading.
  6. Download SVG or PDF for print — vector keeps both the code and the logo crisp.
  7. Print one copy at final size, on the real material, and scan it with an older phone.

Step 7 is the one people skip, and it is the one that catches the failures.

Sometimes the right call is no logo:

  • Very small printed sizes. Below about 2 cm, a logo consumes area the code cannot spare.
  • Payment codes. For PIX, UPI or crypto, reliability beats branding every time. A payment that fails to scan costs more than the branding gains.
  • Long payloads. A full vCard at level H is already dense; adding a logo pushes it over.
  • Absorbent or textured material. Ink spread is already eating your margin.

Branding matters, but a code that does not scan brands you as the company whose QR code did not work.

Test it, do not trust it

QRWisp decodes every generated code back the way a phone camera would, compares the result to what you typed, and measures both contrast and logo coverage. If your logo has gone too far, you get told the exact percentage and what to change — before the download, not after the print run.

Ready to try it? Add your logo in the generator, or test a code you made elsewhere with the QR code tester.

Need a QR code right now?

Free, no signup, no watermark. Every code is tested before you download it.

Open the generator

Keep reading