Blog · Method ·

Menus as text, not photos: how we publish a restaurant menu

Why a restaurant menu belongs on the page as text, with structured data, exact prices and working old links, from the menus we published for Midori Sushi, King Katsu Land and Cocobang.

A phone showing a menu laid out as a list, next to a paper menu card, a bowl of edamame and chopsticks on a wooden table

A photo of a menu is a picture of words

Many restaurant websites show the menu as a photo of the printed card or as a PDF. On a large screen, for a guest with good eyesight, that works. Everyone else gets less. A screen reader can only read the image's alt text. The browser's translate button leaves the photo as it is. Find in page finds nothing. On a phone, the guest pinches and pans across the card.

Search engines and AI assistants are in the same position. A crawler that fetches the page receives an image file. Google says it understands an image from the content of the page around it, "including captions and image titles". The dish names and prices inside the picture are not part of that text.

Midori Sushi's official menu reached us as ten images. Today the same menu is 210 entries of text in 24 sections on the restaurant's own website. The Midori case study covers the design. This note covers the method we now use for every restaurant menu we publish.

One page, every dish in text

  • A menu page of its own, with its own address, title and description, linked from the home page and from the menu link on the Google Business Profile.
  • Every dish as text: the name, a short description where the menu has one, and the price, in the restaurant's own sections.
  • The whole menu in the HTML the server sends, so it can be read before any script runs.
  • Search and category filters for a long menu. On Midori Sushi's menu, guests can type a dish or an ingredient, and the page shows how many items match.

What search engines and AI assistants receive

AI assistants that answer with web search fetch pages with their own crawlers, such as OAI-SearchBot, PerplexityBot and ClaudeBot. On September 27, 2026, the menu pages of Midori Sushi, King Katsu Land and Cocobang returned the full page to each of them and to Googlebot. What each crawler received was the menu as text, not a picture of it.

The same facts, in structured data

Each menu page also carries structured data in the schema.org vocabulary: a Menu made of MenuSections that hold MenuItems, and, where the page shows a price, an Offer with that price in US dollars. The restaurant's own structured data points to the menu.

Structured data does not replace the visible menu. It repeats it in a form software can read without guessing which number belongs to which dish. Our rule is that it may only say what the page shows. We checked the live pages on September 27, 2026: every price in the menu data of Midori Sushi (141 prices) and King Katsu Land (33 prices for 29 items) appears on the page next to its dish.

On each of the three sites, the menu page and its structured data are built from one menu file, so a price changed once changes in both places.

Prices: exact, or not at all

A menu page is only as useful as its prices. We copy them from the restaurant's official menu and never fill a gap with an estimate.

Some dishes have two prices. At Midori Sushi, sushi is priced by the piece and sashimi by three pieces, and wine by the glass or the bottle. On the page these are tables with labeled columns. In the structured data, those dishes are not given a single price, and the table on the page shows both.

Midori's separate gluten-free menu keeps its own six sections and 47 entries, with its own prices.

When a price is not confirmed, it stays off the page. Cocobang's menu page lists 26 dishes in five categories without prices, and its structured data names each dish without a price as well. Guests who want to order go on to the restaurant's pages on Uber Eats, DoorDash and Grubhub.

Keep the PDF, publish the text

A restaurant often already has its menu as a PDF, and a PDF is still handy for printing. We keep it as a download and publish its contents as a page. Midori Sushi's lunch specials came to us as a PDF. The lunch page now lists all 17 specials as text, from $15 to $19.50 with miso soup, each with its price in the structured data, and links to the PDF.

Keep old menu addresses working

When a restaurant moves off a site builder, its old menu pages stay in search results and bookmarks for a while. If an old address now shows an error page, the guest who clicked it has hit a dead end.

Before launch, we collect the old site's addresses from its sitemap and from the pages search engines still list, and give every old menu address a permanent (301) redirect to the new menu page. On the restaurant sites we moved from Wix and Squarespace, old addresses such as /20, /price and /feature now lead to the current menu in one step, with any query string kept.

We look again after launch. On one site, an old /newark-menu address turned up in search results after the move and returned an error page. It now redirects to the menu as well.

Seasonal dishes and price changes

A text menu is easy to change, so it can also fall out of date quietly. A menu page should say when it was last checked. Midori Sushi's menu reads "Menu and prices checked September 17, 2026" and asks guests to confirm current prices when ordering. Its lunch page was checked on September 22.

A seasonal dish goes into the menu file with its section and price when it starts and comes out when it ends, and the checked date moves with it. Because the page and the structured data come from the same file, neither is left behind.

Text is what makes a menu accessible

On Midori Sushi's menu page:

  • Each of the 24 sections has a heading, so a screen reader can jump from section to section.
  • Dishes with two prices sit in tables with a caption and column headers, such as "Sushi · 1 pc" and "Sashimi · 3 pc".
  • The search box has a label, and the number of matching items is announced as it changes.
  • Raw dishes carry a marker explained in a legend, and spicy dishes are labeled with the word.
  • Text wraps to the width of a phone screen, so nobody has to pinch and pan across a picture.

A checklist for a menu page

  • Every dish and price is text on a page of the restaurant's own website, not only in a photo or a PDF.
  • Prices come from the current official menu. A price that is not confirmed is left out, not estimated.
  • A dish with two prices shows both, in a table with labeled columns.
  • The page has Menu structured data, and every price in it appears on the page.
  • The page says when the menu was last checked.
  • The menu link on the Google Business Profile points to the page.
  • Old menu addresses from the previous site redirect (301) to the new page.
  • Search engines and AI search crawlers can fetch the page.
  • Sections have headings, and the menu reads well at phone width and before any script runs.

Facts in this note come from our project records and from the live menu pages, checked on September 27, 2026.

Sources

Case studies in this note.

  1. A bento box and a cup of green tea on a table in a bright Japanese dining room with shoji screens

    · Case study

    Midori Sushi: a new look for 27 years of authentic sushi in Austin

    An Austin sushi restaurant established in 1999, a searchable 210-item menu, and 1,615 search impressions and the #1 Google position for 12 queries in the latest three days.

    Read
  2. King Katsu: a wide pork cutlet on a white plate, sauce being poured, on black marble

    · Case study

    King Katsu Land: three directions and the first search snapshot

    Three coded design directions for two locations, followed by 3,894 search impressions, 174 clicks and the #1 Google position for 31 queries in the latest three days.

    Read
  3. Glazed Korean fried chicken, tteokbokki and side dishes on a deep red table

    · Case study

    Cocobang: Seoul heat, San Francisco nights

    A website for a late-night Korean restaurant, connecting the menu, opening hours and ordering services in one place.

    Read
Start a project

Your shop,
properly found.

Tell us about your shop and what you’d like to improve. A few lines are enough to get started.

213-222-3086
Project inquiryOptional fields are marked.

We’ll use these details to review your project and reply by email.