QR code with a logo: how to add one that still scans after printing
A logo in the middle of a QR code is the most requested customisation and the most common reason a printed code stops working. The logo covers real data. Whether the code survives that depends on four settings, all of which you control, and one of which most generators get wrong by default.
You can put a logo in the middle of a QR code, and it will scan reliably if you do four things: set error correction to H, keep the logo under about 20% of the code's area, keep it in the centre and away from the three large corner squares, and print it from SVG at least 15% larger than you would a plain code. Skip any of those and the code will scan on your monitor and fail on the printed flyer.
Why a logo can cover part of a QR code at all
A QR code is not read square by square like text. The data is spread across the grid with a mathematical error-correction scheme (Reed–Solomon, the same family used on CDs) that adds redundant squares. A scanner that finds some squares unreadable, because they are scratched, smudged, or covered by a logo, uses the redundancy to reconstruct them. How much it can reconstruct depends on the error-correction level chosen when the code was generated:
| Level | Can recover | Suitable for |
|---|---|---|
| L | about 7% of the code | Screens only, no logo |
| M | about 15% | Plain printed codes, the sensible default |
| Q | about 25% | Codes that will get dirty or worn |
| H | about 30% | Any code with a logo |
A logo is deliberate damage. The recovery budget has to cover the logo and whatever the real world does to the print afterwards. That is why the logo must stay well under 30%, and why anything below H is a gamble.
The four rules
1. Error correction H, always
Not M, not Q. At M, a logo covering 15% of the code uses the entire recovery budget, and the first fingerprint on the menu takes the code past what the decoder can rebuild. Many generators default to M or L and let you add a logo without changing it; the code then works in the preview and fails in the wild. The SteadQR generator locks the level to H the moment a logo is added, and will not let it be lowered while the logo is in place.
2. Keep the logo under 20% of the area
H recovers 30%, but you want at least a third of that held back for print wear, dirt and a slightly blurred photo. A logo at 20% of the area leaves 10% in reserve. For a square code that means the logo's width should be no more than about 45% of the code's width (0.45 squared is 20%). Round logos can go a little wider because they cover less area at the corners.
3. Centre it, and stay off the finder patterns
The three large squares in the corners are the finder patterns. They are how the phone locates the code and works out its orientation, and they are not protected by error correction. Cover any part of one and the phone will not even find the code, let alone decode it. The small square near the bottom-right corner (on larger codes, several of them) is an alignment pattern and matters almost as much. The centre of the code is the safest place for a logo because it is furthest from all of them.
4. Give the logo a solid background
A logo dropped straight onto the squares with a transparent background produces a mess of partial modules around its edge that the decoder reads as noise. Put the logo on a solid white (or background-colour) shape with a little padding, so the boundary between "logo" and "code" is a clean edge. Most good generators do this automatically.
How to make one, step by step
- Open the free generator and enter the link, WiFi network or contact card.
- Choose Add centre logo and upload a PNG or SVG with a transparent or white background. Error correction switches to H on its own.
- Keep the logo at the default size. Larger is tempting; larger is how codes fail.
- Leave the colours high-contrast: dark modules, light background. See design choices below.
- Download the SVG for print and the PNG for screens.
- Print one at final size and test it before the real run.
Design choices that do and do not break scanning
- Colour: fine, as long as the modules are clearly darker than the background. Dark navy, dark green or charcoal on white or cream all scan. Contrast matters more than hue.
- Inverted (light modules on a dark background): risky. Some phone decoders handle it, some do not. If the brand needs a dark background, put the code on a white tile.
- Rounded or dot-shaped modules: fine at a moderate radius. Fully circular dots with gaps between them reduce the effective contrast and hurt at small sizes.
- Gradients: usually fine on screen, unreliable in print, because the light end of the gradient drops below the contrast the decoder needs.
- Restyled finder patterns (rounded corners, brand colours): usually fine if they stay solid and high-contrast. Replacing them with a logo or a pattern breaks scanning outright.
- A frame with "Scan me" text: helpful, and it does not affect scanning as long as it stays outside the four-module quiet zone.
The size penalty
Level H adds redundant squares, so the same content needs a larger grid: a 30-character URL that fits in 29 × 29 at level M needs 33 × 33 at H. Each square must stay about 0.5 mm in print, so the code has to be printed roughly 15% wider to be as reliable as the plain version. A 2 cm plain code becomes a 2.3 cm code with a logo. Minimum QR code size for print has the full table.
If space is tight, shorten what is in the code. A short link instead of a full URL saves more grid than the logo costs.
Test the print, not the screen
Every logo code scans on a monitor. The monitor is backlit, flat, and shows the code larger than it will be printed, and the logo has not yet been smeared by a thumb. Print one copy at final size, scan it from arm's length in ordinary indoor light with an older phone, then scan it again with a corner partly covered. If it survives both, the logo is small enough. If it does not, shrink the logo first, then increase the print size. Why is my QR code not working? has the full checklist if it still fails.
Logos and dynamic codes
The logo lives in the image and the destination lives in the squares, so the two are independent: a dynamic code can carry a logo exactly like a static one. It usually carries it better, because a dynamic code encodes a short redirect link (18 characters or so) rather than a full URL, which means a smaller grid, bigger squares, and more room for the logo before anything gets tight. The logo stays the same when the destination is changed, so a branded code printed on packaging can be retargeted for years without touching the artwork.
Make a QR code with your logo, free. The generator runs in your browser, forces error correction H when a logo is present, and exports SVG for print. Nothing you upload leaves your device.
Open the free generatorAll guides · Free QR code generator · Dynamic codes waitlist