
Schema markup is one of those website jobs that sounds technical and gets left off the list. For a restaurant it is a short block of code that tells Google, in plain fields, what your website already says in words: your name, address, phone number, opening hours, cuisine and where the menu is. It takes about an hour to add and check, and once it is right you rarely touch it again.
This post covers what to include, what Google does and doesn't do with it, and the review stars question that comes up every time.
What schema markup actually does
When Google reads your homepage, it has to work out which number is the phone, which line is the address and whether "5 till late" means you open at five. Most of the time it gets there. Schema markup removes the guessing. It is written in a shared vocabulary from schema.org, and Google recommends the JSON-LD format, which sits in a script tag on the page and doesn't change how the page looks.
Two things to be clear about. Google has said structured data is not a general ranking factor, so adding it will not move you up the map on its own. And the details in your markup should match your Google Business Profile. Google uses both, and when they disagree, it trusts both less. Think of markup as backing up your listing, the same job your address and hours on the page already do.
Pick the right type
Schema.org has a family of food types under FoodEstablishment, which itself sits under LocalBusiness. Use the most specific one that is true:
Restaurantfor a restaurant or bistro.CafeOrCoffeeShopfor a cafe.BarOrPub,Bakery,FastFoodRestaurantorIceCreamShopwhere those fit better.
Each location should have its own block on its own location page, with that venue's address and phone. We cover the rest of the multi-venue setup in local SEO for restaurants with more than one location.
The fields worth filling in
You don't need every property schema.org lists. These are the ones that matter for a restaurant:
- name, url, telephone, image: the basics. Use a real photo of the venue or a dish, not your logo.
- address: as a
PostalAddress, with street, suburb, state, postcode and country in separate fields. - openingHoursSpecification: one entry per set of days with the same hours. Times are in 24 hour format.
- servesCuisine: what you serve, in words a customer would use ("Vietnamese", "Brunch").
- priceRange: a rough guide such as "$$".
- menu (or hasMenu): the address of your menu page.
- acceptsReservations: true or false, or the address of your booking page.
- sameAs: links to your Instagram, Facebook and other official profiles, which helps Google connect them to you.
An example
Here is a trimmed version of what we add for a single-venue restaurant. Swap in your own details.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "[Restaurant name]",
"url": "https://www.example.com/",
"image": "https://www.example.com/photos/dining-room.jpg",
"telephone": "+61 3 0000 0000",
"priceRange": "$$",
"servesCuisine": ["Italian", "Pizza"],
"acceptsReservations": true,
"menu": "https://www.example.com/menu",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 Example Street",
"addressLocality": "Fitzroy",
"addressRegion": "VIC",
"postalCode": "3065",
"addressCountry": "AU"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Tuesday", "Wednesday", "Thursday"],
"opens": "17:00",
"closes": "22:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Friday", "Saturday"],
"opens": "12:00",
"closes": "23:00"
}
],
"sameAs": [
"https://www.instagram.com/[handle]",
"https://www.facebook.com/[page]"
]
}
</script>Menus: link the page, keep it as text
Schema.org lets you mark up a full menu with hasMenu, broken into MenuSection and MenuItem entries with names, descriptions and prices. It is valid, but for most restaurants it is more upkeep than it is worth, because every price change means editing the markup too. Google does not show a special result for menu markup today.
What matters more is that the menu page itself is real text that Google can read. If your menu is a PDF, fix that first (see is a PDF menu bad for your restaurant), then point the menu field at that page. Add the same items to your Google profile using the menu editor.
Not sure what your website tells Google?
Send us your restaurant's website. We'll check the markup, the menu, the page titles and your Google listing, and send you a short list of what to fix first. Free.
Get a free website checkHours, and holiday hours
Hours are where markup most often goes wrong, because they change and nobody remembers the code. If you change your hours, update them in three places on the same day: the Google profile, the hours shown on the website, and the markup. A care plan or a website that pulls all three from one setting saves the mistake.
For a one-off change such as Christmas trading, the most reliable place is the special hours section of your Google Business Profile. You can also add a separate openingHoursSpecification entry with validFrom and validThrough dates, but the Google profile is what customers see on Maps.
Review stars: what you can and can't do
Many owners ask for the gold stars to appear under their website in search results. For a restaurant's own site, that is no longer possible. In 2019 Google stopped showing review stars for businesses that mark up reviews about themselves on their own website, which it calls self-serving reviews.
- Don't copy your Google or TripAdvisor reviews into an
aggregateRatingblock. It breaks Google's guidelines and can lead to a manual action against the site. - Your stars on Google Maps and in the local results come from your Google Business Profile, so that is where the review effort belongs. Our post on how many reviews a restaurant needs covers the numbers.
- Showing a few real reviews on the page as text is fine for customers. Just don't mark them up to try for stars.
Test it before you call it done
Two free tools will show you what Google sees:
- Google's Rich Results Test (search.google.com/test/rich-results): paste the page address, and it shows the structured data it found and any errors.
- The Schema Markup Validator (validator.schema.org): checks the markup against the full schema.org vocabulary, including types Google doesn't use for rich results.
After that, Search Console will report structured data problems on its own if something breaks later, for example after a theme update. If you use WordPress, an SEO plugin will add basic markup for you, but check that it says Restaurant or CafeOrCoffeeShop and not a generic Organization, and that the hours are filled in.
Where it fits
Schema markup is a small part of a restaurant website that works for search. The bigger pieces are a page title with your suburb and cuisine, the menu as text, fast loading on a phone, and an obvious way to book or order. Our cafe website checklist runs through them all. If you are in the US, the same markup applies; our US restaurant marketing page covers how we build sites there.
FAQs
What is schema markup for a restaurant?
It is a small block of code on your website, usually in JSON-LD format, that states your restaurant's details in a form search engines read without guessing: name, address, phone, hours, cuisine, price range, menu link and booking options.
Does schema markup improve restaurant rankings on Google?
Not directly. Google has said structured data is not a general ranking boost. It helps Google read and trust your details, and it can make your pages eligible for richer results, which is why it is worth the hour it takes.
Can I show star ratings from my Google reviews on my website in search results?
No. Google stopped showing review stars for businesses that mark up reviews about themselves on their own site, and copying reviews from Google or other sites into your markup goes against its guidelines. Your stars on Google Maps come from your Google Business Profile.
Should I use the Restaurant or LocalBusiness type?
Use the most specific type that is true. Restaurant, CafeOrCoffeeShop, BarOrPub and Bakery are all types under FoodEstablishment, which sits under LocalBusiness, so a cafe that marks itself up as CafeOrCoffeeShop is also understood as a local business.
How do I check if my restaurant website has schema markup?
Paste your homepage URL into Google's Rich Results Test or the Schema Markup Validator at validator.schema.org. Both show what structured data the page has and flag errors.