← Blog · Restaurants · 5 min read
QR code for a restaurant menu: what actually works
Most menu QR codes fail for boring reasons — printed too small, laminated until they glare, or pointing at a link that expired when a subscription lapsed. Here is how to avoid all three.
Point it at a page, not a PDF
A PDF opens as a document. On a phone that means pinching and dragging to read a starter. Point the code at a web page instead — your own site, a Google Doc published to the web, even a simple page your host provides. If a PDF is genuinely all you have, at least make it portrait and single-column.
Whatever you link to, load it on a phone first, over mobile data rather than your own WiFi. A menu that takes eight seconds on a slow connection is a menu nobody reads.
Static codes do not expire. Many "free" ones do.
There are two kinds of QR code. A static code contains the link itself — the pattern of squares literally spells out your address. A dynamic code contains a short link owned by whoever generated it, which then redirects to you.
Dynamic codes are useful if you need to change the destination after printing, and they let the provider count scans. The catch is that the redirect belongs to someone else. If that service shuts down, changes its pricing, or you stop paying, every printed code stops working — and you find out from a customer holding a menu that leads nowhere.
Our generator only makes static codes. That is a deliberate limitation: nothing to expire, no account, no monthly fee, and no third party between your customer and your menu.
Size it for the distance
A common rule of thumb is simple: the code should be roughly one tenth of the distance it is scanned from. A table tent read at 30 cm needs about 3 cm of code. A poster by the door read from two metres needs 20 cm.
Round up. Phone cameras vary enormously, older phones focus slowly, and restaurant lighting is usually dimmer than the room you designed in. A code that is slightly too big costs nothing; one that is slightly too small costs you a customer squinting at a table.
Leave the white border alone
The blank margin around a QR code is not decoration. Scanners use it to find where the symbol begins, and the specification asks for at least four modules — four of the small squares — on every side.
Nobody notices this one at the print shop: on paper the code looks perfect. A designer crops it flush to a coloured background, or nests it inside a border, and phones start failing to read it. If you take one thing from this page, take this: do not crop the white edge.
Colour, contrast and lamination
Dark code on a light background, always. Never the reverse — scanners look for dark modules on a light field, and a reader that only checks that polarity will not find a light-on-dark code at all.
Coloured codes work if the contrast is real. Deep navy or forest green on white is fine. Pastel on cream is not, whatever it looks like on a bright monitor. If you are unsure, print it and look at it in the room it will live in.
On lamination: gloss reflects overhead lights straight back into the camera, and a customer ends up tilting the card around trying to find an angle. Matte laminate costs the same and does not do this.
Where the code goes on the table
Table tents work because they stand up and face the diner. A code flat on the table gets scanned at an angle, in the shadow of whoever is leaning over it. If you must go flat, put it on the placemat near the edge rather than in the centre.
Add a line of text saying what it is. "Our menu" beats an unlabelled square — people are wary of scanning codes without knowing where they lead, and rightly so.
Printing a set of them
If every table gets the same menu link, you need one code printed many times, and any print shop can do that from a single SVG file.
If the codes differ per table — table numbers for ordering, or different links per section — put them in a spreadsheet and generate them together. Our bulk generator takes a CSV and returns a ZIP, and its print-sheet mode lays them out on A4 at a size you choose in millimetres, with cut marks. That last part matters: it is the step where codes usually get scaled down by accident in a word processor.
Test it like a customer
Not on your phone, at your desk, under a good lamp. Print it, put it on an actual table, and try it with the oldest phone in the building, in evening light, from where a person would actually sit. Then hand it to someone who has never seen it and watch what they do.
A code that has only ever been tried on a laptop screen has not really been tested.
A static code never expires: it points straight at your own menu link.
Make a menu QR code →