Hotel schema markup: structured data for Google and AI

Hotel schema markup is a short block of code on your website that states the facts about your property in a form machines read without guessing: what kind of place it is, where it is, how to reach you, when guests can check in, and what you offer. Guests never see it. It’s usually written in JSON-LD, the format Google recommends, with the schema.org vocabulary that Google, Bing, and other search engines share.
Take a made-up property, Agriturismo Le Querce, near Pistoia. Its home page says “Via dei Colli 12, Pistoia. Check-in from 3 p.m. Dogs welcome.” A guest understands that at a glance. A machine has to work out that Via dei Colli is a street and not the name of a room, that 3 p.m. is when guests can arrive, and that “dogs welcome” means pets are allowed. Markup labels each fact, so nothing is left to guess.
It’s a small job, and worth doing right. But set your expectations first: schema markup won’t put review stars or room prices next to your website on Google, and Google no longer shows FAQ drop-downs at all. Below: what markup still does for a hotel, B&B, agriturismo (a farm stay), or vacation rental, which type to use, an example to adapt, and the mistakes to avoid.
What hotel schema markup does on Google, and what it doesn’t
Search for your agriturismo and you may see a competitor down the road with a big panel: photos, prices, review stars, a button to call. It’s tempting to think their website hides some special code. In fact, that panel comes mostly from their Google Business Profile, and the prices from booking partners connected to Google.
Here is where each part of a property’s presence on Google comes from:
| On Google | Where it comes from | Does your markup help? |
|---|---|---|
| Your panel on Search and Maps | Your Google Business Profile, plus facts Google gathers elsewhere | Indirectly, if it matches |
| Room prices and booking links | Partners connected to Google, such as your booking engine | No |
| Review stars next to your website | Not shown for reviews of your own property on your own site | No |
| FAQ drop-downs under your result | Removed from Google on May 7, 2026 | No |
| Your property’s name above your result | Your home page, where WebSite markup is the strongest hint | Yes |
| Your logo in the results | Organization markup can influence it | Yes |
| Events you host, such as a harvest dinner | Event markup, on one page per event | Yes |
| AI Overviews and AI Mode | Google’s normal search index | Not required |
Prices and booking links have their own rules, and I cover free booking links in my Google Business Profile guide.
So what’s the point of structured data for hotels? Google says it uses structured data to understand what a page is about and to learn about the world, businesses included. Your pages tell guests your facts; markup gives the same facts to Google, and to any other system that reads your site, in a standard form.
Which type to use: LodgingBusiness schema and its subtypes
In schema.org, a place to stay is a LodgingBusiness. It has seven more specific types: Hotel, BedAndBreakfast, Resort, Hostel, Motel, Campground, and VacationRental. Google asks you to use the most specific type that’s true, so:
- Hotel for a hotel, BedAndBreakfast for a B&B, Resort for a resort.
- LodgingBusiness for an agriturismo. There’s no farm-stay type, so the general one is correct (or BedAndBreakfast, if that’s really how you work).
- VacationRental for a villa or apartment you rent out as a whole.
- Restaurant, in a separate block with its own hours and menu, if your restaurant is open to people who aren’t staying with you.
Don’t settle for the generic LocalBusiness or Organization when one of these fits. They tell a machine you’re a business, not a place to sleep.
A hotel JSON-LD example you can adapt
Here is the markup for Agriturismo Le Querce. Every name, address, and number in it is made up: use your own.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LodgingBusiness",
"name": "Agriturismo Le Querce",
"description": "Farm stay with a pool near Pistoia, Tuscany.",
"url": "https://www.example.com/",
"logo": "https://www.example.com/images/logo.png",
"image": [
"https://www.example.com/images/house-and-pool.jpg",
"https://www.example.com/images/double-room.jpg"
],
"telephone": "+39 0573 000000",
"email": "info@example.com",
"address": {
"@type": "PostalAddress",
"streetAddress": "Via dei Colli 12",
"addressLocality": "Pistoia",
"addressRegion": "PT",
"postalCode": "51100",
"addressCountry": "IT"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 43.96418,
"longitude": 10.93275
},
"priceRange": "€€",
"checkinTime": "15:00:00",
"checkoutTime": "10:30:00",
"numberOfRooms": 6,
"petsAllowed": true,
"availableLanguage": ["it", "en", "de"],
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Outdoor pool",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Free parking",
"value": true
}
],
"sameAs": [
"https://www.tripadvisor.com/...",
"https://www.facebook.com/..."
]
}
</script>
What each part does:
- name, address, telephone, url: copy them from your Google Business Profile, character for character, with the phone in international format (+39).
- geo: your coordinates. Google asks for at least five decimal places.
- logo and image: your logo and a few real, recent photos, at addresses Google can crawl.
- priceRange: a few € signs or a short price range. Google won’t show it if it runs to 100 characters or more.
- checkinTime, checkoutTime, numberOfRooms, petsAllowed, amenityFeature: the schema.org fields for places to stay. Google doesn’t say it uses them on a hotel’s own website, but they’re the standard way to state these facts. Add one amenity entry for each thing your page mentions (pool, parking, breakfast, Wi-Fi), and nothing it doesn’t.
- availableLanguage: the languages you speak with guests, as language codes. Worth adding when many of your guests come from abroad.
- sameAs: your pages on other sites, such as Tripadvisor, Facebook, or your Booking.com listing, so machines can tell they all describe the same place.
Left out on purpose: aggregateRating and review (see the mistakes below), and opening hours, since a hotel is open to its guests around the clock. If you run a hotel, you can add starRating for your official stars; it’s never for a review score.
The block goes on your home page, or on the page that describes the property. On the home page, also add a small WebSite block with two fields, name and url: it’s the strongest hint for the site name Google shows above your results.
How to add JSON-LD to your hotel website
- Collect the facts. Name, address, phone, coordinates, check-in times, amenities. They must match your page and your listings on Google, Booking.com, and Airbnb, word for word. A system that compares sources and finds two versions of you can’t tell which one is right.
- Write the block, or have it written. Many website builders and SEO plugins add structured data for you. Check what they produce: on the small hotel and agriturismo websites I review, it’s often a generic type with the lodging fields left empty.
- Put it in the page’s HTML. Google reads JSON-LD in the head or the body of a page, even when a script adds it after the page loads. Not every crawler runs scripts, though, so the HTML your server sends is the safer place.
- Test it. Run the page through Google’s Rich Results Test and fix every error. Warnings flag optional fields: Google says fixing them isn’t needed to be eligible for rich results. Then paste the code into the Schema Markup Validator, which also checks the schema.org fields Google’s test doesn’t cover.
- Repeat it in each language. If your site has English and Italian pages, put the markup on both, with the description in the language of the page. The facts stay identical.
- Keep it current. A new check-in time, a new pool, a room closed for the winter: update the markup when you update the page. Old markup tells machines one thing and guests another.
Not sure which schema your property needs?
Hotel schema markup mistakes that waste the work
Marking up your own reviews to get stars
Google doesn’t show review stars for a business that controls the reviews about itself. That covers reviews on your own website, whether you typed them in or show them through a Google or Facebook widget. Its review snippet guidelines also say not to aggregate ratings from other websites, so your Booking.com score doesn’t belong in your markup either. Show reviews on the page for guests to read, and expect no stars.
Marking up what the page doesn’t show
Google’s rule is simple: don’t mark up content that visitors can’t see on the page. A spa that exists only in the markup breaks it, and so does a price the page never mentions. Breaking it can lead to a manual action, which makes the page ineligible for rich results (Google says it doesn’t affect ranking).
Selling packages as events
Event markup is for events anyone can book, held at a real place, each with its own page: a harvest dinner, a concert in the courtyard, an open day at your olive mill. Google’s rules name multi-night trip packages and business hours as things that are not events. “Three nights in October” is an offer, not an event.
Adding FAQ markup for the drop-downs
Google limited FAQ rich results to government and health websites in 2023, then stopped showing them on May 7, 2026, as its Search Central changelog records. So don’t add FAQPage markup for Google. The value was always in the answers themselves: short and clear, on the page, where guests read them and Google and AI assistants can quote them.
Vacation rental schema markup
A villa or apartment rented as a whole (a vacation rental, or a holiday let in the UK) uses the VacationRental type. Google has a rich result for vacation rentals, with photos, rating, and details, but it’s limited to sites already working with a Google Technical Account Manager in Hotel Center. Others can fill in an interest form, with no guarantee of an invitation. So for a single villa, markup alone won’t switch it on: Google’s vacation rental listings only take homes run by professional property managers, connected to it through booking sites or rental software, as the Google Business Profile guide above explains.
If you manage three or more rentals, there’s one more option in the European Economic Area, which includes Italy. Google is testing a carousel, a row of cards people scroll sideways, for a page that lists at least three properties, each with its own page, marked up as a list. It’s a beta that needs an interest form, and it suits agencies and portals, not a single house.
Schema markup and AI search
When a guest asks their phone “find me a B&B in Lucca with free parking and breakfast included,” or types the same into ChatGPT, the answer comes from sources the system can read: websites, Google Business Profiles, listings, and reviews. Will schema markup for hotels put yours in that answer? Nobody can promise it. Here is what the companies themselves say:
- Google: there’s no special markup to add for AI Overviews or AI Mode. What it asks is that your markup match the visible text on the page and that your Business Profile stay up to date (AI features and your website).
- Microsoft: schema helps search engines and AI systems, such as its Copilot assistant, understand your content (Microsoft Advertising blog).
So treat markup as one part of a clear identity, next to your text, your profile, and your reviews, all saying the same thing. I explain the rest in AI search for hotels. And markup describes your pages; it doesn’t replace them. Pages that answer what guests search for, in English and in Italian, do most of the work: see how to rank a hotel in English and Italian.
Where schema markup fits
In practice, the order is: photos that make guests want the room, a fast website that takes bookings, the SEO and structured data that get it found, and reviews that confirm it. Perfect markup won’t save a page with dark, blurry photos: the guest arrives, looks, and leaves.
That’s why I handle structured data as part of the whole job, with one point of contact for your photos, website, and search. It’s part of my AI search optimization work and of the SEO I do for hotels, B&Bs, and agriturismi.


