Are the New Restaurant Schema Markups Right for You?
What is Schema.org?
If you’re like most small businesses, you probably need a short background on what Schema.org is before we can understand if the newly introduced Schema markup for restaurant menus.
Schema.org is a collaboration between the world’s biggest search engines –Google, Bing, Yandex, and Yahoo! to create a “database schema” that can help any search engine better understand the information on a website. In SEO circles, it’s also known as structured data and rich snippets.The addition of a schema markup by a webmaster on a site can also help search engines create new services and applications. The more organizations that add the right markup to their web pages, the better these services become.
If you work more with social media, the idea behind Schema.org is similar to Facebook’s Open Graph, where the addition of markups tells Facebook how to specifically sort and display your data. The main differences are that Schema.org is for search engines and the sheer detail the system allows.
Why would my restaurant need Schema.org markups?
Any business that spends effort ranking high on engines should definitely look into adding markups to their sites.While schema markups will not increase a page’s organic search engine ranking, they can increase clickthrough rate, which is an equally critical metric for any SEO campaign.
Restaurants have more to gain from adding schema markup to their pages, given the intense competition and great need for differentiation in the industry. The addition of appropriate markup will add relevance to your site, and you get a chance to better connect with the people who need your business.
For a restaurant, the addition of Schema.org allows search engines to display important information to customers before they even enter your website. This information might include your address, opening hours, phone number, and menu items — things the customer may not necessarily want to visit your site for. This way, potential customers exert less effort finding critical info, which in turn means more sales over time.
To make things even better, a recent release added a new set up restaurant-related schema markup that promises to add even more utility. A few months back there was only a way to point toward menus on your site, not display them on search engine results. But now we’re able to mark up the name, description, price, and nutritional information. There’s even a way to denote if the menu item is low calorie, low fat, low salt, vegan, gluten-free, or suitable for various other restricted diets. For specialty restaurants, adding schema markup for their menus, is a critical step toward profitability.
Are there other ways to get “rich snippets”?
As of writing Google is able to automatically extract a little data about your restaurant if it has published its menu on a 3rd party site. However, having the needed Schema.org restaurant markup on your own site will simplify the process and allow you much more detail on the search results.
How do I get started with restaurant schema markups?
Visit the Schema.org/restaurant page to find a list of schema.org menu and restaurant-related “properties”. You may use GraphQL, JSON-LD, JSON and other data formats to define your schema markup. If you’re just starting out, hold onto your hats, it can get a bit technical.
Writing for Moz.com, David Deering explained in depth how to use JSON-LD, a Google-recommended format for marking up a restaurant menu.
As you can see, our ability to mark up menus has become much more robust. So let’s put it all together now with some examples. We’ll be using JSON-LD, since that’s what Google prefers, and we’ll be marking up the menu of an Italian restaurant.
On the home page
On every page of the website, especially the home page, we want to point search engines in the right direction as to where the menu can be found. Keeping in mind that Google’s guidelines state that we should only mark up content that’s visible on the page, we can’t exactly include the entire menu in our home page markup unless the entire menu is published there. Instead, we’ll simply use the hasMenu property on the home page to point to the menu page, like this:
<script type=”application/ld+json”>
{
“@context”: “http://schema.org”,
“@type”: “WebSite”,
“name”: “Your Restaurant’s Name”,
“url”: “http://your-restaurant.com/”,
“publisher”: {
“@type”: “Restaurant”,
“name”: “Your Restaurant’s Name”,
“hasMenu”: “http://your-restaurant.com/menu/”,
“logo”: “http://…..
In fact, on any page of your website that includes some schema markup, you could use the hasMenu property to point to the URL of the menu page.
When you have more than one menu
Now, in our example, the restaurant only serves dinner and has only one menu. But sometimes restaurants are open for breakfast, lunch, and dinner, and of course have separate menus for each. In that case, we would do this on the home page:
“hasMenu”: [
{
“@type”: “Menu”,
“name”: “Breakfast”,
“url”: “http://your-restaurant.com/breakfast-menu/”
},
{
“@type”: “Menu”,
“name”: “Lunch”,
“url”: “http://your-restaurant.com/lunch-menu/”
},
{
“@type”: “Menu”,
“name”: “Dinner”,
“url”: “http://your-restaurant.com/dinner-menu/”
}
],
Starting the menu page markup
Switching our attention to the actual menu page, let’s say that the menu was only served between 5:00pm and 11:00pm. So, on the menu page, our markup would begin like this:
<script type=”application/ld+json”>
{
“@context”: “http://schema.org”,
“@type”: “Menu”,
“name”: “Our Menu”,
“mainEntityOfPage”: “http://your-restaurant.com/menu/”,
“inLanguage”: “English”,
“offers”: {
“@type”: “Offer”,
“availabilityStarts”: “T17:00”,
“availabilityEnds”: “T23:00”
},
Marking up sections of the menu
Next, we can begin marking up the various sections of the menu and the individual menu items. First, we’ll start with the appetizers. For the first appetizer, we’ll include in our markup the name, a brief description, and the price, which should be the minimum for any menu item. In our second appetizer markup example, we’ll also include an image, the nutritional information, and the fact that it’s gluten-free:
“hasMenuSection”: [
{
“@type”: “MenuSection”,
“name”: “Appetizers”,
“hasMenuItem”: [
{
“@type”: “MenuItem”,
“name”: “Fried Eggplant”,
“description”: “Served with Italian red gravy.”,
“offers”: {
“@type”: “Offer”,
“price”: “7.95”,
“priceCurrency”: “USD”
}
},
{
“@type”: “MenuItem”,
“name”: “Fried Calamari”,
“description”: “Served with Italian red gravy or honey mustard.”,
“image”: “http://your-restaurant.com/images/fried-calamari.jpg”,
“suitableForDiet”: “http://schema.org/GlutenFreeDiet”,
“nutrition”: {
“@type”: “NutritionInformation”,
“calories”: “573 calories”,
“fatContent”: “25 grams”,
“carbohydrateContent”: “26 grams”,
“proteinContent”: “61 grams”
},
“offers”: {
“@type”: “Offer”,
“price”: “7.95”,
“priceCurrency”: “USD”
}
}
]
},
By the way, schema dietary restriction enumerations also include DiabeticDiet, HalalDiet, HinduDiet, KosherDiet, LowCalorieDiet, LowFatDiet, LowLactoseDiet, LowSaltDiet, VeganDiet, and VegetarianDiet. Feel free to use one or more of these enumerations when they apply.
Marking up the menu items
Let’s say we’ve marked up all of the appetizers and we’re ready to begin marking up the next menu section, which in our case are the soups. Sometimes menu items such as soups are available in two or more sizes. We can mark up the available options by using a separate offer markup for each along with the eligibleQuantity property, like this:
{
“@type”: “MenuSection”,
“name”: “Soups”,
“hasMenuItem”: [
{
“@type”: “MenuItem”,
“name”: “Lobster Bisque”,
“offers”: [
{
“@type”: “Offer”,
“price”: “6.75”,
“priceCurrency”: “USD”,
“eligibleQuantity”: {
“@type”: “QuantitativeValue”,
“name”: “Cup”
}
},
{
“@type”: “Offer”,
“price”: “9.95”,
“priceCurrency”: “USD”,
“eligibleQuantity” : {
“@type”: “QuantitativeValue”,
“name”: “Bowl”
}
}
]
},
{
“@type”: “MenuItem”,
“name”: “Creole Seafood Gumbo”,
“offers”: [
{
“@type”: “Offer”,
“price”: “6.75”,
“priceCurrency”: “USD”,
“eligibleQuantity”: {
“@type”: “QuantitativeValue”,
“name”: “Cup”
}
},
{
“@type”: “Offer”,
“name”: “Bowl”,
“price”: “9.95”,
“priceCurrency”: “USD”,
“eligibleQuantity” : {
“@type”: “QuantitativeValue”,
“name”: “Bowl”
}
}
]
}
]
},
Putting it all together
After we’ve marked up all of the soup items, we can move on to marking up the other menu sections and items using the same format. And that’s it. Putting it all together, our JSON-LD menu markup would look something like this:
<script type=”application/ld+json”>
{
“@context”:”http://schema.org”,
“@type”:”Menu”,
“name”: “Our Menu”,
“url”: “http://your-restaurant.com/menu/”,
“mainEntityOfPage”: “http://your-restaurant.com/menu/”,
“inLanguage”:”English”,
“offers”: {
“@type”: “Offer”,
“availabilityStarts”: “T17:00”,
“availabilityEnds”: “T23:00”
},
“hasMenuSection”: [
{
“@type”: “MenuSection”,
“name”: “Appetizers”,
“hasMenuItem”: [
{
“@type”: “MenuItem”,
“name”: “Fried Eggplant”,
“description”: “Served with Italian red gravy.”,
“offers”: {
“@type”: “Offer”,
“price”: “7.95”,
“priceCurrency”: “USD”
}
},
{
“@type”: “MenuItem”,
“name”: “Fried Calamari”,
“description”: “Served with Italian red gravy or honey mustard.”,
“image”: “http://your-restaurant.com/images/fried-calamari.jpg”,
“suitableForDiet”: “http://schema.org/GlutenFreeDiet”,
“nutrition”: {
“@type”: “NutritionInformation”,
“calories”: “573 calories”,
“fatContent”: “25 grams”,
“carbohydrateContent”: “26 grams”,
“proteinContent”: “61 grams”
},
“offers”: {
“@type”: “Offer”,
“price”: “7.95”,
“priceCurrency”: “USD”
}
}
]
},
{
“@type”: “MenuSection”,
“name”: “Soups”,
“hasMenuItem”: [
{
“@type”: “MenuItem”,
“name”: “Lobster Bisque”,
“offers”: [
{
“@type”: “Offer”,
“price”: “6.75”,
“priceCurrency”: “USD”,
“eligibleQuantity”: {
“@type”: “QuantitativeValue”,
“name”: “Cup”
}
},
{
“@type”: “Offer”,
“price”: “9.95”,
“priceCurrency”: “USD”,
“eligibleQuantity” : {
“@type”: “QuantitativeValue”,
“name”: “Bowl”
}
}
]
},
{
“@type”: “MenuItem”,
“name”: “Creole Seafood Gumbo”,
“offers”: [
{
“@type”: “Offer”,
“price”: “6.75”,
“priceCurrency”: “USD”,
“eligibleQuantity”: {
“@type”: “QuantitativeValue”,
“name”: “Cup”
}
},
{
“@type”: “Offer”,
“name”: “Bowl”,
“price”: “9.95”,
“priceCurrency”: “USD”,
“eligibleQuantity” : {
“@type”: “QuantitativeValue”,
“name”: “Bowl”
}
}
]
}
]
},
{
“@type”: “MenuSection”,
“name”: “Pastas”,
“description”: “Entrées served with dinner salad or a cup of soup of the day.”,
“hasMenuItem”: [
{
“@type”: “MenuItem”,
“name”: “Veal Parmigiana”,
“description”: “Tender cuts of paneed veal crowned with golden fried eggplant, Italian red gravy, mozzarella, and parmesan; served with spaghetti.”,
“offers”: {
“@type”: “Offer”,
“price”: “17.95”,
“priceCurrency”: “USD”
}
},
{
“@type”: “MenuItem”,
“name”: “Eggplant Parmigiana”,
“description”: “Pan fried eggplant layered and topped with Italian red gravy, mozzarella, and parmesan baked until bubbly; served with spaghetti.”,
“offers”: {
“@type”: “Offer”,
“price”: “14.95”,
“priceCurrency”: “USD”
}
}
]
}
]
}
</script>
If your food business has a website and a menu, it’s worth having your webmaster implement these tags. Considering that the recent restaurant schema release implemented many new features, and other businesses that have older Schema markups might not started using these. It may take some effort, but if you’re already efforting to be found on Google, it makes sense to spend some more to make potential customers click through to your site.
Did you find this helpful? Comment below.
Arthur Piccio is a feature writer and subject matter expert for the PrintPlace Blog. In his spare time he studies guitar and writes about goats.