keepp.

A QR Code Menu That's an Actual Order Page, Not a PDF

Scan, browse, filter by dietary tag, order — no app, no account, no reprinting every time a price changes. What a real QR code menu needs for restaurants, cafes, and food trucks, and why a PDF behind a QR code isn't the same thing.

By Keepp Team

Scanning a QR code on the table to see the menu isn’t a novelty anymore — it’s the default someone reaches for before they’ve even looked for a paper one. The bar for what that scan needs to do is simple: open instantly, load fast on whatever phone and signal strength someone has, and never ask for an app or an account along the way.

A lot of “QR code menus” don’t clear that bar. They’re a QR code pointing at a PDF, or a photo of a printed menu, which technically works but reads like a workaround — small text, no way to narrow down what’s actually vegan or gluten-free, and stale the moment a price changes and nobody reprints it. This post covers what a QR menu needs to actually be a menu, not a link to a picture of one.

A menu is a page, not a document

The mechanical difference between “QR code that opens a PDF” and “QR code that opens a real menu” is what’s on the other end of the scan. A PDF is a flat image — no tap targets, no filtering, nothing that updates without a re-export and a reprint. A menu block is the opposite: each dish is its own item with a name, a photo, a description, and a price, laid out as a real, tappable menu on the page — current the moment you edit it, not the moment you remember to reprint it.

Setting it up

  • Add each dish or drink as a menu item — name, photo if you have one, a short description, and the price.
  • Give items the tags that actually help someone decide — dietary ones like “vegan,” “gluten-free,” or “nut-free,” a meal-time split like “breakfast” or “dinner,” or spice level, or whatever distinction matters for your specific menu. More on how filtering works below.
  • If you’re also taking orders directly on the page rather than just displaying what you have, add the items you sell online as product cards or a product block with real checkout — the menu block itself is built for browsing and filtering, not payment. Taking food orders online covers the checkout side: a for-sale card that sends someone to wherever you already take payment, a product block that charges through your own connected Stripe account, or a form if you’d rather confirm orders yourself before charging anyone.

Filter by tag — dietary, meal time, or anything else

This is the part a printed menu can’t do at all: tap a tag and the menu narrows to just what matches. Every menu item can carry a set of tags, and the page renders them as a row of filter chips above the list — one chip per distinct tag used anywhere on the menu, plus an “All” chip to reset. Tap “vegan” and only vegan items show. Tap “vegan” and “gluten-free” together and the menu narrows to items that carry both — chips stack, they don’t replace each other.

What the tags mean is entirely up to you — there’s no fixed list to pick from. Dietary categories are the obvious use (“vegan,” “vegetarian,” “gluten-free,” “dairy-free,” “nut-free”), but the same mechanic works for a breakfast/lunch/dinner split, a spice-level scale (“mild,” “medium,” “hot”), or a house distinction like “chef’s pick” or “new.” Type whatever word actually helps a diner decide, on whichever items it applies to.

A diner with a dietary restriction gets exactly what they need in one tap instead of scanning every description for “contains dairy” — the single most common reason someone hesitates over a printed menu in the first place.

The QR code goes straight to the menu, not the homepage

Every block on a Keepp page — including the menu — has its own real link and its own QR code, one tap away in that block’s Share button. A code on a table tent can point straight at the live menu itself, not your page’s top, so scanning it never makes someone hunt for the right section first. Every block on your page has its own shareable link and QR code covers how that works across products, forms, and bookings too — a menu is just one use of the same mechanic.

Because it’s a real, stable URL rather than a temporary session link, the same QR code keeps working on a printed table tent for as long as the menu block exists — no regenerating a code every time something changes underneath it.

The link itself is smarter than a generic URL, too. Paste it into a text or a group chat and the preview that unfurls carries the menu’s own title and photo — not your homepage’s — so “here’s the menu” actually shows the menu before anyone taps it.

Updating prices and sold-out items without reprinting anything

The entire point of moving off a printed menu is that “the menu changed” stops being a print job. Ran out of the special? Edit the item — swap the name to “SOLD OUT” or remove it — and the change is live everywhere the QR code points, immediately. Seasonal price change? Update the number on the item, not a hundred laminated sheets. How small food businesses take orders online covers handling sold-out items and swapping in the next batch without leaving a stale listing up.

If updating items mid-shift isn’t practical, the AI agent interface lets you say “mark the salmon sold out” instead of opening an editor with your hands covered in flour.

Table tents, stickers, and the counter — one code per placement, not one for everything

Because every block gets its own QR code, different physical spots can point at different things instead of all funneling through one generic page link:

  • A table tent pointing straight at the full menu.
  • A counter sticker pointing at a specific limited-time item or a seasonal drop.
  • A receipt or to-go bag pointing at a bestseller you’ve also set up as its own product card for direct ordering — that card gets its own separate link and QR code, distinct from the full menu, for an easy repeat order next time.
  • A sign at a food truck’s window pointing at the day’s location and hours if you move around — see showing your location and hours for the map block that handles that.

What this replaces

Printed menus cost real money to keep current — reprinting every time a price or a seasonal item changes adds up fast for a business already running tight margins on food cost. A QR menu removes that cost entirely: edit an item, the menu is current, no print run required. It also sidesteps a delivery app’s commission if you’re set up for pickup or a walk-up counter — see taking food orders online for the commission math on that comparison.

Common questions

Does this replace my POS system? Not necessarily — a QR menu can be purely informational (scan, browse, filter, tell the counter what you want) or pair with product cards for direct payment, depending on how your counter or kitchen already operates.

Can I take payment through the QR menu itself? The menu block itself is built for browsing and filtering, not checkout — pair it with a product card or product block for the items you take direct payment on, through your own connected Stripe account. Connecting Stripe is a one-time setup.

Is there a limit to how many tags I can use? Yes — up to 10 distinct tags across the whole menu, which is enough for most dietary and category splits without turning the filter row into something longer than the menu itself.

Do I need an app for customers to scan this? No — every phone’s native camera reads a QR code straight into the browser, no app or account required on either end.

Where to start

Add your menu items with the tags that actually matter — dietary, meal time, or your own distinction — group them the way your physical menu is organized, and grab the QR code from the menu block’s Share button. That’s a live, current, filterable menu — no PDF, no reprint run, no app required. Claim your page at keepp.link — free to start, live in minutes.


Claim your page at keepp.link — free forever, no card required.