Go to content
cutty.dev
All posts

QR code on a poster — how to make it scannable from a distance

The QR code on the poster often fails to scan. Learn the rule of size, margin, and contrast, as well as the pre-print test, so that it works even from 5 meters away.

The first poster I made for a commission had a lovely QR code. Small, neat, tucked into the corner like a little button. The client was delighted in the preview. We printed 60 copies and put them up on the stairwells in the apartment block.

A week later, I went to check how it was going. I stood in front of one of them, in the place where a person normally stands reading an announcement. I took out my phone. I aimed. Nothing. I stepped closer, even closer, my nose almost against the paper, and only then—click. Great. No one is going to sniff a poster to buy a ticket.

Then I learned something I should have known earlier: if someone scans your code, it can be calculated before anything goes to print. It's not a lottery. It's a bit of physics and a bit of division.

The edge of the code is approximately one tenth of the distance

Remember this one thing and you basically have 80% of the problem with a QR code on a poster solved. The edge of the code should be about ten times smaller than the distance from which people are meant to scan it.

In practice, it looks like this:

  • flyer in hand, i.e., a scan from the metro → code minimum 10 by 10 mm
  • poster on a wall or in a stairwell, two meters → minimum 20 by 20 mm
  • shop window or notice board, about five meters → minimum 50 by 50 mm
  • banner over a road, ten meters → minimum 100 by 100 mm, i.e., a round 10 cm

And I emphasize: this is the lower limit, not the target value. If you have space, add about 20-30% of buffer. Cheap cameras, poor light at dusk, slight hand tremors—all of this eats into the margin, and you are not in control of it.

The shorter the link, the thicker the grid

A trap sits here, which almost no one notices, because it cannot be seen with the naked eye on the screen.

A QR code does not have a fixed number of dots. It draws as many modules as necessary to accommodate the data. If you push in a long address, the code must draw more and smaller squares within the same field. And small squares are exactly what a phone cannot distinguish from one another from a distance.

See the difference for yourself:

https://twojafirma.pl/lato2026/promocja?utm_source=plakat&utm_medium=qr&utm_campaign=czerwiec
https://cutty.dev/lato

The upper address will generate a dense, tingling matrix, something around 45 modules per side. The lower one will fit in about 25. At an identical size on paper, these 25 squares are almost twice as thick. That is, it catches from twice the distance. For free, just by shortening the link.

Therefore, never throw a raw address with the entire parameter string under a poster. Provide a short, branded link in the style of cutty.dev/lato (you can create it in an instant using cutty), while the parameters and full destination remain on the server side. The code comes out clean and readable, and you still get the click statistics.

The reader is looking for three squares. Help it

The phone, when measuring a code, is actually looking for three corner squares in the background. To find them, it needs two things, and people break both of them all the time.

First of all, contrast. Dark code on a light background. A classic, because it simply works. The reverse (light code on dark) can be temperamental, and color on color can fail to scan even once. If a designer really wants colors, let the dark element serve as modules, and leave white underneath.

Secondly, the margin, professionally known as the silence zone or quiet zone. Around the code, there must be an empty strip at least four modules wide. In plain English: a frame the thickness of one code eye, all around, empty. Posters where the QR touches text or overlaps an image are the ones that fail most often.

Before you call the print shop, take this test

The preview on the monitor lies. It glows, it is perfectly sharp, it will tell you nothing about how it will look from two meters away on matte paper.

Do it differently. Print the code in the target size on a regular sheet of paper. Stick it to the wall. Step back to a distance from which people will actually be scanning. And now try to capture it with three different phones, necessarily including one old or cheap one, not just your flagship. Repeat this in low light, in the evening.

Does it sell out immediately, with a surplus? Only now order your print run.

And once you are with the physical material, two things off the top of my head:

  • Glossy film reflects light and kills the scan at an angle. Go for matte.
  • On a banner, plan the code so that it falls on a flat area. A fold or crease will cut it in half and that's it.

And one more small detail that increases scannability more than you think: a caption under the code. "Scan for menu". "Code for tickets". People are more willing to scan when they know in advance what they will get. An empty square without a caption is passed by indifferently.

A poster you don't have to print a second time

Finally, something that saved me the most nerves (and the client money).

Make the link in the code as a redirect, whose destination can be replaced. Promotion ended? Event moved to another hall? You enter the panel, change the target address, and the same printed QR code on the poster leads somewhere else. Not a single new sheet of paper. If the poster is to hang for longer than a week, it is actually the only sensible way.

A short branded link, a rare code generated from it and a destination that you can swap whenever you want, you can manage in cutty.dev. The rest is just tape and a ladder.