Schema markup for hotels: rich results and AI visibility

Most small accommodation sites have no schema markup. That means Google reads their pages as plain text, while competitors with the right code show stars, ratings and prices right in the search results. That's low-hanging fruit.
What schema markup is and why it matters
Schema markup (or structured data: code you add to your webpage to tell search engines what it is) is a layer of information you add to your page alongside visible content. It's part of the broader technical foundation you bring in order via the SEO basics for your hotel site. Search engines read that code and understand not just that your text is about a hotel, but also that it's a specific hotel, with an address in a particular city, an average rating of 4.3 out of 87 reviews, and rooms starting at a certain price.
That information Google can then show enriched in search results: yellow stars, price range, review counts, an FAQ right under your result. That's called a rich result.
Rich results are more visible than plain blue links. They attract more clicks, even if you're not in position 1. A result in position 3 with stars and review counts often beats number 1 without markup in click-through rate.
There's another argument that's increasingly relevant: AI assistants like Google AI Overviews, ChatGPT and Perplexity use schema markup to process structured business data in their answers. A hotel that describes itself correctly in structured data has a better chance of appearing as a recommendation when someone asks "what hotel in Utrecht has good breakfast and parking".
Which schema types matter for accommodations
There are dozens of schema types, but for accommodations five have direct effect.
| Schema type | What it does | For whom |
|---|---|---|
| Hotel | Marks the page as hotel, including address, price, amenities | Hotels with front desk and full service |
| BedAndBreakfast | Subtype of LodgingBusiness, more specific than Hotel | B&Bs with breakfast |
| LodgingBusiness | Umbrella type for all accommodations | Glamping, vacation park, hostel |
| FAQPage | Marks an FAQ section so Google expands it directly | Any accommodation page with common questions |
| AggregateRating | Processes rating data for rich results with stars | Sites with own review system or integration |
| BreadcrumbList | Shows navigation path in search results | Any page in a hierarchical site structure |
Pick the most specific type that applies to your accommodation. BedAndBreakfast is more specific than LodgingBusiness and gives Google more context.
Combining types works too: a hotel with an FAQ section uses Hotel plus FAQPage on the same page, in the same script tag.
Step by step: adding schema markup
Step 1: determine your type and gather data
Determine which type applies based on the table above. Then gather the information you want to include:
- Official accommodation name
- Full address including postal code
- Phone number and website URL
- Price range (single symbol as icon: euro sign, two euros, three euros)
- Average rating and number of reviews, if those are on your site
- URL of an accommodation photo
- URL of your booking page
Step 2: choose JSON-LD as format
Google supports three formats for structured data: JSON-LD, Microdata and RDFa. JSON-LD is Google's recommended method. It sits as a standalone script block in your page head and doesn't mix with your HTML. That makes it easier to add and maintain.
Step 3: add the code
Below is an example for a B&B. Adjust to your own details.
{
"@context": "https://schema.org",
"@type": "BedAndBreakfast",
"name": "B&B The Golden Shore",
"url": "https://www.thegoldenshore.nl",
"telephone": "+31-555-123456",
"address": {
"@type": "PostalAddress",
"streetAddress": "Waterfront Street 12",
"addressLocality": "Zwolle",
"postalCode": "8011 AB",
"addressCountry": "NL"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 52.5125,
"longitude": 6.0942
},
"priceRange": "euro-euro",
"image": "https://www.thegoldenshore.nl/images/outside.jpg",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.4",
"reviewCount": "63"
},
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Free WiFi",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Breakfast included",
"value": true
}
]
}
Paste this script block into the <head> of your homepage, enclosed in <script type="application/ld+json"> and </script>.

Step 4: add via plugin if you use WordPress
If you use WordPress, two plugins partly auto-generate schema markup.
Rank Math has built-in support for LocalBusiness and Hotel schema. Under SEO settings per page you pick the type and fill in fields via a form. Rank Math adds the JSON-LD code itself.
Yoast SEO auto-generates basic schema based on your site settings. For accommodation types you need the paid version or an add-on plugin like Schema Pro.
Manual or via plugin: the end result is the same. Choose what fits your workflow.
Step 5: test with the Rich Results tool
Go to search.google.com/test/rich-results and paste your URL. The tool analyzes your page and shows:
- Which schema types were found
- Which rich results your page qualifies for
- Any errors or warnings
Fix errors immediately, because schema with errors doesn't count. Warnings are less urgent but better to fix.
An extra tool is the Schema Markup Validator at validator.schema.org. It checks if your markup is syntactically correct, regardless of whether Google makes rich results from it.
Common mistakes
Adding markup without the information visible on the page. This is the most impactful error. If you specify a 4.5 rating in your schema but that rating doesn't show anywhere on your page, Google rejects the markup. The information in your schema must match what guests read on the page. Don't include a score in your schema if it's not visible.
Using the wrong schema type. Hotels using LodgingBusiness when they could use Hotel miss specificity. B&Bs using Hotel get miscategorized for 'B&B in X' searches. Always use the most specific type that fits.
Only putting schema on the homepage. Your homepage needs LodgingBusiness or Hotel. Room pages benefit from HotelRoom markup. An FAQ page needs FAQPage. Each page can have its own schema fitting that specific page's content.
Including AggregateRating with made-up or outdated data. If your review count changes and you don't update your schema markup, the data diverges. Google detects that and can ignore the markup. Link review data dynamically to your schema if possible, so it auto-updates.
Using FAQPage markup for questions that don't answer. A FAQ question like "Why is B&B The Golden Shore the best choice?" isn't a question-and-answer in the schema sense. Google expects answers that are informative and direct. Use FAQPage for real questions guests ask: check-in times, parking, pets, breakfast.
Adding schema takes an hour, pays for years
You do it once right, test it, and then it works in the background. No monthly attention needed unless your rating data changes or your address moves. Few technical SEO tasks have such a favorable investment-to-return ratio.
What this means for AI visibility
Google AI Overviews, Perplexity and ChatGPT pull information about local businesses partly from structured data. A hotel without schema markup is harder for an AI to place than a hotel with complete LodgingBusiness markup with address, amenities and rating.
That matters because search behavior is shifting. More and more people ask an AI "what B&B in Zeeland has good breakfast and is pet-friendly" instead of typing a search and reading results themselves. The accommodations answering that question are the ones with their data correctly structured.
So schema markup isn't a technical niche optimization anymore. It's basic infrastructure for visibility in both traditional search and AI-driven searches. How you ready your whole site for those AI assistants, read in AEO and GEO for accommodations.
No schema is a choice for invisibility
If you don't do it and a competitor in your region does, Google shows them with stars and ratings and you as a plain blue link. The guest clicks on what stands out. Adding markup takes an hour. Not adding it costs you clicks every day.
How schema gives you an edge in AI answers
An AI needs 3 things about your accommodation before it dares recommend you: what you are, where you are, and what you offer. Plain page text forces the model to piece those facts together from scattered sentences. Schema markup hands them over ready-made, in a format that needs no interpretation.
The difference is concrete. When someone asks "what pet-friendly hotel in Maastricht has parking," the AI compares accommodations on those exact features. A hotel that has amenityFeature with "Pets allowed" and "Parking space" in its LodgingBusiness markup delivers that match directly. A competitor who only mentions the same facilities in running text often falls out of the running.
You don't have to write anything new. The amenities are already on your site. You just translate them into structured fields so they're readable by both Google and the AI layer on top. Same one-hour investment, with a second payout in a channel that's growing fast.
What you can do now
Start with your homepage. Determine your type (Hotel, BedAndBreakfast or LodgingBusiness), gather name, address, phone, photo URL and rating data, and add the JSON-LD code. Then test with the Rich Results tool.
Next is consistency: make sure your name and address in your schema exactly match your Google Business Profile. How you set that profile correctly, read in Google Business Profile setup for hotels and B&Bs. The ranking factors that determine how high you appear in the local map block are in local SEO for B&Bs: the ranking factors.
For the broader technical layer, including title tags and meta descriptions that align with your schema, read title tags and meta for hotels. Want an overview of all the steps that together determine your visibility, the visibility hub is where to start. And if you want to see which search queries are already bringing traffic to your site, Google Search Console for hoteliers is the starting point.
Want to know what correct markup and better visibility brings you in direct bookings, calculate it with the savings calculator. Rather have someone set this up as part of a broader SEO approach? We do that at marketing for hotels.
Frequently asked questions
What exactly is schema markup?
Does schema markup directly affect my ranking?
What schema type should a B&B use?
Do I have to do this manually or can a plugin do it?
How do I know if my schema markup is correct?
Does schema work for AI searches like ChatGPT or Google AI Overviews?
Which amenities do I put in my schema for better AI visibility?
A concrete tip in your inbox each month
Practical marketing and automation tips for small-scale accommodations. No sales talk, unsubscribe anytime.
Your email address is only used for these emails and never shared. You can unsubscribe from any email. See the privacy policy.
