QR code menu generator for restaurants: stable URLs and scan tracking
QR menus went from temporary pandemic measure to permanent fixture between 2020 and 2023, and the operators who treated them as a printable PDF on a Google Drive link learned the hard way that a QR menu is a small product, not a static asset.
Stable URL, not a PDF link
Encode a URL that points to a page you control on your domain, for example https://terrazon.com/menu. Do not encode a Google Drive link, a Dropbox share, or a Notion page on a free plan.
The reason is mundane: the QR is printed on a laminated card or etched into a wood stand. The URL inside it is frozen for the next two years. If the underlying file moves, expires, or hits a free tier limit, every printed code in the restaurant is dead until you re-print. A page on your domain stays put. You update the menu HTML on the page, the QR keeps working forever.
A real HTML menu also wins on speed (no 3MB PDF download on a 4G corner), accessibility (screen readers parse it), and SEO (Google indexes the page, the PDF probably not).
Tracking scans with UTM parameters
If you want to know how many people scan, append UTM parameters to the URL inside the QR. Google Analytics, Plausible, Fathom and Umami all read them.
Use the source to identify the QR location, the medium to identify the format, and the campaign to identify the menu version. A working tagged URL:
https://terrazon.com/menu?utm_source=qr&utm_medium=table_tent&utm_campaign=menu_2026
If you have multiple table positions or terraces with different codes, vary the source per code. utm_source=qr_terrace, utm_source=qr_indoor, and after a month you know which area of the restaurant is busiest by raw scan count, not by guesswork from the floor staff.
Accessibility and the print itself
Two thirds of QR scan failures in restaurants are accessibility failures, not technical ones. The code is too small, too dim, or hidden behind a candle.
Concrete rules. Print the QR at minimum 30mm square on a table tent, 50mm on a wall poster. Add a "Tap here for menu" line below the code in a 14 point readable font, the line tells older guests what the code is for. High contrast, black on white or near white, not a tinted illustration. Place it where a phone can rest on the table to scan, not on a vertical menu holder that requires holding the phone steady at arm's length.
Always offer a paper menu on request. The QR menu is a default, not a replacement. Visually impaired guests, older guests, guests with a dead phone battery exist.
Avoiding the dynamic QR trap
Some QR services sell "dynamic QR codes" where the code points to their domain and they redirect to your page. Useful in theory, you can change the destination without reprinting. The catch: if you stop paying or the service shuts down, every printed code in the restaurant goes dead immediately.
Self-host the destination on your own domain, even if it means re-printing once a year. Static QR encodes a URL you own, dynamic QR rents a redirect. For a restaurant fixture, ownership wins.
Working example
text# Sample tagged URL to encode inside the QR
https://terrazon.com/menu?utm_source=qr&utm_medium=table_tent&utm_campaign=menu_2026
# Same URL with location-specific source for multi-zone tracking
https://terrazon.com/menu?utm_source=qr_terrace&utm_medium=table_tent&utm_campaign=menu_2026
https://terrazon.com/menu?utm_source=qr_indoor&utm_medium=table_tent&utm_campaign=menu_2026
# Print spec
QR size on table tent : 30mm x 30mm minimum
QR size on wall poster: 50mm x 50mm minimum
Quiet zone : 3mm white border, mandatory
Error correction : M (15 percent) for indoor laminated card
Caption below code : "Tap to view our menu" in 14pt Just need the result?
Type the URL with UTM parameters into the QR code generator on aldeacode.com, pick error correction M, export at print resolution, and the QR holds up on table tents and wall posters for years without going through any third party redirect.
Open QR Code Generator →Frequently asked questions
Should the QR open a PDF or an HTML page?
HTML page on your domain. PDFs are slow to download on weak Wi-Fi, fail on screen readers, and reflow badly on phone screens. An HTML menu loads in under a second and reads at any zoom level.
Do I need a separate QR per table?
Only if you want per table tracking, otherwise no. Most restaurants use one QR per zone. Use UTM source like 'qr_terrace_t05' if you want table number granularity, but the operational overhead rarely pays off.
How often should I regenerate the QR?
Only when the underlying URL changes. The code is forever as long as the URL it encodes still resolves. Update the menu HTML weekly if you want, the printed code does not care.