Skip to content
UseQR
ESC

Jump to

MOVEOPEN50 places

Spec & internals

How logos work without breaking a QR code

A logo works by deleting data modules and letting Reed–Solomon error correction reconstruct them as erasures. At level H the code survives about 30% codeword damage; keeping logo area under about 20% leaves margin for print damage. Centre placement matters because the corners hold unprotected finder patterns.

View as MarkdownPaste this page into any AI assistant. It is plain, portable Markdown.

The trick: controlled damage

A logo does not sit "on top of" a QR code in any cooperative sense. It destroys the modules underneath it, and the code survives for exactly one reason: Reed–Solomon error correction was designed to reconstruct missing codewords. A QR code with a logo is a deliberately damaged code that still carries enough redundancy to decode.

This has a clarifying consequence: there is no special "logo support" in the QR standard. Any code with enough error correction tolerates a logo; any logo big enough defeats any level of error correction.

The budget maths

Each error-correction level sets the damage budget: roughly 7% (L), 15% (M), 25% (Q), 30% (H) of codewords. A logo spends from that budget by area, cover a fifth of the data region and you have consumed about a fifth of the codewords.

But the logo must not spend the whole budget, because print imperfections, glare, dirt and camera noise draw from the same account. The working rule:

EC H budget            ~30%
minus real-world margin ~10%
= safe logo coverage    ~20% of code area

At level M the same subtraction leaves only ~8%, which is why serious logo work starts at Q or H. The full coverage-by-level table is on maximum safe logo coverage.

Note the units: these are area percentages. Generators usually specify logo size as a fraction of the code's side, and area is that fraction squared, a logo spanning 30% of the side covers only 9% of the area. UseQR's renderer clamps the logo side to at most 35% of the code (≈12% of area) and, unless you set a level yourself, silently raises error correction to H whenever a logo is present, the two defaults that keep casual logo codes inside the budget.

Why the centre, specifically

Error correction protects data and EC codewords only. It does not protect:

The centre of the symbol is the region furthest from all of these. It contains only data modules (plus, in mid-size versions, an alignment pattern, which decoders tolerate losing far better than a finder). A corner logo of identical size is dramatically more destructive than a centre logo, which is why every credible generator centres by default.

A clean knockout (clearing the modules and giving the logo a solid background with a module of padding) also beats translucent overlays. Fully removed modules are unambiguous erasures; a logo showing through half-dimmed modules creates wrong reads, and errors cost Reed–Solomon twice as much correction capacity as erasures.

Trust arithmetic, then verify anyway

Coverage maths assumes ideal conditions. Anti-aliasing at the logo edge, low-contrast logo colours and dense payloads all shift the real threshold, so the only guarantee is decoding the rendered result: /validate renders your exact code and reads it back with a real decoder, and the design-side guidance covers the aesthetic half. For the workflow start-to-finish, see how to make a QR code with a logo.

FAQ

Why does a QR code still work with a logo covering the middle?

Reed–Solomon error correction stores redundant codewords that can reconstruct missing data. A centred logo destroys a known, contiguous patch of data modules, which the decoder treats as erasures and rebuilds, provided the covered area stays inside the error-correction budget.

How big can a logo be in a QR code?

About 20% of the code's area at error correction H, which corresponds to a logo spanning roughly 45% of the code's width. At level M the safe area drops to about 8%. Always leave margin below the theoretical maximum for print damage.

Where should a logo go in a QR code?

Dead centre. The corners contain finder patterns and format information, which error correction cannot repair; the centre contains only data modules. A corner logo of the same size can make a code unscannable while a centred one scans fine.

Should the logo be transparent or have a background?

Give it a solid background with a little padding. Cleanly removed modules are erasures, which Reed–Solomon corrects at twice the rate of errors; artwork showing through partially visible modules produces wrong reads and burns correction capacity twice as fast.

Try it: free, no signup