Schema markup is a small block of code that tells search engines what your hotel is: its name, address, phone, check-in time, amenities and rooms. It’s worth adding. But a lot of the advice about it is out of date. Some rich results that hotel guides still promise were removed in 2023 and 2026, and some popular tips break Google’s rules. This guide covers which schema.org types fit a hotel website, what Google actually does with them today, and how to add and test them.
We build hotel websites through our hotel website design service, so weigh that. Every fact below was checked against schema.org and Google’s own Search Central and Hotel Center documentation in October 2026.
Short answer: mark up your property with the schema.org Hotel type (or the closest LodgingBusiness subtype), with at least the name and address Google requires, plus phone, URL, check-in and check-out times, amenities and price range. Google treats it as local business data. Don’t add review stars for your own hotel: Google doesn’t show them for self-serving reviews. FAQ rich results stopped appearing in May 2026, and there’s no special markup for AI Overviews. Room prices only matter if you send them to Google Hotels, which runs through Hotel Center, not schema alone.
What Google Does With Hotel Markup in 2026
As of October 2026, from Google Search Central and Google Hotels documentation:
| Markup | What Google does with it |
|---|---|
| Hotel (local business) | Supported for business details |
| Review stars, own hotel | Not shown (self-serving) |
| FAQPage | Rich result gone since May 2026 |
| HowTo | Rich result gone since 2023 |
| Room offers and prices | Google Hotels price checks |
| Host carousel | Beta, limited countries |
| AI Overviews | No special markup needed |
Sources: Local business structured data, Review snippet, Search Central updates, HowTo and FAQ changes, Hotel price structured data, Carousels (beta), AI features and your website.
What Schema Markup Is and Why Your Property Needs It
Schema markup, also called structured data, uses a shared vocabulary published at schema.org. Search engines read it to understand a page. Google says it uses structured data it finds on the web “to understand the content of the page” (source).
Without markup, Google reads your page text and works out the facts itself. With markup, you state them in a fixed format: this is a hotel, here is its address, check-in starts at 3pm, there is a pool.
Google supports three formats: JSON-LD, Microdata and RDFa. It recommends JSON-LD, but all three are fine for Google Search (source). JSON-LD is a separate script block, so it’s the easiest to add and maintain.
Two limits are worth knowing before you start. First, Google’s docs on its own behavior come before schema.org’s: schema.org lists far more types and properties than Google uses (source). Second, valid markup doesn’t guarantee anything. Google says it doesn’t guarantee a rich result will show, even when the markup is correct (source).
What Rich Results Look Like in Practice
A rich result is a search result with extra features beyond the blue link and snippet. Google’s search gallery lists the ones it supports today. For a hotel’s own website, the relevant one is the local business feature: business details shown in the Google knowledge panel, including things like open hours and ratings (source).
There is no hotel-specific rich result for your own website in that gallery. Price and availability shown for hotels in Google come from Google Hotels, which gets rates through Hotel Center and connectivity partners (source). Review stars come from Google’s own reviews and other sites, not from markup you add about yourself (more on that below).
Two hotel-related features exist, but neither fits a typical independent hotel site. The host carousel is a beta that uses ItemList with types such as Hotel and VacationRental. It’s for summary pages that list several properties, and it’s only available in EEA countries, Türkiye and South Africa (source). Vacation rental markup is limited to sites working with a Google Technical Account Manager and with Hotel Center access (source).
So the honest picture is this. Hotel markup helps Google understand and confirm your property’s details. It can feed the local business feature. It won’t, on its own, turn your listing into a card with stars, prices and a booking button.
Ranking is a separate question. Google’s docs describe structured data as a way to understand pages and to be eligible for rich results. Its policy page says a structured data manual action removes rich result eligibility but “doesn’t affect how the page ranks” (source). None of the Google pages we checked call schema a ranking factor.
Why Schema Matters More in 2026: AI Overviews and Direct Bookings
A lot of 2026 advice says AI Overviews read your amenities from schema, and that properties without it are left out. Google says otherwise. Its guidance for AI Overviews and AI Mode says there are “no additional requirements” to appear, and “there’s also no special schema.org structured data that you need to add” (source).
Google’s AI optimization guide says the same. Structured data isn’t required for generative AI search. But Google still suggests using it, because it helps with eligibility for rich results (source).
What Google does ask for in AI features is consistency. It says to make sure your structured data matches the visible text on the page, and to keep your Business Profile information up to date (source). For a hotel, that means the pool, the pet policy and the check-in time should be written plainly on the page. Markup then repeats those facts in a fixed format. It doesn’t replace them.
So schema in 2026 is less about a new trick and more about clean, matching data. Your website text, your markup and your Business Profile should all say the same thing.
The OTA Schema Advantage — and How to Close the Gap
OTAs show up with prices and booking links in Google’s hotel results. That isn’t because their schema is better than yours. Google Hotels gets rates through Hotel Center. The Hotel Center starter guide says Google can show your property’s address, phone and website, and can show direct booking links. Free booking links and hotel ads both run through Hotel Center (source).
To send rates, most hotels use a connectivity partner. Google lists OTAs, content management systems, property management systems, channel managers and booking engines among them (source). So the real gap is usually a rate connection, not a missing tag. Ask your booking engine or channel manager whether they connect you to Google free booking links.
Schema still plays a part here. Google Hotels uses schema.org Hotel and HotelRoom markup on your pages for price accuracy checks: it compares the prices in your markup with the prices it receives (source). Those values must match what guests see on the page. For that use only, Google recommends Microdata and calls JSON-LD deprecated. Google notes this doesn’t affect rich results in Search (source).
Want a hotel website built with schema markup from day one? See our hotel website design service.
Schema Types Every Hotel Needs
Most hotel sites need two kinds of markup: one block for the property, and, if you sell rooms on your site, markup for rooms and their offers. The schema.org hotels guide models hotels with three objects: the lodging business, the accommodation (the rooms), and the offer to rent a room (source). Review and FAQ markup are covered below too, mostly so you know what not to rely on.
LodgingBusiness Schema
On schema.org, LodgingBusiness is a type of LocalBusiness. It has more specific subtypes: BedAndBreakfast, Campground, Hostel, Hotel, Motel, Resort and VacationRental (source). Google asks you to use the most specific type that fits (source). So a hotel or inn uses Hotel, a B&B uses BedAndBreakfast, and a resort uses Resort (source).
Google’s local business markup has only two required properties: name and address (source). These are worth adding as well:
telephone: Google recommends including the country code and area codeurl: the page about this propertygeo: latitude and longitude, with at least 5 decimal placespriceRange: a short text such as “$$$”, under 100 characterscheckinTimeandcheckoutTime: the earliest check-in and latest check-out timeamenityFeature: amenities, each as aLocationFeatureSpecificationwith a name and a valuepetsAllowed: true, false or a short textnumberOfRooms: the room countstarRating: an official classification, with the rating body as author
The first four come from Google’s local business guide (source). The hotel properties come from schema.org: checkinTime, amenityFeature, petsAllowed, numberOfRooms and starRating. Note the spelling: schema.org uses checkinTime, not checkInTime. Property names are case-sensitive.
Two details trip people up. The schema.org amenityFeature definition says it makes no statement about whether a feature is included in the price or costs extra (source). Say so on the page if parking or breakfast costs extra. And starRating is for an official rating from a classification body, not a guest review score (source).
Here is an example for a made-up property. Replace every value with your own, and only include what your page actually shows:
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "Example Inn",
"url": "https://www.example.com/",
"telephone": "+1-555-010-0100",
"address": {
"@type": "PostalAddress",
"streetAddress": "100 Example Street",
"addressLocality": "Example City",
"addressRegion": "SC",
"postalCode": "00000",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 32.00000,
"longitude": -80.00000
},
"priceRange": "$$$",
"checkinTime": "15:00:00",
"checkoutTime": "11:00:00",
"petsAllowed": true,
"numberOfRooms": 24,
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "Outdoor pool", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Free parking", "value": true }
]
}
It goes inside a <script type="application/ld+json"> tag on the page it describes. Google asks that markup sits on the page about that business, not on an unrelated page (source).
HotelRoom Schema
HotelRoom describes a room or room type. schema.org gives it properties such as bed, for the bed type, and occupancy, for how many people it sleeps (source). Room-level amenities use the same amenityFeature pattern as the hotel (source).
Prices don’t go on the room. The schema.org hotels guide is clear that prices and terms belong to an offer, not to the hotel or the room. To attach an offer, the room is typed as both HotelRoom and Product (source). The guide also says:
- Link a hotel to its rooms with
containsPlace, or a room to its hotel withcontainedInPlace - Link a hotel to its offers with
makesOffer - Link a room to its offer with
offers - Add
businessFunctionwith the value LeaseOut to rental offers, so the offer reads as a rental, not a sale
A simplified room with a nightly rate, following that guide:
{
"@context": "https://schema.org",
"@type": ["HotelRoom", "Product"],
"name": "King Room",
"bed": "One king bed",
"occupancy": { "@type": "QuantitativeValue", "maxValue": 2 },
"offers": {
"@type": "Offer",
"businessFunction": "http://purl.org/goodrelations/v1#LeaseOut",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": 199.00,
"priceCurrency": "USD",
"unitCode": "DAY"
}
}
}
Is room markup worth it? It’s there for completeness and for Google Hotels price checks, if you’re connected to Hotel Center. Google’s Search gallery has no rich result for hotel rooms on a hotel’s own site (source). Rates change daily, so only mark up prices your booking engine keeps in sync with the page. A stale price in markup is worse than none: Google asks for up-to-date information (source).
AggregateRating Schema
This is the markup most hotel guides get wrong. Google’s review snippet rules say that if a business controls the reviews about itself, its pages using LocalBusiness or any Organization markup can’t get the star review feature. That includes reviews you embed from a third-party widget, such as Google or Facebook reviews (source). A Hotel is a LocalBusiness, so your own hotel page falls under this rule.
Google also says not to aggregate reviews or ratings from other websites, and any rating you mark up must be visible on the page (source). Its local business guide recommends aggregateRating and review only for sites that capture reviews about other local businesses (source).
So leave aggregateRating off your hotel markup. Show real guest reviews on the page if you like, because guests read them. Just don’t expect stars in Search from your own markup. And don’t confuse this with starRating: an official star classification is not a review, and schema.org keeps the two separate (source).
FAQPage Schema
FAQ rich results are gone. In 2023 Google limited them to well-known, authoritative government and health sites (source). Then it removed them: the feature stopped appearing in Google Search from May 7, 2026, and Google removed the documentation in June 2026 (source).
That doesn’t make the questions useless. A clear FAQ on your page still answers what guests ask before they book: check-in time, parking, pets, cancellation, breakfast. Keep that content visible on the page. If FAQPage markup is already on your site, you don’t need to rush to remove it. Google said in 2023 that structured data it doesn’t use “does not cause problems for Search” (source). Just don’t add it expecting a result.
FAQ isn’t the only change. In June 2025 Google phased out several more search features, including Book Actions, and said the update wouldn’t affect how pages are ranked (source). HowTo rich results were fully removed in 2023 (source). Before following any schema guide, check it against Google’s current search gallery.
How to Implement Schema Without Writing Code
You have three routes. Which one fits depends on how your site is built and who looks after it. Some booking engines and website platforms add basic markup on their own, so test your site first (see the testing section) before adding more. Two blocks describing the same hotel in different ways cause confusion.
Option 1: WordPress Plugins (Recommended for Most Properties)
If your site runs on a CMS, Google notes you may be able to use a plugin to add structured data (source). On WordPress, two plugins document local business markup on their own sites:
| Plugin | What its docs say |
|---|---|
| Yoast Local SEO | Turns address and hours into schema |
| Rank Math | Local SEO module, business type setting |
Sources: Yoast Local SEO, Rank Math Local SEO.
Yoast says its Local SEO plugin converts your address and hours into schema markup and lets you define your business type (source). Rank Math’s Local SEO settings include a business type for your homepage and about or contact pages. Its multiple-locations option is a PRO feature (source).
Whichever you use, pick the most specific business type the plugin offers, then run the page through the Rich Results Test. Plugins cover the property block well. Room offers usually need your booking engine or a developer.
Option 2: Google’s Structured Data Markup Helper
The Markup Helper lets you load a page, highlight items such as the name and address, and tag them. It then gives you markup to paste into your page, in JSON-LD by default (source).
There’s a catch for hotels. Its website data types include Local Businesses and Restaurants, but there is no hotel type (source). The workaround is to tag the page as a local business, then change the @type in the output from LocalBusiness to Hotel before you paste it in. Note that the old Structured Data Testing Tool address is not the Markup Helper; that tool was moved to the Schema Markup Validator (source).
You’ll still need access to your site’s HTML to paste the code. If you don’t have it, ask whoever manages your site.
Option 3: Manual JSON-LD (For Properties with a Developer)
If a developer looks after your site, give them the examples above as a starting point. JSON-LD is Google’s recommended format (source). It sits in its own script block and doesn’t change what guests see.
Ask them to build the markup from the same data the page shows, so the two can’t drift apart. If hours or check-in times come from a database, the markup should read from it too. Google asks for markup that is complete and accurate over markup that tries to fill every property: fewer recommended properties, done right, are better (source).
How to Test and Validate Your Schema
Google’s testing page points to two tools, and Search Console adds a third (source, source):
| Tool | Use it for |
|---|---|
| Rich Results Test | What Google can use |
| Schema Markup Validator | Any schema.org markup |
| URL Inspection | How Google sees the live page |
The Rich Results Test is at search.google.com/test/rich-results. Google suggests starting there. The Schema Markup Validator checks schema.org markup in general, including types Google doesn’t use (source). A hotel page can pass the validator and still show nothing special in the Rich Results Test. That’s normal, since most hotel properties don’t map to a Google rich result.
A simple routine:
- Test the live page in the Rich Results Test and fix any errors.
- Check the page with the URL Inspection tool in Search Console.
- Request a recrawl, and keep your sitemap submitted.
- Compare clicks before and after in the Search Console Performance report.
Google says crawling and indexing after a change “may take several days” (source). Its Markup Helper help page says it can take a few weeks for Google to find new page code (source). The before-and-after check in the Performance report is the measurement Google itself suggests (source).
Common Schema Mistakes Independent Hotels Make
Using a generic type. LocalBusiness alone is valid, but Google asks for the most specific type (source). Use Hotel, BedAndBreakfast, Motel or Resort as fits.
Marking up your own reviews. As covered above, self-serving review stars aren’t shown for local businesses. Leave aggregateRating off.
Marking up things guests can’t see. Google’s policies say not to mark up content that isn’t visible to readers (source). If the markup says there’s a pool, the page should say so too.
Letting markup go stale. Hours, check-in times and policies change. Google asks for up-to-date information (source). Update the markup whenever you update the page.
Wrong property names. checkInTime with a capital I isn’t a schema.org property. The correct names are checkinTime and checkoutTime (source).
Blocking the page. Google can’t read markup on pages blocked by robots.txt or marked noindex (source). Booking engine pages on a separate domain are a common blind spot.
Breaking the rules has a cost. A structured data manual action removes the page’s eligibility for rich results. Google says it doesn’t affect ranking (source).
Related Posts
- Technical SEO for hotel websites: crawlability, schema and duplicate content
- Google AI Overviews for hotels: staying visible in AI answers
- Google Business Profile for hotels: the profile your markup should match
- Google Hotel Ads: getting your rates into Google’s hotel results
Frequently Asked Questions
What types of schema markup are most beneficial for hotel websites?
The Hotel type (or the closest LodgingBusiness subtype) for the property, with name, address, phone, URL, geo, price range, check-in and check-out times and amenities. If you’re connected to Google Hotels, add HotelRoom with offers for price checks. Skip aggregateRating for your own hotel, and don’t expect FAQ results.
Does schema markup improve my hotel’s search rankings?
Google doesn’t describe it as a ranking factor in any of the docs we checked. It says structured data helps it understand a page and makes the page eligible for rich results. Its policies say even a structured data manual action doesn’t affect ranking.
Do I need schema markup to appear in Google AI Overviews?
No. Google says there’s no special schema.org markup needed for AI Overviews or AI Mode. It does ask that any structured data you have matches the visible text, and that your Business Profile is kept up to date.
Can I show star ratings from my guest reviews in Google with schema?
Not from your own site. Google treats reviews a business controls about itself as self-serving, and pages with LocalBusiness markup aren’t eligible for review stars. That includes embedded Google or Facebook review widgets.
Is FAQ schema still worth adding to a hotel website?
Not for search results. FAQ rich results stopped appearing in Google Search from May 7, 2026. A visible FAQ section is still useful to guests. Markup already on the site won’t cause problems.
Will schema work if my hotel website isn’t on WordPress?
Yes. You can generate markup with Google’s Structured Data Markup Helper and change the type to Hotel, or have a developer add JSON-LD to your page templates. Test the result in the Rich Results Test either way.
Set It Up Once, Benefit for Years
Hotel schema is mostly a one-time setup with light upkeep. Add a correct Hotel block, keep it in step with the page and your Business Profile, and test it after every redesign. It won’t win you OTA-style result cards on its own, but it gives Google clean, consistent facts about your property.
Three actions to take this week:
- Run your homepage through the Rich Results Test and note what it finds.
- Add or fix the
Hotelblock: name, address, phone, check-in and check-out times, amenities. - Ask your booking engine whether it connects you to Google free booking links through Hotel Center.
Markup is only as good as the page behind it. A hotel website with clear room pages, visible policies and a booking engine Google can reach gives that markup something real to describe. Get in touch to talk it through.