Product
QR menus that survive a price change and a laminator
Table QR codes fail for three reasons: printed too small, encoded with a PDF URL, or laminated over a link that expires. How to build one that lasts a year.
By Wasim Idrishi · Updated · 4 min read
Walk into ten restaurants with QR menus and three of the codes will not scan on the first try. The reasons are always the same three, they are all decided before printing, and none of them is about the menu.
Failure one: the code is too small
The working ratio is ten to one. Readable scanning distance divided by ten gives the minimum width of the symbol.
A diner holds a phone about 30 cm from a table card, so the code needs to be about 3 cm across. Most table cards we have measured carry a code between 1.5 and 2 cm, because the designer wanted room for the logo. That code scans on a desk in good light and fails at a candlelit table with a phone two years old.
Then there is the quiet zone: four modules of blank space on every side, required by ISO/IEC 18004. It gets cropped constantly, usually by a bleed or a border added at the last minute.
Failure two: it encodes the menu, not a link you own
A QR containing https://restaurant.example.com/menus/autumn-2026.pdf is a photograph of one file path. Change the
menu, change the file, and 60 laminated table cards point at nothing.
Encode https://gc.mw/eat instead. The card is permanent; the destination is a field you edit from a phone in the
kitchen. New prices at 4pm, live at 4:01, no reprint.
Failure three: it points at a PDF
A PDF on a phone opens slowly, renders at the wrong zoom, and needs two hands to read. Diners give up and ask for a paper menu, which defeats the exercise.
Point at a web page that reflows. If today all you have is a PDF, point the QR at a short link that currently opens the PDF, then build the page later and swap the destination. Nothing on the table changes.
A worked example
A 40-cover restaurant put gc.mw/eat on table cards, gc.mw/win on the window vinyl, gc.mw/bag on takeaway bag
stickers, and gc.mw/box on the insert that goes into delivery orders. All four point at the same menu page.
Four codes, four numbers, and the numbers told a story nobody expected.
The window code out-scanned the table cards on weekday afternoons, which meant people were reading the menu from outside before deciding whether to come in. The restaurant moved the vinyl to eye height and added the price range next to it, and walk-ins on those afternoons rose.
The delivery insert code kept collecting scans days after each order, because the insert lives on a fridge. That is repeat-order intent, invisible to the delivery platform's own dashboard, and it justified continuing to print inserts that the owner had been about to cut.
Scans are counted separately from clicks, the QR encodes the link with a ?qr marker, so none of this blurred
into the Instagram bio traffic pointing at the same page.
Practical details for the print run
Use the SVG, not the PNG. gc.mw/eat.svg is vector, so the printer can size it to the card without softening the
module edges, and gc.mw/eat.svg?fg=1a1a2e&bg=ffffff sets brand colours in the URL.
Keep the contrast strong and dark-on-light. Inverted codes, light modules on a dark card, fail on a significant number of older phone cameras, and a restaurant table is exactly where old phones show up.
Print the URL under the code. gc.mw/eat is nine characters, and our alphabet drops 0, O, I and l so nobody
mistypes it. Some guests will not scan, and that line recovers them for the cost of one line of type.
Test the paper proof at the table, in the evening light, on the oldest phone in the building.
Build the code
QR Code Generator
Open the full toolFor a link you already own, the .svg endpoint is the print asset and there is nothing else to generate. The tool
above also does the static codes a restaurant needs elsewhere, the guest Wi-Fi code for the wall, which renders
entirely in your browser so the password is never uploaded anywhere.
The QR code product page covers logos and error correction, and branded links covers editing a destination after the laminating is done.
Questions people ask
How big should a table QR code be?
About 3 cm across for a code scanned at arm's length, which is roughly 30 cm. Ten to one is the working ratio. Add four modules of blank quiet zone on every side, and do not put it inside a fold, a menu holder lip, or under the glass of a table top where reflections kill it.
Should the QR point straight at a PDF?
No. A PDF opens slowly on a phone, pinches badly and cannot be read one-handed. Point at a web page. If a PDF is all you have today, point the QR at a short link that currently opens the PDF, so you can swap in a real page later without reprinting anything.
Can I change the menu without reprinting the code?
That is the entire point of encoding a short link rather than the menu URL. Edit the destination and every table card follows within about a second. Prices, specials and a whole seasonal menu change without touching the laminate.
Do I need a different code for each table?
Only if you want per-table data, which most restaurants do not. What is worth splitting is placement: the table card, the window, the takeaway bag and the delivery insert should each have their own code, because those are four different customers.
Sources
- ISO/IEC 18004:2024, QR Code bar code symbology specification · checked 5 September 2026