← All guides

Guide

Styling a QR Code Without Breaking It

A QR code will tolerate a surprising amount of decoration and then fail suddenly, usually on paper rather than on the screen you designed it on. This explains exactly how much damage the format is built to survive, how much of that you can safely spend on a logo, and the two things that are not negotiable.

Error correction is a repair budget, not a decoration budget

QR codes carry redundant data so a damaged code still reads. There are four levels, and the strongest — level H — lets roughly 30% of the code be destroyed and still decode.

That number gets quoted as though it were an allowance for design. It is not. It exists so the code survives a crease down the middle of a leaflet, a thumb across the corner of a business card, ink spread on cheap paper, and a camera held at an angle in bad light. Every one of those eats the same budget.

Spend all 30% on a logo and the code decodes perfectly in the preview and fails in the world, which is the worst possible failure mode because you only find out after ten thousand have been printed.

18% of the area, which is 42% of the width

A defensible split is to spend about six tenths of the budget on decoration and keep the rest for physical damage. At level H that gives a logo covering up to 18% of the code's area.

Here is the part that surprises people: 18% of the area is about 42% of the width. Area grows with the square of the side, so a logo that looks like it covers less than half the code across is already at the limit. Designers reason in width and the format reasons in area, and that mismatch is why logos routinely end up far too big.

Adding a logo should also force the code to level H. A logo on a level L code, which tolerates 7% damage, is not a small risk — it is a code that has already spent more than its entire budget.

The three corner squares are not decoration

Every QR code has three large squares, one in each corner except bottom-right. A scanner finds them before it reads anything, and it finds them by looking along a line for a specific run of dark and light: 1 : 1 : 3 : 1 : 1.

That ratio holds whichever direction the line crosses the pattern, which is how a phone works out the code's position, orientation and scale from a photo taken at an angle. It is the thing that makes QR codes readable from a crooked snapshot rather than a careful scan.

So the corner squares can be recoloured, and they can be rounded a little, because a slightly rounded square still produces that run. What they cannot become is a ring, a circle with a gap, or any shape that changes the proportions along that line. A generator that lets you turn them into flowers is letting you build a code that a scanner will not recognise as a code.

Common questions

How big can the logo on a QR code be?

About 18% of the code's area at error-correction level H, which is roughly 42% of its width. Area grows with the square of the side, so a logo covering under half the width is already at the limit. Anything larger eats the margin the code needs to survive creases and bad printing.

QR code generator
Can I change the shape of the three corner squares?

Colour and mild rounding, yes. Rings, gaps or freeform shapes, no. Scanners locate a code by looking for a 1 : 1 : 3 : 1 : 1 run of dark and light across those patterns, and a shape that breaks the ratio stops the code being found at all.

What size should I print a QR code?

Work from the modules, not the code. Each module wants to be about 0.4 mm at minimum, so multiply by how many modules across your code is. More encoded data means more modules and therefore a physically larger code for the same readability.

Why does my contact-card code fail when my website code works?

Because it holds far more data, so it has many more modules. At the same printed size each module is much smaller — often below the readable floor. Shorten the card, or print it larger.

Should I use a dynamic QR code?

Only with your eyes open. It is not a QR feature; it is a short link to somebody's redirect server encoded in a normal static code. If that service disappears, every printed code dies with it. Pointing a static code at a domain you own gives you the same ability to change the destination.

Tools in this guide

Share
WhatsAppXin