XooCode(){

MenuSection

MenuSection is a CreativeWork subtype for a named section within a Menu: "Starters", "Mains", "Desserts", "Beverages", "Kids' menu". It adds 2 direct properties:

  • hasMenuItem (MenuItem): the items in this section, array-valued.
  • hasMenuSection (MenuSection): sub-sections (recursive), e.g. "Wines" containing "Red", "White", "Sparkling".

The typed Menu / MenuSection / MenuItem hierarchy is what lets Google's restaurant carousel and AI menu-aware assistants navigate a restaurant's offerings.

Full example of schema.org/MenuSection json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/MenuSection
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "MenuSection",
  "name": "Mains",
  "description": "Locally-sourced entrées, all served with seasonal vegetables and a choice of side.",
  "hasMenuItem": [
    { "@type": "MenuItem", "name": "Pan-seared Pocono trout", "description": "Whole trout, brown-butter almondine", "offers": { "@type": "Offer", "price": "26.00", "priceCurrency": "USD" }, "suitableForDiet": "https://schema.org/GlutenFreeDiet" },
    { "@type": "MenuItem", "name": "Dunmore ribeye", "description": "14 oz dry-aged ribeye, chimichurri", "offers": { "@type": "Offer", "price": "38.00", "priceCurrency": "USD" } },
    { "@type": "MenuItem", "name": "Wild-mushroom risotto", "description": "Arborio, cremini + shiitake, Parmigiano-Reggiano", "offers": { "@type": "Offer", "price": "22.00", "priceCurrency": "USD" }, "suitableForDiet": "https://schema.org/VegetarianDiet" }
  ]
}
</script>

Minimal valid version

The smallest markup that still produces a valid MenuSection entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/MenuSection (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "MenuSection",
  "name": "Mains",
  "hasMenuItem": [{ "@type": "MenuItem", "name": "Pan-seared Pocono trout" }]
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

  • Restaurant menu (via containing Menu)primary
    Google docs

Common MenuSection mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    Flat hasMenuItem on Menu without sections

    Wrong
    Menu.hasMenuItem listing every item directly
    Right
    Menu.hasMenuSection with each MenuSection carrying its own hasMenuItem

    Without sections, Google's menu surface cannot group items for navigation.

  2. 02

    Nested MenuItems inside MenuItems

    Wrong
    MenuItem containing sub-MenuItems for options
    Right
    Use menuAddOn on the parent MenuItem for optional add-ons

    menuAddOn is the right slot; arbitrary nesting confuses menu parsers.

Also mentioned in 2 other examples

MenuSection also appears in Menu, and Restaurant. See the full MenuSection schema page for every reference.

About the example data

The "Mains" section of The Dunmore Grill's dinner menu.

Comments

Loading comments...

Leave a comment