Skip to content
FeaturesPricingAffiliateBlogHelpAboutContact
Get StartedSign In
Back to Blog
guides2027-09-287 min read

Schema Markup Deep-Dive: Combining Restaurant + Menu + Review

How to merge Restaurant, Menu (hasMenu → MenuSection → MenuItem), AggregateRating, and Review into a single JSON-LD block — and why AI search loves it.

th

thMenu Team

thmenu.com

An 8-table vegan cafe in Bornova, Izmir ranks third in ChatGPT's "Izmir vegan brunch where" query — not from social media, but because thMenu silently emits a combined schema markup the owner doesn't even know exists. Here's how we fuse Restaurant, Menu, and Review types into one JSON-LD block.

Why One Block, Three Schemas?

Google, Bing, and especially ChatGPT and Perplexity often struggle when Restaurant, Menu, and Review live in separate script tags. The LLM frequently parses only the first block and drops the rest. Our solution: a single @graph array with three nodes cross-referenced via @id.

That layout lets an LLM pick up the address, three brunch dishes, vegan flag, and the 4.7-star aggregate rating in one pass. Split into separate blocks, only the Restaurant snippet usually survives the cut.

The JSON-LD Skeleton

thMenu's auto-generated template follows this order:

  • Restaurant node: name, address, servesCuisine, priceRange, image, aggregateRating, and hasMenu: { @id: "..." }.
  • Menu node: @type: "Menu" with hasMenuSection arrays, each section listing MenuItem objects (name, description, offers.price, suitableForDiet).
  • Review node: @type: "Review", itemReviewed: { @id: "the restaurant id" }, with 3-5 recent reviews (author, reviewRating, datePublished).

Validation for LLMs and Classic SEO

After deployment, verify in three places: Google Rich Results Test (Restaurant + Menu), Schema.org Validator for type errors, and finally ChatGPT itself — query your restaurant by name plus city and see how the markup data lands in the answer.

thMenu computes the aggregate rating only from the last 90 days of customer feedback; older or flagged reviews are excluded. This keeps you safely on the right side of Google's review-spam policy.

FAQ

How long until schema updates show in AI search? Around 1-3 weeks for Google; 7-21 days for ChatGPT and Perplexity, gated by Bing's crawl cycle.

Will I get a fake-rating penalty? Not if your AggregateRating is built from real feedback and reviewCount is honest. Inventing numbers is what triggers the penalty.

Should I list every menu item? No — the top 20-30 are enough. Beyond that you bloat page size and waste crawl budget.

Found this helpful? Share it.