Back to Blog

QR Code Menus for Restaurants: Setup Guide

QR code menus did not leave with the pandemic, they got better. This is the complete setup guide for restaurant and cafe owners: build a menu code you can edit after printing, place it where guests scan, and finally see which dishes earn their spot.

Karan Bhakuni
Karan Bhakuni
Founder, Flyn
GuideJun 25, 202612 min readUpdated Jun 25, 2026
QR Code Menus for Restaurants: Setup Guide

Why QR Menus Stuck Around After COVID

Everyone assumed QR code menus were a pandemic stopgap that would vanish the moment dining rooms reopened. They did not. Walk into most cafes and casual restaurants in 2026 and the little code on the table is still there, because once owners ran the numbers, the QR menu turned out to be cheaper, faster, and more flexible than reprinting laminated cards every season.

The reason is simple. A printed menu freezes your prices, your dishes, and your typos in place until the next print run. A digital menu behind a QR code changes the second you change a web page. You raise the price of the burger at 9am, and by lunch every guest is looking at the new number with no reprint, no reorder, no waiting on a designer.

What changed since 2020

Three things made QR menus permanent rather than temporary:

  • Native camera scanning. Since iOS 11 and Android 9, every phone camera reads a QR code with no app to install. The friction that killed early QR adoption is gone.
  • Guest habit. Diners now expect to scan. A 2cm code with a clear "Scan for menu" prompt gets 60 to 80 percent of covers to scan, far higher than almost any other QR placement.
  • Owner economics. No reprint costs, instant updates, and (if you do it right) actual data on what guests look at.

The catch is that most restaurants set theirs up the lazy way: a free generator, a link to a PDF, a code that can never change and never tells you anything. The rest of this guide is about doing it the way that actually pays off.

How to Make a Menu QR You Can Update Without Reprinting

The whole point of a dynamic menu is that the printed code never changes while the menu behind it changes constantly. Here is the exact setup, start to finish, so you only ever print once.

Step by step

  1. Put your menu online as a mobile-friendly web page, a hosted PDF, or a page on your site. A real web page beats a PDF: it loads faster on phones and lets you update one dish without re-exporting a document.
  2. Shorten the menu URL into a branded short link, for example flyn.to/yourcafe-menu. You can create a free Flyn account and do this in under a minute, or grab one straight from the homepage shortener.
  3. Generate the QR code for that short link with the free QR Code Generator. Because it encodes a short link, the pattern stays simple and scans cleanly even when printed small.
  4. Audit the destination before anything goes to print: run it through the QR Destination Audit to confirm it loads on mobile, uses HTTPS, and does not 404.
  5. Print once, update forever. When the menu changes, you edit where the short link points, not the printed code. The table tents on the floor never need touching.
Flow diagram showing a single menu destination URL being edited once in a dashboard, with arrows pointing out to already-printed table tents, a window decal, and a receipt that all update to the new menu instantly without reprinting
Edit the destination once and every printed table tent, window decal, and receipt code follows. The paper never changes, the menu always does.

Running a daily special the smart way

This is where dynamic codes earn their keep in a kitchen. Each morning, re-point your flyn.to/yourcafe-special link at today's soup, the new tasting menu, or the cocktail you are pushing. The same code on the table shows a different page every day. If you ever need separate destinations by time of day (brunch before noon, dinner after), the same redirect layer that powers an expiring link or a link rotator handles it.

Where to Place the Code (Table Tents, Windows, Receipts)

Design gets all the attention, but placement decides your scan rate. A guest who is seated, hungry, and already holding a phone is the easiest scan you will ever get. A code stuck on a wall behind the host stand is the hardest. Put the code where the moment of need lives.

Diagram of a restaurant interior marking four high-converting QR placements: a table tent at the seat, a window or door decal at the entrance, the printed receipt, and a counter or register sign, each annotated with its job
The four placements that consistently convert: table tent at the seat, window or door at the entrance, the receipt, and the counter. Each does a different job.

The placements that work

  • Table tent or table sticker. Your primary placement. At the seat, eye-level, with a one-line prompt like "Scan for the full menu." This is where 60 to 80 percent of your scans come from.
  • Window or door decal. Captures passersby before they walk in. Point this at a menu plus your hours, or a waitlist or pickup page after close.
  • Receipt footer. The perfect spot for a reorder link or a Google review QR code, since the guest just finished a (hopefully great) meal.
  • Counter or register sign. For counter-service and cafes, the code by the till handles order-ahead and loyalty signups.

Here is the trick most owners miss: use a different short link per placement, even if they all point at the same menu today. flyn.to/cafe-table, flyn.to/cafe-window, flyn.to/cafe-receipt. Now your dashboard tells you the table tents drive 90 percent of scans and the window decal almost none, which is information you can act on. Same menu, four codes, four data streams.

Pro tip

Print the code at least 2cm by 2cm (see the QR code size guide for larger surfaces) for arm's-length scanning, and leave a clear "quiet zone" of empty white space around it equal to about four modules (the little squares). Crowding the code with your logo or a border is the number one reason a table tent refuses to scan on older phones. If a code is misbehaving, our guide to why QR codes do not scan walks the fixes in order.

Tracking Which Items and Specials Get Scanned

This is the upgrade no static PDF code can give you. A plain URL code is invisible after printing: you have no idea whether ten guests scanned it or a thousand. Point each code at a tracked short link instead and every scan becomes a logged event, so you can finally manage the menu with data instead of hunches.

What every scan tells you

  • Count and time. Bucket scans by hour and day. A lunch spike at noon confirms the obvious; a surprise 4pm cluster might be a happy-hour opportunity you are missing.
  • Device and browser (Pro). Mostly iOS and Android from the native camera, which confirms your menu page must be mobile-first.
  • Approximate location (Pro). City-level, useful the moment you run more than one location.

Measuring specials and individual sections

Give your specials board, your wine list, and your dessert menu each its own short link and code. Now you can see, in numbers, that the dessert QR on the table gets scanned a third as often as the main menu, or that nobody opens the wine list, which is a merchandising problem you can actually fix. The deeper per-scan breakdowns (geo, device, referrer) live on Pro analytics, and the full method is covered in how to track clicks on a link.

The restaurants that get value from QR menus are not the ones with the prettiest codes. They are the ones that gave every placement its own link, then actually read the numbers before reprinting anything.

None of this requires extra hardware or a POS integration. It is the redirect doing what it already does on every tracked QR campaign, applied to a menu.

Running QR Menus Across Multiple Locations

One cafe is easy. A group of five is where dynamic codes go from convenient to essential, because every menu change you make by hand is now five chances to get it wrong.

One dashboard, every location

Create one short link per location (flyn.to/downtown-menu, flyn.to/airport-menu) so each site can run its own prices, specials, and hours. Then update them all from one place. When you roll out a chain-wide price change, you edit the destinations centrally instead of dispatching new table tents to every store.

Per-location data without guesswork

Because each location has its own link, your scan data is already segmented by site. You can see which location scans most, which one's guests check the menu before walking in, and which new branch is slow to build the habit. Tag each link with the location name so the dashboard filters cleanly, the same operational hygiene we recommend for any print-to-digital program at scale.

Note

Producing codes for dozens of tables across many locations by hand gets painful fast. Past roughly 50 codes, generate them in bulk with a CSV import or the API so every link shares consistent naming and tagging, then drop the results into your print workflow. The pattern is in the API docs.

Accessibility: Don't Lock Anyone Out of the Menu

A QR menu that only works for some guests is a problem, not a feature. Older diners, anyone without a smartphone, and guests with low vision can all be quietly excluded if the QR is your only path to the food. The fix is cheap and it also protects you when someone's phone is dead.

Always keep a fallback

  • Offer a printed menu on request. A small stack at the host stand covers dead phones, data-shy guests, and anyone who simply prefers paper. In several regions this is also a legal accessibility requirement.
  • Make the digital menu screen-reader friendly. Real HTML text, not a flat image or a scanned PDF, so a guest using VoiceOver or TalkBack can actually read it. This is the biggest accessibility win and it costs nothing.
  • Size text for readability and keep strong color contrast on the menu page itself, not just the code.
  • Print the short URL under the code (for example "or visit flyn.to/menu") so a guest can type it if scanning fails. A branded short link is short enough to actually type, which a long PDF URL never is.

Why a web page beats a PDF for accessibility

PDFs are images of text as far as many phones are concerned: they pinch-zoom badly, fight screen readers, and load slowly on a weak signal. A responsive web page reflows to the screen, reads aloud properly, and updates without a re-export. If you must use a PDF, at least confirm it loads and is legible on mobile by checking it through the QR Destination Audit before printing.

Common QR Menu Mistakes (and How to Avoid Them)

Most failed QR menus fail for the same handful of reasons, and every one is avoidable in the setup stage. Here is the list, in rough order of how often it sinks a restaurant's code.

Checklist of five menu QR mistakes to avoid with the fix for each: code too small, never test-scanned, links to a PDF, no printed fallback URL, and a static code you cannot update
The five menu QR mistakes we see most often, and the one-line fix for each.

The mistakes that actually matter

  • A broken or dead destination. The menu PDF moved, the page 404s, the link expired. With a static code that is a reprint; with a dynamic one you just re-point it. Either way, audit before you print and re-check quarterly with the QR Destination Audit.
  • Printing the code too small. Under 2cm it gets unreliable on older cameras and at low light, which describes most dinner service. Default to 2cm or larger.
  • No fallback. No printed menu, no typed URL under the code. One dead phone and the guest is stuck.
  • A desktop-only or slow page. If the menu loads in 6 seconds on 4G or needs pinch-zooming, guests bounce. Mobile-first, fast, real text.
  • One code everywhere. Same link on every table, the window, and the receipt means you can never tell which placement works. One link per placement.
  • A static code on a menu that changes. The original sin. Prices and specials change; a static code cannot. Go dynamic.

This is the through-line of every reliable QR program: a static, raw-URL code traps you, while a dynamic code on a short link stays simple, stays editable, and stays measurable.

A real, scannable QR code rendered in brand green on a white card with a clear quiet zone, encoding the address https://www.flyn.to
A real, scannable code (try it) encoding https://www.flyn.to. This is what a clean, low-density dynamic code looks like: simple pattern, generous quiet zone, scans from a distance.

Before the print run

Verify what each code points to. To read a printed code back to its destination, run it through the QR Code Reader; to confirm that destination is healthy on mobile, use the QR Destination Audit. Five minutes of checking on your desk beats discovering a dead link on a thousand table tents.

Get Your Trackable Menu QR Live (Free)

You can build the whole thing for free. Create a Flyn account, shorten your menu URL into a branded link, and generate its code in the QR Code Generator. Print it once, update the menu behind it forever, and watch the scans roll into your dashboard.

The five-minute checklist

  1. Put your menu on a fast, mobile-friendly page.
  2. Shorten it (one link per placement, one per location).
  3. Generate the code and add a clear "Scan for menu" prompt plus the typed URL.
  4. Audit the destination with the QR Destination Audit.
  5. Print, place at the seat, and read your scan data weekly.

For the wider playbook on placement and offline-to-digital attribution, see the QR codes marketing strategy guide and dynamic QR codes for print and digital. When you are ready to read every scan in detail, the breakdowns live on Pro analytics, and the rest of the free kit is at our tools page.

Frequently Asked Questions

Are QR code menus still worth it now that the pandemic is over?
Yes, for reasons that have nothing to do with contact-free dining. A QR menu lets you change prices, dishes, and specials instantly without reprinting, which saves real money over a year of menu churn. Done with a tracked short link, it also tells you how many guests scan, when, and from which placement, so you can manage the menu with data. Restaurant menu codes also enjoy the highest scan rates of any QR placement (roughly 60 to 80 percent of covers) because scanning is the direct path to the food. Just keep a printed menu available for guests who need one.
What is the difference between a static and a dynamic QR menu?
A static QR code encodes your menu URL directly into the dots, so once printed it can never change: move or rename the menu page and the code is dead. A dynamic QR code encodes a short link (like flyn.to/menu) that redirects to your menu, so you can swap the destination from your dashboard at any time and the printed code keeps working. Dynamic codes also record every scan (time, device, location) because the redirect logs each hit. For a menu, which changes constantly and is printed in volume, dynamic is the only sensible choice. Flyn generates dynamic codes for every short link at no cost.
Can I change my menu without reprinting the QR codes on the tables?
Yes, if your code is dynamic (the kind Flyn makes by default). The printed code points at your short link, not at the menu page directly, so you edit where that link goes in your dashboard and every table tent instantly shows the new menu. Raise a price at 9am and every guest sees it by lunch, with no reprint. This is the main reason to never use a static PDF code for a menu: a static code bakes the menu address into the dots permanently, so any change forces a full reprint of every table tent, window decal, and receipt.
Where should I place the QR code in my restaurant?
Your highest-converting placement is a table tent or sticker at the seat, eye-level, with a short prompt like "Scan for the full menu," because the guest is already seated and holding a phone. Add a window or door decal to catch passersby, a code on the receipt for reorders and review requests, and a counter sign for counter-service spots. The key tactic: give each placement its own short link even if they all point at the same menu, so your dashboard shows which spots actually drive scans. Print each code at least 2cm wide with a clear quiet zone around it.
How do I see which menus or specials guests are scanning?
Point each code at a unique tracked short link rather than directly at the menu URL. Every scan is then logged with a timestamp, device type, and approximate location. Give your main menu, specials board, wine list, and dessert menu each their own link and code, and your dashboard shows how often each is scanned. That tells you, in real numbers, whether the wine list is being ignored or the dessert QR is pulling its weight, which is information no static PDF code can ever give you. The detailed per-scan breakdowns (geo, device, referrer) are available on Flyn's Pro analytics.
Do guests need a special app to scan my menu QR code?
No. Every modern smartphone (iOS 11 and later, Android 9 and later) scans QR codes natively through the built-in camera, with no separate app to download. The guest opens the camera, points it at the code, and taps the notification that appears. This frictionless scanning is exactly why restaurant menu codes get such high scan rates. To cover the rare exceptions (a dead phone, an older device, or a guest who prefers paper) keep a few printed menus on hand and print the short URL under the code so it can be typed in manually if needed.
Should my QR menu link to a PDF or a web page?
A mobile-friendly web page is better than a PDF in almost every case. PDFs load slowly on weak signals, pinch-zoom badly on phones, and are treated as images by screen readers, which hurts accessibility. A responsive web page reflows to the screen, reads aloud properly for low-vision guests, and lets you update a single dish without re-exporting a whole document. Whichever you choose, point your QR at a Flyn short link rather than the file directly, so you can swap a PDF for a web page later (or fix a broken file) without reprinting. Test the destination on mobile with the QR Destination Audit before printing.
How do QR menus work for restaurants with multiple locations?
Create one short link per location (for example flyn.to/downtown-menu and flyn.to/airport-menu) so each site runs its own prices, hours, and specials while you manage them all from a single dashboard. A chain-wide change becomes a few edits in one place instead of new table tents shipped to every store. Because each location has its own link, your scan data is already segmented by site, so you can see which location scans most and which new branch is slow to adopt. For dozens of codes across many tables, generate them in bulk via CSV or the API to keep naming and tagging consistent.

Ready to try Flyn?

Free plan includes 25 links/month, full analytics, and access to all 30+ free tools above. No credit card required.

Already a member? Log in

Karan Bhakuni
Karan Bhakuni· Founder, Flyn

Karan Bhakuni is the founder of Flyn. He writes about branded links, click analytics, and the link-management tooling growth teams and creators actually need, drawn from building Flyn and reading a lot of user feedback.