Skip to content

How to Get Started with New Restaurant Menu Schema Markup

Up until recently Schema.org’s support for structured data in website design and implementation has lacked any sophisticated functionality for restaurant websites to markup their menus. It was never intended as a comprehensive vocabulary for every specialized business function, but in the latest release webmasters for restaurant websites will now have the ability to do more with schema.

Restaurant Menus in Schema

Before this update, restaurants could do little more than mark up their basic info such as name, address, phone number, hours of operation, (etc.).

In terms of structuring the data in their menus, all restaurant business websites had before was a basic menu property that could mark up their entire menu as a string of text, or point to the URL where their menu can be found. There was no way of actually marking up individual menu items and their associated information, such as prices or what type of menu they are on (breakfast, lunch, dinner).

The Schema Restaurant Update

Now restaurant owners and those who optimize restaurant websites for search engines now have the ability to use several new properties and types to actually structure the data rich information contained in a restaurant menu. These properties will also be of use to websites for other businesses that have menus, like coffee shops, bakeries, bars, and so forth.

hasMenu and hasMenuItem in Schema

So, to get started you’ll want to visit the schema.org/Restaurant page, where you’ll notice the old menu property has been replaced with a hasMenu property. Menus are now actual entities in schema.org with their own properties and subtypes. Objects of the type Menu now also have a hasMenuItem property, which can point to the new MenuItem entities, used to markup individual menu items.

Now for each MenuItem you will be able to mark up its name, a description, its price, and even its nutritional values. Another feature related to nutrition is the suitableForDiet property to categorize menu items that are low calorie, paleo, vegan, gluten free, or friendly to some other specialize dietary requirements.

hasMenuSection in Schema

Most restaurants have more than one menu, such as a lunch and dinner menu, so schema has built in a hasMenuSection property to cover this, and a MenuSection type that can be used to mark up the different menus. It can also be used to markup categories within these menu sections, such as appetizers, soups and salads, entrees, beverages, and desserts within the dinner menu.

Marking Up Restaurant Menus with Schema

First, use the hasMenu property on the home page to point to the menu like this:

 

<script type=”application/ld+json”>

{

“@context”: “http://schema.org”,

“@type”: “WebSite”,

“name”: “Your Restaurant’s Name”,

“url”: “http://YourRestaurantsURLHere.com/”,

“publisher”: {

“@type”: “Restaurant”,

“name”: “Your Restaurant’s Name Here”,

“hasMenu”: “http://YourRestaurantsURLHere.com/yourrestaurantsmenupage/”,

“logo”: “http://…..

Implementing Multiple Menus in Schema

If your restaurant has multiple menus, implement like this:

 

“hasMenu”: [

{

“@type”: “Menu”,

“name”: “Beverage”,

“url”: “http://YourRestaurantsURLHere.com/beverage-menu/”

},

{

“@type”: “Menu”,

“name”: “Lunch”,

“url”: “http://YourRestaurantsURLHere.com/lunch-menu/”

},

{

“@type”: “Menu”,

“name”: “Dinner”,

“url”: “http://YourRestaurantsURLHere.com/dinner-menu/”

}

],

Implementing Menu Hours in Schema

On the menu page itself, if lunch is served between 11am and 4pm, the markup should begin like this:

 

<script type=”application/ld+json”>

{

“@context”: “http://schema.org”,

“@type”: “Menu”,

“name”: “Our Menu”,

“mainEntityOfPage”: “http://YourRestaurantsURLHere.com/menu/”,

“inLanguage”: “English”,

“offers”: {

“@type”: “Offer”,

“availabilityStarts”: “T11:00”,

“availabilityEnds”: “T16:00”

},

Implementing Menu Items in Schema

Next you can start marking up individual sections of the menu and menu items like so:

“hasMenuSection”: [

{

“@type”: “MenuSection”,

“name”: “Appetizers”,

“hasMenuItem”: [

{

“@type”: “MenuItem”,

“name”: “Fried Macaroni”,

“description”: “Try our delicious Southern fried macaroni fritters.”,

“offers”: {

“@type”: “Offer”,

“price”: “7.95”,

“priceCurrency”: “USD”

}

},

{

“@type”: “MenuItem”,

“name”: “Fried Pickles”,

“description”: “Served with ranch dressing.”,

“image”: “http://your-restaurant.com/images/fried-pickles-picture.jpg”,

“suitableForDiet”: “http://schema.org/KosherDiet”,

“nutrition”: {

“@type”: “NutritionInformation”,

“calories”: “573 calories”,

“fatContent”: “25 grams”,

“carbohydrateContent”: “26 grams”,

“proteinContent”: “61 grams”

},

“offers”: {

“@type”: “Offer”,

“price”: “7.95”,

“priceCurrency”: “USD”

}

}

]

},

Robust

The new restaurant menu functionalities don’t cover everything a restaurant menu might need to be completely structured, but they do cover a lot and now make schema incredibly robust for restaurant websites. If you have any questions, don’t hesitate to leave them in the comments below.

This website uses cookies to ensure you get the best experience on our website.
Learn more