Which AI systems act on schema markup, and how?
Schema markup matters because it replaces guesswork with an explicit, machine-readable description: without it, AI systems have to infer your property type, location and attributes from unstructured text, which is unreliable. Schema.org markup is code added to your website that tells AI systems and search engines directly what your page describes.
For AI search systems that browse the web (Perplexity, ChatGPT with browsing, Google AI Overview), schema markup is a high-priority signal. For AI systems operating from training data, schema markup on widely-crawled web pages increases the accuracy and completeness of what those systems learned about your property.
Which schema.org type should a hotel use?
Which type to use depends on property type: Hotel or BedAndBreakfast for hotels, B&Bs and guesthouses, Accommodation (or more specifically Apartment, House, or Suite) for vacation rentals and apartments, and Resort for resort properties.
For hotels, B&Bs and guesthouses: use https://schema.org/Hotel or https://schema.org/BedAndBreakfast. Both extend LodgingBusiness.
For vacation rentals and apartments: use https://schema.org/Accommodation or more specifically https://schema.org/Apartment, https://schema.org/House, or https://schema.org/Suite depending on property type.
For resort properties: https://schema.org/Resort.
What does the minimum viable hotel schema block look like?
The minimum viable hotel schema block includes six fields: name, address, geographic coordinates, telephone, website URL and star rating.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "The Harbour House Hotel",
"address": {
"@type": "PostalAddress",
"streetAddress": "14 Harbour Road",
"addressLocality": "Porto",
"addressRegion": "Porto District",
"postalCode": "4050-001",
"addressCountry": "PT"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 41.1496,
"longitude": -8.6109
},
"telephone": "+351 22 123 4567",
"url": "https://www.harbourhousehotel.com",
"starRating": {
"@type": "Rating",
"ratingValue": "4"
}
}
This block goes inside a <script type="application/ld+json"> tag in your page’s <head>.
What should you add for a complete schema implementation?
A complete implementation adds six more fields to the minimum block: amenities, room count, price range, a description, an image, and check-in and check-out times.
Amenities: Use amenityFeature with LocationFeatureSpecification entries. Example:
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "Free WiFi", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Outdoor Pool", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Restaurant", "value": true }
]
Room count: "numberOfRooms": 24
Price range: "priceRange": "€€" (use currency symbols as a rough indicator)
Description: "description": "A 24-room boutique hotel in the Ribeira district of Porto, with river views from most rooms and a rooftop terrace. Independently owned since 1987." Keep this to 2-3 sentences. This is what AI systems use when they describe your property.
Image: "image": "https://www.harbourhousehotel.com/images/hotel-exterior.jpg"
Check-in/check-out times: "checkinTime": "15:00", "checkoutTime": "11:00"
Should individual room pages have their own schema markup?
Yes: if your website has individual room type pages, add Accommodation schema to each one, with the room name, description, number of beds, bed types, amenities and price range. This gives AI systems rich attribute data for queries that specify room type.
How do you check that your schema markup implementation is correct?
Validate it using Google’s Rich Results Test (search “Google rich results test”) after adding schema markup. It will show you any errors or missing fields and confirm what Google’s systems can read from your page.
See also: What is llms.txt for hotels | Get found: the technical playbook