Link to a web page, not a PDF
The code should open a page that reads well on a phone: large text, one column, prices next to dishes. A PDF of the printed menu forces people to zoom and drag. If the menu already exists as a PDF, put it on a simple page or convert it before you print the codes.
The code holds the address of that page. Because the code is static, you can change the menu on the page as often as you like and the printed codes keep working. Only the address must stay the same, so use one on your own domain rather than a link shortener that could expire.
Make the code
Open the website QR code generator, paste the menu address and add a frame with the text "Scan for menu" so guests know what it does. Keep the dots dark on a white background. A small logo is fine at error-correction level H, but this is a code that gets scanned in low light with a phone held at an angle, so keep the design plain.
Size and placement
A table card is scanned from 30 to 50 cm away. Make the code at least 4 cm wide, and larger on a stand that sits at the far end of a long table. A code on a wall or a window for people walking in should be 10 cm or more. Place codes flat, at the level people naturally hold a phone, not on a curved glass or under a shiny menu holder.
Lighting and lamination
Candlelight, coloured bulbs and glossy laminate are the three things that stop menu codes scanning. Matte laminate or plain card is better than gloss. Test a card at the darkest table in the room, in the evening, with a phone that is not yours.
Keep a printed menu handy
Some guests have no phone, a flat battery or no signal in the back of the room. Keep a few printed menus at the counter so the code is a convenience rather than a barrier.
Updating the menu
Change the page, not the code. Add the WiFi details to the same page, or print a WiFi code next to the menu code, so guests with poor signal can still load it.