A menu QR code should be the cheapest, most boring piece of technology in your restaurant: print it once, laminate it, forget it. In practice, plenty of restaurants end up peeling dead codes off their tables because the "free" generator they used quietly attached an expiration date. This guide covers how to make a menu QR code that genuinely never expires, what to link it to so you can still update the menu anytime, and how large to print it.
Why some menu QR codes die, and how to make sure yours can't
A QR code is just data drawn as squares. A static code encodes your menu's web address directly into the pattern. It works for as long as that address works: there is no service behind it, no renewal, and nothing that can expire.
A dynamic code instead encodes a short redirect link owned by the QR provider, which forwards scanners on to your menu. That redirect is a subscription. When the trial ends, the card on file declines, or the provider shuts down, every printed code dies at once. This is the usual story behind a QR code that suddenly stopped working. Many popular generators default to dynamic codes because dynamic codes turn a one-time download into a monthly bill. The full breakdown is in static vs. dynamic QR codes.
PermaQR generates only static codes, entirely in your browser. Nothing is uploaded, no account exists, and nobody, including us, can revoke your code.
What should the code link to?
Point the code at a URL you control and will never change. Three good options, in rough order of preference:
- A menu page on your website (yourrestaurant.com/menu). Best guest experience: loads fast, no pinch-zooming, easy to edit, and the address is yours as long as you keep the domain.
- A PDF hosted on your website at a fixed address like yourrestaurant.com/menu.pdf. When the menu changes, upload the new file over the old one.
- A Google Drive PDF, if you have no website. Set sharing to "anyone with the link" and encode that link, with one important caveat covered below.
If you go the PDF route, design it for phones: single column, large type, and no scanned photo of the paper menu.
The key insight: an editable menu with no subscription
The main pitch for paid dynamic codes is "update your menu without reprinting." A static code pointing at a stable URL gives you exactly the same thing. The printed pattern encodes the address, not the menu itself. Swap the page or the PDF behind that address, and every laminated table tent instantly serves the new menu. New prices, seasonal specials, an 86'd dish: no reprinting, no monthly fee.
The Google Drive caveat: never delete the old PDF and upload a replacement, because the new file gets a new link and your printed codes break. Instead, right-click the file, open "File information," then "Manage versions," and upload the new menu as a version of the same file. The share link stays identical and the code keeps working.
How big to print it
The reliable rule of thumb: a QR code should be at least one tenth of the distance it will be scanned from. Arm's length across a table needs a small code; a storefront window needs a much bigger one.
| Placement | Typical scan distance | Minimum QR size |
|---|---|---|
| Table tent or table sticker | 30–40 cm (arm's length) | 3–4 cm (about 1.5 in) |
| Counter or register card | About 50 cm | 5 cm (2 in) |
| Wall poster | 1–2 m | 10–20 cm (4–8 in) |
| Storefront window | 2–3 m | 20–30 cm (8–12 in) |
Those sizes are for the pattern itself, not the whole card. Always leave a white margin (the "quiet zone") around the code of roughly four of its smallest squares on every side.
Print and lamination specs that actually matter
- Download vector. Export the code as SVG from the generator so it stays sharp at any size; if you use PNG, size it for 300 DPI at final print dimensions.
- Dark on light, high contrast. Black on white is the safest choice. Avoid inverted light-on-dark codes; some phone cameras refuse to read them.
- Matte lamination, not gloss. Overhead restaurant lighting glares off glossy laminate and can blind the camera at a typical seated angle. Matte or soft-touch scans reliably.
- Label it. Add a short line like "Scan for menu." A bare, unexplained square makes guests hesitate; a labeled one tells them exactly what they get.
- Test before the full run. Scan from a seated position, in evening lighting, on at least one iPhone and one Android.
When a paid dynamic service is genuinely worth it
In fairness, dynamic QR services earn their fee in a few situations:
- Turnkey scan analytics. A provider dashboard shows scan counts, times of day, and per-location numbers with no setup. A static code collects nothing on its own. You can approximate scan counts for free by encoding a tagged address such as yourrestaurant.com/menu?src=qr and checking your own website analytics, but the ready-made reporting is real convenience.
- Destinations you don't control. If the code must point to a third-party URL that could change, such as an ordering platform or a delivery-app page, a redirect you manage is real insurance.
- Large multi-location print runs. A chain managing signage across dozens of sites may find centralized redirect control worth paying for.
For a single restaurant sending guests to its own menu, none of that applies. The trap is what happens later: stop paying a dynamic provider and every laminated tent, sticker, and window decal dies at once. At that point the monthly fee is not buying features; it is keeping your existing prints alive.
The whole setup, start to finish
Put your menu at a stable URL. Paste that URL into the free generator, download the SVG, print at the sizes above, laminate matte. While you're at it, add a Wi-Fi QR code to the same table tent, since the menu and the Wi-Fi password are the first two things every guest asks for. Total recurring cost: zero, permanently.