Key points at a glance
- Structured data describes your venue in a machine-readable way using the schema.org vocabulary. Guests don't see it, search engines and AI assistants do.
- Choose the most specific type: Restaurant, CafeOrCoffeeShop, BarOrPub, Bakery, FastFoodRestaurant, Hotel or BedAndBreakfast.
- For local businesses, Google only requires name and address, but recommends coordinates, opening hours, phone, website, price range, cuisine and a link to the menu, among others.
- Check every change with Google's Rich Results Test and the Schema Markup Validator.
- The data must match the visible content. Self-collected star ratings in your own markup won't earn stars on Google and quickly look dubious.
This post is general information and does not replace legal or tax advice. Rules change and some differ between federal states: check the details with your chamber of commerce (WKO) or IHK, the competent authority or your tax adviser.
What structured data is
Imagine handing a new supplier not your whole menu, but a filled-in form: name, address, phone, opening hours, cuisine. That is exactly what structured data is. It sits invisibly in the source code of your website and sums up the key facts in fixed fields. Which fields exist and what they are called is defined by schema.org, a shared vocabulary launched by Google, Microsoft, Yahoo and Yandex.
The benefit: a search engine doesn't have to guess whether “Mon–Fri 11–22” in the footer means opening hours or whether “Hauptstraße 5” is your address. It reads it straight from the form. That helps with classification in local search, with displaying opening hours and with AI assistants describing your venue correctly. Structured data is one building block of local SEO, not a substitute for good content and a well-kept Google Business Profile.
The right type for your business
Schema.org doesn't just know the generic “LocalBusiness”, but many more specific subtypes. For hospitality, “FoodEstablishment” is the umbrella term, with specific types underneath. The more specific the type, the clearer the message. Pick one main type that fits your business and the primary category on your Google profile.
| Business | Matching schema.org type | Note |
|---|---|---|
| Restaurant, traditional inn, Gasthaus | Restaurant | The standard for venues with table service |
| Café, coffee house | CafeOrCoffeeShop | Also for patisserie cafés |
| Bakery, patisserie | Bakery | Still Bakery as the main type even with a café area |
| Bar, pub, wine bar | BarOrPub | There is also Winery, but that means a winery estate |
| Club, nightclub | NightClub | A subtype of EntertainmentBusiness |
| Snack bar, food truck, burger joint | FastFoodRestaurant | Without a fixed location, an organization with contact details is often enough |
| Ice cream parlour, brewery | IceCreamShop, Brewery | Special types for exactly these businesses |
| Hotel, guesthouse | Hotel, BedAndBreakfast, Hostel | Describe the hotel restaurant additionally as a restaurant of its own |
A hotel with a restaurant open to the public can map both: the hotel as the main object and the restaurant as a separate object with its own opening hours, for example via the “department” property, which Google explicitly provides for departments of a business. There is no dedicated type for an Austrian Heuriger or Buschenschank (a wine tavern); Restaurant or Winery with clear opening hours are the usual options.
The key details
According to Google, only name and address are required for local businesses. The more complete the other details, the better a search engine can classify your venue. These fields matter most for hospitality:
| Property | What goes in | What to watch |
|---|---|---|
| name | Name of the venue | Exactly as on the sign and the Google profile, no promotional extras |
| address | Street, postcode, town, country | Same spelling as in the legal notice |
| geo | Latitude and longitude | At least five decimal places according to Google |
| telephone, url | Phone with country code, website | For example +43 or +49 instead of 0 |
| openingHoursSpecification | Opening hours per weekday | Leave out rest days, add closures with a validity period |
| servesCuisine | Cuisine, e.g. Austrian, Italian, Vegan | Honest and specific, not a list of every style imaginable |
| menu or hasMenu | Link to the menu or a structured menu | Link to a text menu, not a PDF |
| acceptsReservations | Yes, no or a link to booking | Only if booking is really possible |
| priceRange | Price level, e.g. €€ or €15–30 | Under 100 characters according to Google |
| image | Link to a photo of the venue | A real photo, not a logo placeholder |
Opening hours use English weekday names and 24-hour times, for example “Tuesday” from 11:30 to 22:00. If your bar is open until 2 a.m., write it as one time slot from 18:00 to 02:00, not as two entries. Seasonal closures such as holidays or the winter break of your terrace or beer garden can be added with a start and end date. The menu itself should be on the website as text; how to build it is explained in the guide to the digital menu.
An example, line by line
This is what the content of a JSON-LD block for a fictional inn looks like. In the source code it sits in a script element of the type “application/ld+json”, usually in the head of the page. For readability it is shown here as a list of field and value; in real code, field names and texts are in quotation marks and grouped with curly brackets.
- @context: https://schema.org (says which vocabulary is used)
- @type: Restaurant
- name: Gasthaus Zur Linde
- address: PostalAddress with streetAddress “Hauptplatz 3”, postalCode “4020”, addressLocality “Linz”, addressCountry “AT”
- geo: GeoCoordinates with latitude 48.30639 and longitude 14.28611
- telephone: +43 732 000000
- url: the venue's home page
- servesCuisine: Austrian, Regional
- priceRange: €€
- menu: link to the menu page
- acceptsReservations: link to the booking page
- openingHoursSpecification: dayOfWeek Tuesday to Saturday, opens 11:30, closes 22:00; a second entry for Sunday from 11:00 to 15:00
Monday is missing from this example on purpose: it is the rest day. For a café, the type would be “CafeOrCoffeeShop” instead of Restaurant, for a bar “BarOrPub”, and the rest stays the same. The opening hours generator creates the finished block for your opening hours automatically, including public holidays and closures.
Generate opening hours as JSON-LD
Enter your hours once and get website text, a door sign, a Google post and structured data ready to paste. Free and without sign-up.
How the data gets onto your website
Set the type
Choose the most specific schema.org type for your business, matching the primary category on your Google profile.
Gather the data
Collect name, address, coordinates, phone, opening hours, cuisine, price range and the addresses of your menu and booking pages, exactly as they appear on the website.
Create the block
Have the JSON-LD block created with a generator, a plugin of your website system or by your agency. Hand-written code is error-prone.
Insert it
Add the block to the home page, or to each location page if you have several locations. Many site builders have a field for custom code in the head for this.
Test
Check the published page with the Rich Results Test and the Schema Markup Validator and fix any errors.
Maintain
Whenever opening hours, phone or menu change, update the structured data too. It is safest when the website system generates it automatically from the visible content.
Testing: Rich Results Test and validator
Two free tools show whether your structured data is read correctly. Both work with the address of a published page or with pasted code.
- Google's Rich Results Test: shows which data Google detects and reports errors and warnings for the features Google supports. Errors must be fixed, warnings usually concern missing recommended details.
- Schema Markup Validator (validator.schema.org): checks the entire schema.org vocabulary, including properties Google doesn't use, such as acceptsReservations. Good for finding typos in field names.
- Google Search Console: after a while it shows whether Google finds problems with structured data while crawling and notifies you by email. Search Console is worth it for your website statistics anyway.
Passing the test means the data is technically correct. It does not guarantee any particular display in the search results: Google decides for itself which information to show and when. Check how the title and description of your page look in the results with the Google preview as well.
Common mistakes and no fake stars
Most problems don't arise during setup, but months later, when something changes at the venue and the markup is forgotten. Others come from well-meant shortcuts. Google's general guidelines require structured data to reflect the visible content of the page and not to be misleading. Breaking them risks Google ignoring the data or issuing a manual action.
How to get it right
- The same opening hours as on the page, the Google profile and the door
- Choose the most specific type, e.g. CafeOrCoffeeShop instead of LocalBusiness
- Phone with country code and a full address including the country
- Test again after every change
- Link to genuine reviews on Google or platforms visibly
Better not
- Entering made-up or self-collected star ratings as aggregateRating
- Putting dishes, cuisines or places in the markup that appear nowhere on the page
- Leaving outdated hours after a summer break or a move
- Several contradicting blocks from theme, plugin and your own code at once
- Linking a PDF menu that nobody can read on a phone
About stars: according to its review snippet guidelines, Google doesn't show stars for local businesses whose reviews on their own website are controlled by the business itself. This explicitly includes embedded third-party widgets. A “4.9 stars” markup on your own home page therefore brings no advantage, and at worst trouble. Put the energy into genuine Google reviews instead. A table stand that takes guests straight to your review form with one scan is quick to make with the Google review QR code.
What structured data does and doesn't do
To be honest: structured data won't turn a weak website into a strong one. It isn't a direct ranking factor that lifts you overnight, and for a venue there is no spectacular rich result like there is for recipes or events. Its value lies in clarity. Search engines, map apps and AI assistants such as ChatGPT or Gemini draw on many sources, and consistent, machine-readable facts on your own website are one of them. How chatbots recommend venues is covered in the guide to visibility in AI search. Whether ChatGPT already recommends your venue today is shown by the AI preview for restaurants.
Structured data is most useful when everything else is right: a website with clear copy, a menu as text, a complete Google profile and the same details everywhere. If you hold events regularly, event markup is worth adding too; how to make events visible online is explained in the guide promoting events online. If you are hiring, there is a dedicated “JobPosting” markup that lets your vacancies appear in Google's job search; the guide on finding staff through your own website explains how.
Structured data checklist
- Most specific schema.org type chosen (Restaurant, CafeOrCoffeeShop, BarOrPub, Hotel …)
- Name and address identical to website, legal notice and Google profile
- Coordinates, phone with country code and website address entered
- Opening hours per weekday, rest days left out, closures with dates
- Cuisine, price range, menu and booking included
- No self-controlled star ratings in the markup
- Rich Results Test and Schema Markup Validator without errors
- Fixed routine: every change at the venue is also made in the markup
A website with structured data included
We'll show you for free what your hospitality website could look like, with a menu as text and automatically maintained structured data.
A free preview of your venue website, designed by us.


