Free tier, no card requiredDynamic QR codes that update after printGDPR-compliant scan analyticsBuilt for agencies, freelancers & in-house teamsFree tier, no card requiredDynamic QR codes that update after printGDPR-compliant scan analyticsBuilt for agencies, freelancers & in-house teamsFree tier, no card requiredDynamic QR codes that update after printGDPR-compliant scan analyticsBuilt for agencies, freelancers & in-house teamsFree tier, no card requiredDynamic QR codes that update after printGDPR-compliant scan analyticsBuilt for agencies, freelancers & in-house teams
All posts
A QR code with a brand logo in its centre next to a row of brand-colour swatches, all scanning successfully.
Guide

How to put a logo in a QR code without breaking it: error correction, colour, and coverage

Can you put a logo in a QR code? Yes, within limits. What the “30%” myth really means, how much a logo can safely cover, the parts you must never touch, and how to keep brand colours without killing the scan. A spec-accurate guide for agencies.

ScanKit

ScanKit · Organization

· 16 min read

Your client's brand team has one rule: the logo goes on everything. Then they hand you a QR code for the new poster campaign and ask you to drop the logo in the middle, match the brand blue, and have it at the printer by Friday. The code has to scan from across a room, in a dimly lit bar, on a four-year-old Android phone that has never seen an update.

Here is the reassuring part. You can put a logo in a QR code, and a well-made branded code scans just as reliably as a plain one. The catch is that almost every guide online repeats the same number, "a logo can cover up to 30%", and gets it wrong. That single misunderstanding is why so many branded codes look perfect on screen and then fail on the printed poster.

This guide explains what actually lets a logo sit inside a QR code, how much you can really cover, the parts you must never touch, and how to keep brand colours without killing the scan. The figures come from the QR standard itself, ISO/IEC 18004, and from Denso Wave, the company that invented the format. Where something is a practical rule of thumb rather than a hard specification, we say so.

Why a logo does not break a QR code

A QR code is not a photograph that has to be pixel-perfect. It is data with a built-in repair kit. Every code carries spare information, calculated with a method called Reed-Solomon error correction, that lets a scanner rebuild parts of the code it cannot read. A scratch, a coffee ring, a crease in the flyer, or a logo sitting on top of some modules all look like the same thing to the decoder: missing data it can reconstruct, up to a limit.

That limit is fixed the moment the code is generated, by choosing one of four error-correction levels.

The four error-correction levels

There are exactly four, and they are written into the standard. In increasing order of strength:

  • Level L (Low): can rebuild about 7% of the code's data.
  • Level M (Medium): about 15%.
  • Level Q (Quartile): about 25%.
  • Level H (High): about 30%.

Now the nuance that nearly every other article skips. ISO/IEC 18004 defines these percentages as the share of the code's codewords that can be restored, not the share of the picture you are allowed to cover. A codeword is an eight-bit block of the encoded data. Level H means the maths can rebuild up to roughly 30% of those data blocks, which is not the same statement as "you can black out 30% of the image". That slip from data to picture is the root of the most common branding mistake, and we will come back to it in a moment.

The practical instruction is simple: for any code that carries a logo, always generate at Level H. It gives you the largest repair budget, and you are going to need most of that budget for the real world, not the logo.

How much of the code can a logo actually cover?

There is no maximum logo size anywhere in the QR standard. None. ISO/IEC 18004 describes error-correction capacity and says nothing about embedding logos, because logos are not a feature of the format at all. A logo works only because covering a few modules looks, to the scanner, like damage it can repair.

So where does the famous "up to 30%" come from? It is Level H's 30%-of-data figure, quietly rewritten as "30% of the image". Treating that as a target is wrong twice over: it confuses data with picture area, and it spends your entire repair budget on the logo, leaving nothing for the conditions the code will actually meet.

Picture the repair budget as a single shared pot. A centred logo draws from it. So does glare on a glossy poster, a smudge of ink, a slight misregistration on the press, fading after months in a shop window, and the noise from a cheap phone camera in poor light. Whatever the logo takes, the environment cannot have. Spend part of the pot on the logo and keep the rest in reserve.

In practice that means holding a logo to roughly 15% to 25% of the code's area, centred, and no larger. Many designers aim for about 20% and stop there. This is a rule of thumb rather than a specification, but it is a well-founded one, because it leaves real headroom for damage. There is also a quieter, more technical reason to stay conservative. Reed-Solomon works block by block, not across the whole code at once. A large logo concentrated in the centre can exhaust the correction capacity of the specific blocks it sits on, even when the overall percentage still looks safe. Smaller and centred beats large and ambitious every time.

The parts you must never cover

Error correction protects the data. It does not protect the parts of the code that the scanner uses to find and read it in the first place. Cover one of those and no error-correction level on earth will help, because the decoder cannot even lock onto the code to begin the repair.

A QR code with numbered regions: the finder patterns, alignment pattern and timing patterns marked off-limits, the quiet-zone margin, and the safe centre where a logo can go.
Where a logo can and cannot go on a QR code: the finder patterns, alignment pattern, timing patterns and quiet zone are off-limits; only the centre is safe for a logo.

Here is what each numbered region in the diagram is, and why it is off limits:

  1. Finder patterns, the three large squares in the corners. They let a scanner detect the code, its size, and its rotation from any angle. They are the first thing the decoder looks for, so covering even one corner makes the scan fail instantly.
  2. Alignment patterns, the smaller squares present on all but the tiniest codes. They correct for distortion, so the code still reads when it is on a curved bottle, a folded flyer, or photographed at an angle.
  3. Timing patterns, the dotted lines running between the finder patterns. They tell the decoder how many modules the code has and where the grid sits.
  4. Quiet zone, the clear margin all the way around. The standard requires a blank border of at least four modules on every side. Without it, scanners read the surrounding text or artwork as part of the code and give up.
  5. The centre, the only safe home for a logo. The middle carries ordinary data, which is exactly what error correction can rebuild, so this is where the logo goes and nowhere else.

The rule that falls out of this is short: keep the logo centred and small, give it a clean pad of white so it does not bleed into the modules around it, and never let any artwork, background image, or drop shadow touch the three corners, the alignment squares, the timing lines, or the margin.

Brand colours without killing the scan

Colour is where brand guidelines and scannability collide most often. A QR code is read by reflectance: the scanner needs dark modules that absorb light, sitting on a light background that reflects it. The standard is explicit that a dark module is a binary one and a light module is a binary zero, and that the whole format is built around dark images on a light background.

That gives you one firm rule and one softer one.

The firm rule: the foreground must be clearly darker than the background, with a wide gap in brightness between them. A dark brand colour on white is safe. Deep navy, bottle green, or a near-black brand colour all work. What fails is low contrast, such as a pale or neon foreground, two mid-tones that sit close together in brightness, a gradient that fades the modules into the background, or a busy photograph placed behind the code.

The softer rule is the often-quoted "4:1 contrast ratio". It is worth knowing that this number is not in the QR standard. It is borrowed from web-accessibility guidelines (WCAG), which are about the legibility of text, and then retrofitted onto QR codes as a design heuristic. It is a reasonable minimum to aim for, but treat it as a rule of thumb, not a spec. The formal way a printer grades a code's contrast is ISO/IEC 15415, which measures symbol contrast, the reflectance gap between the lightest and darkest module, and modulation, how consistent that gap stays across the whole code. Gradients, show-through from the back of thin paper, and uneven ink all drag those grades down. The practical takeaway is the same either way: the bigger and cleaner the gap between dark and light, the more abuse the code survives.

Can you invert it, light logo on a dark code?

Reversing the colours, light modules on a dark background, is tempting for dark-themed designs. The standard technically allows it and calls it reflectance reversal. Real scanners are another matter. ZXing, the open-source engine behind a large share of Android and older scanning apps, does not look for inverted codes by default. Its maintainer has said plainly that inverted codes are not part of the required spec and should not be used, and that scanning for them by default would waste half of every scan's processing time on a rare case. Newer phone cameras often cope, but a meaningful tail of older readers will not. For anything going to print, where you cannot choose which phone scans it, keep dark modules on a light background. If the layout demands a dark look, set the code itself on its own small light panel inside the design.

The hidden culprit: a long URL

Here is the failure that catches agencies out most, because it has nothing to do with the logo at all. The more data you encode, the more modules the code needs. QR codes come in versions from 1, at 21 by 21 modules, up to 40, at 177 by 177, growing by four modules a side at each step. A short link encodes into a low version with large, chunky modules. A long, parameter-stuffed campaign URL forces a high version: hundreds of tiny modules crammed into the same printed square.

Two things then go wrong at once. The modules shrink, so they are harder for a camera to resolve, especially at a distance or in poor light. And a denser code has less slack to give away, so the same centred logo now covers a larger share of the data, and a larger share of your repair budget. The logo did not change. The URL made it fatal.

This is the strongest practical reason to route branded codes through a short, dynamic link. A dynamic QR code encodes a tiny redirect address, something like scankit.app/r/ab12cd, no matter how long or messy the real destination and its tracking parameters are. The printed code stays a low version with big, robust modules that tolerate both a logo and the real world. As a bonus, because the destination lives in the redirect rather than in the printed code, you can fix a typo or repoint the whole campaign after it has gone to press. We weigh that trade-off in full in dynamic versus static QR codes, and the after-print fix in changing a code's destination without reprinting. It also means that if a printed sticker is ever tampered with or covered, you are not helpless, which is part of the wider picture in QR code security for agencies.

Exporting and printing a branded code

A branded code can pass every on-screen test and still fail on paper if it is exported or printed carelessly.

Export vector, not raster. Hand the printer an SVG or EPS file rather than a PNG or JPG. Vector keeps every module edge perfectly sharp at any size and at the printer's full resolution, which is exactly what protects contrast and modulation. A raster export risks soft, anti-aliased edges and compression speckle once it is blown up to poster size, and soft edges are harder for a scanner to read cleanly. If you genuinely must supply a raster file, follow Denso Wave's rule that each module should be at least four printed dots across, and remember that bigger modules are more stable.

Pad the logo. Give the centred logo its own small knockout of white so it sits in a clean patch rather than merging into the dark modules around it. That keeps the module grid unambiguous right up to the edge of the logo.

Mind the size and the surroundings. Physical size against scanning distance is a subject of its own, and we cover the numbers in how big a QR code should be. The short version for a branded code: bigger modules read from further away, and the quiet zone has to survive the layout, so do not let a designer crop into the margin to make room for a caption.

Test it before it goes to print

On-screen previews flatter you. A code that scans from your monitor, a hand's width from a webcam in office light, tells you almost nothing about a code on a poster three metres away under a shop's halogen spots. Before any branded code is signed off, put it through a real test:

  1. Print a proof at final size, on the actual stock if you can. Office laser or inkjet is fine for a first pass; the point is to get off the screen.
  2. Scan it with several phones, and make sure at least one is an older Android. New iPhones forgive a lot that older readers will not.
  3. Test in real light, including dim and uneven lighting, and from the distance people will actually stand at.
  4. Add the real-world layer: scan it under the laminate, through the window film, or behind the menu sleeve it will live in, because gloss and glare change everything.
  5. Confirm the destination, not just that it scans. With a dynamic code you can scan, check the redirect resolves to the right page, and still change the target later if the URL is wrong.

If it passes all five, it is ready. If it fails, shrink the logo, raise the contrast, shorten the URL, or enlarge the code, in that order, and test again. For codes that will live in public for months, it is also worth a periodic re-scan, which is one more reason to keep an eye on which scan metrics matter so you notice quickly if a placement stops performing.

Frequently asked questions

How much of a QR code can a logo cover?

There is no official maximum, but keep a logo to roughly 15% to 25% of the code's area, centred. The widely quoted "30%" is a misreading of Level H error correction, which can rebuild about 30% of the code's data, not 30% of the image. You need most of that repair budget for glare, smudges, and printing wear, so leave headroom and aim for around 20%.

Always use Level H (High). It provides the largest error-correction reserve, about 30% of the code's data, which is what lets the code survive both the logo and real-world damage. For a branded code, never drop below Level Q.

What are the QR code error-correction levels?

There are four, defined in ISO/IEC 18004. Level L can rebuild about 7% of the code's data, M about 15%, Q about 25%, and H about 30%. The figure is the share of the encoded data the code can restore through Reed-Solomon error correction, not the share of the image you are allowed to obscure.

Can I put my logo over the corners of the code?

No. The three large squares in the corners are finder patterns, which the scanner uses to locate and orient the code. They are not data and are not protected by error correction, so covering even one will stop the code scanning. A logo belongs in the centre only.

Usually one of three reasons: the logo is too large and has eaten the error-correction budget, it is overlapping a finder or timing pattern, or the underlying URL is so long that the code is too dense to lose any modules. Shrink and centre the logo, keep it well clear of the structural patterns, and shorten the URL, where a dynamic short link helps most.

Can a QR code use my brand colours?

Yes, as long as the foreground stays clearly darker than the background. Dark brand colours on a light background scan well. Avoid pale or neon foregrounds, two similar mid-tones, gradients that fade the modules out, and busy photo backgrounds. The wider the brightness gap between the modules and the background, the more reliable the scan.

Do inverted, light-on-dark, QR codes scan?

Sometimes, but not reliably. The standard permits reflectance reversal, but many scanners, including the widely used ZXing engine on older Android devices, do not detect inverted codes by default. For print, keep dark modules on a light background. If you need a dark design, place the code on its own light panel.

Does a longer URL really make a QR code harder to scan?

Yes. More data means a higher-version code with more, smaller modules in the same space, which is harder to scan and leaves less room for a logo. Encoding a short redirect link instead keeps the code low-density and robust, and it lets you change the destination later without reprinting.

What file format should a branded QR code be for print?

Vector, an SVG or EPS, for anything printed, so the module edges stay razor-sharp at any size. Use PNG only for screens, and if you must print from a raster file, make sure each module is at least four dots across.

Can I change a branded code's destination after it is printed?

Only if it is a dynamic code. A dynamic code encodes a redirect, so you can repoint it at any time without touching the print. A static code bakes the destination in, so a wrong URL, or a logo that fails testing after the run, means a reprint.

The short version

Branding a QR code is not risky; doing it on guesswork is. Generate at error-correction Level H, keep the logo centred and under about 20% of the area, and never let artwork touch the three corners, the timing lines, or the four-module margin. Keep the foreground darker than the background and skip the inverted look for anything printed. Above all, encode a short, dynamic link rather than a long campaign URL, so the code stays low-density, tolerant, and fixable after it is printed. Then prove it: print a proof at final size and scan it on a few phones, including an old one, in the light it will really live in. Do that, and you can give the brand team their logo in the code and still trust it to scan on Friday's poster. If you want codes that stay this robust by default, the simplest move is to make them dynamic from the start.

Share

Keep reading