QR Codes

QR Codes for Restaurant Menus: Print Size, Design, and Mistakes to Avoid

July 4, 2026 ยท 9 min read

A QR code for a restaurant menu needs to do one thing perfectly: open the menu on the first try, for a hungry person holding a phone at arm's length in whatever lighting your dining room happens to have. Most of the codes taped to tables fail at exactly that. They are printed too small, they sit under a glossy laminate that throws glare across the pattern, or they point to a link that broke three menu updates ago.

The good news is that none of this is guesswork. There is a reliable rule for how big to print it (roughly the scan distance divided by ten), a clear reason to leave a white margin around it, and a real trade-off between a static code you never touch again and a dynamic one you can re-point without reprinting a single table tent. Get those three decisions right and your scan rate takes care of itself.

This guide is the print-and-design version specifically for menus, cafes, and table service โ€” sizes for a table tent versus a menu you hold, the lamination choice nobody warns you about, exactly where on the table the code should live, and the handful of mistakes that lose scans without ever showing an error. If you just want to make one, you can make a QR code for your menu in a couple of minutes; this explains how to make it actually work in the room.

How big should a menu QR code be?

The single most common reason a menu code fails is that it was printed too small for how far away people scan it. There is a dependable rule of thumb: the minimum width of the code is about the scan distance divided by ten. A code someone holds 30 cm from their face needs to be roughly 3 cm wide. A table-tent code that sits in the middle of the table and gets scanned from 40 to 60 cm away wants to be closer to 4 to 6 cm.

That ratio assumes a clean print, a decent phone camera, and reasonable light. Restaurants rarely have all three, so round up rather than down. Dim ambient lighting, a candle on the table, a glossy laminate, a curved surface, or a long URL packed into the code all push you toward the larger end. As an absolute floor, do not print any handheld code smaller than about 2 cm (0.8 inch) no matter what the formula says โ€” below that, older phones and cracked screens start to struggle.

For print resolution, export the code at a size that gives you at least 300 DPI at your chosen physical dimension. Our generator exports PNG up to 4000 px as well as a true SVG vector, and for anything printed the SVG is the safer choice: it stays razor-sharp at any size, so a designer can drop it into a laminated menu or a large table tent without the pattern turning fuzzy.

Where it livesTypical scan distanceMinimum code sizeComfortable size
Printed menu you hold25-30 cm3 cm3-4 cm
Table tent / table sticker40-60 cm4 cm5-6 cm
Wall poster by the entrance1-1.5 m10-15 cm15 cm
Window decal (scanned from footpath)1.5-2 m15-20 cm20 cm+
A-frame sidewalk board2-3 m20-30 cm30 cm

The quiet zone: the white margin that is part of the code

Every QR code needs an empty margin around it, called the quiet zone. It is not decorative whitespace a designer can trim to make the layout tighter โ€” it is part of the specification. Scanners use that clear border to find where the code begins and ends. Crop it away and many phones simply never lock on, especially in a busy print layout where the code sits next to text, a logo, or a photo of a dish.

The rule is to leave at least four modules of clear space on all sides, where a module is one of the little squares in the pattern. In practice, tell whoever lays out your menu to keep a clean margin roughly equal to the width of one of the three corner squares all the way around the code, and to put nothing in it โ€” no border line, no wine-glass illustration, no fold in the card. On a table tent, make sure the code is not so close to the edge or the fold that part of the margin curls away from the camera.

Contrast and color: keep it dark-on-light

Scanners read the difference between dark modules and a light background. That contrast is the whole mechanism, and restaurant branding is where it quietly breaks. A code in your brand's warm taupe on a cream menu looks tasteful and scans terribly, because the two tones are too close for the camera to separate reliably in candlelight.

You can absolutely brand a menu code, within limits. Keep genuinely dark modules on a genuinely light background โ€” the equivalent of near-black on near-white. Avoid inverting it (light modules on a dark background) unless you have specifically tested that combination on several phones, because many scanners assume dark-on-light and give up on the reverse. If you want your logo in the middle, keep it small โ€” around 20 to 30 percent of the code's area at most โ€” leave the three corner squares completely untouched, and raise the error correction to level H so the covered modules can still be reconstructed.

  • Dark modules on a light background โ€” treat it as near-black on near-white
  • Do not invert the colors unless you have tested that exact code on 2-3 phones
  • Center logo no larger than ~20-30% of the area, corners always intact
  • Add a logo? Use error-correction level H so the covered modules still read
  • Skip subtle gradients and low-contrast brand tints on the pattern itself

Matte vs glossy: the lamination trap

This is the design decision almost nobody warns restaurants about, and it wrecks otherwise perfect codes. A menu laminated with a glossy finish, or a table tent in a shiny acrylic holder, acts like a mirror. Overhead spotlights, a window, or the diner's own phone flashlight reflect straight off the surface and wash out part of the pattern. The code looks flawless flat on your desk and fails the moment it is on a table under a downlight.

Choose a matte or satin laminate for anything carrying a QR code. Matte scatters light instead of bouncing it back as a hot spot, so the code stays readable from more angles and under harsher lighting. If your menus are already glossy and you cannot change that, at least make the code larger than the formula suggests and position it away from the most reflective part of the sheet. The same logic applies to acrylic table-tent holders โ€” a frosted or matte holder beats a mirror-clear one every time.

It is worth testing this in the actual room, not just at your desk. Put the finished, laminated code on a real table under your real lights and scan it from a seated position. Glare problems only appear at the angle a diner actually holds their phone.

Where on the table the code should go

Placement decides whether people even notice the code, let alone scan it. The best spot is a standing table tent in the center of the table, angled so it faces seated diners rather than lying flat where it catches ceiling glare and forces an awkward top-down scan. A tent that a person can pick up and tilt toward their phone will always outperform a sticker glued flat to the tabletop.

If you use a flat sticker, put it toward the near edge of the table where a seated guest can lean in comfortably, not dead center where the far side of the table is out of easy reach. Avoid the classic mistakes: a code under the glass tabletop (the glass adds reflection and a focus problem), a code on the underside of anything, or a code so low on a menu that the diner's own hand covers the quiet zone while holding it.

Give the code a reason to be scanned. A tiny line of text โ€” "Scan for our full menu and specials" โ€” converts far better than a bare square, because it tells the guest what they get and that it is worth the two seconds. In table service, a single well-placed tent per table beats scattering codes on every printed surface.

Static or dynamic: change the menu without reprinting

This is the decision that saves restaurants the most money, and it is genuinely a trade-off rather than a clear winner. A static code bakes the menu link permanently into the pattern. It is free, it works forever, and it never depends on anyone's server staying up. The catch: if your menu URL ever changes, every printed code is dead and you reprint the lot.

A dynamic code encodes a short redirect you control, so you can re-point it any time โ€” swap in a seasonal menu, a lunch versus dinner page, a holiday special โ€” without touching a single printed tent. You also get scan counts, which tell you how many people actually use it. The honest catch is that a dynamic code depends on that redirect continuing to work; if the service behind it goes away, the printed codes go dead too.

For a menu the practical answer is usually dynamic, and here is the reasoning: menus change. Prices move, dishes rotate, you run a Friday special. Reprinting and re-laminating table tents every time is exactly the cost QR menus were supposed to eliminate. Point a dynamic code at a stable menu page and update the destination as the menu evolves. If you would rather keep it free and never touch a server, a static code pointing at a permanent URL on your own domain (where you update the page content, not the address) gets you most of the same benefit.

Static codeDynamic code
Change destination laterNo โ€” reprint requiredYes โ€” update anytime
CostFree, no accountFree account, hosted redirect
Scan countsNoYes
Works if service is downAlwaysDepends on the redirect
Best menu fitMenu URL that never changesSeasonal / frequently updated menus

The mistakes that quietly lose scans

Menu-code failures are boringly predictable, and almost all of them are invisible until a guest is sitting there getting nothing. The worst offender is the dead link: a static code pointing at a menu page that was moved or deleted, or a free trial redirect that lapsed. Confirm the destination is stable and, if it is dynamic, that whatever powers the redirect is one you will keep.

The rest of the list repeats across thousands of restaurants: printed too small for a table-tent distance, low-contrast brand colors, a cropped quiet zone, glossy lamination glare, and a menu page that is not built for phones so the guest lands on a slow, pinch-to-zoom PDF. Always give people a fallback โ€” print a short, typeable URL right under the code so a failed scan still ends at the menu. And test the finished, laminated, table-placed code with two or three different phones in your actual lighting before you print a hundred of them.

  • Dead or lapsed link โ€” verify the destination is stable before printing
  • Too small โ€” table tents need 4-6 cm, not the 3 cm of a handheld menu
  • Glossy laminate glare โ€” switch to matte or satin
  • Cropped quiet zone โ€” keep clear white margin on all four sides
  • No mobile-friendly menu behind it โ€” avoid a slow zoom-in PDF
  • No fallback โ€” print a short typeable URL beside the code

Frequently Asked Questions

For a menu people hold about 25 to 30 cm from their face, print the code at least 3 cm wide, ideally 3 to 4 cm. A table-tent code that sits in the middle of the table and gets scanned from 40 to 60 cm away should be larger, around 4 to 6 cm. The general rule is minimum width equals scan distance divided by ten, and you should round up for dim light, glossy surfaces, or a long URL.

For most restaurants a dynamic code is the better fit because menus change often โ€” prices, seasonal dishes, daily specials โ€” and a dynamic code lets you re-point the same printed tent to an updated page without reprinting. You also get scan counts. If you prefer to stay fully free and never rely on a server, use a static code pointing at a permanent URL on your own domain and simply update the page content behind that fixed address.

The usual causes are printing it too small for the table-tent distance, low-contrast brand colors instead of dark-on-light, a cropped quiet-zone margin, or glare from a glossy laminate reflecting overhead lights. A dead or moved menu link is another silent killer. Fix the contrast and margin, print at 4 to 6 cm for a table tent, switch to a matte laminate, and confirm the destination URL still works.

Glossy lamination is a real problem because it reflects overhead lights and phone flashlights straight back at the camera, washing out part of the pattern from the angle a seated diner scans. Choose a matte or satin finish, which scatters light instead of creating a hot spot. If the menu must be glossy, print the code larger than usual and keep it away from the most reflective part of the sheet, then test it under your actual dining-room lights.

A standing table tent in the center of the table, angled toward seated guests, works best โ€” it can be picked up and tilted toward a phone and avoids the top-down glare of a flat sticker. If you use a flat sticker, place it near the edge where a seated guest can lean in, not dead center. Avoid putting it under a glass tabletop or anywhere the diner's hand covers the white margin while holding it.

No. Every phone shipped in roughly the last seven years scans a QR code straight from the built-in camera app on both iPhone and Android โ€” the customer just points the camera and taps the link that pops up. That native support is exactly why menu codes became practical. Still, print a short typeable URL beside the code as a fallback for the rare older phone or a scan that fails in poor light.

If each table needs its own code โ€” for table-specific ordering or per-table analytics โ€” generating them individually is slow and error-prone. Use a bulk generator that takes a spreadsheet of URLs or table numbers and returns a labelled set of codes in one pass. Keep the same design and error-correction settings across the whole batch so every table's code behaves identically when printed.

Related Tools