Skip to content
SEO for Hotelsby Webso Digital

Hotel schema and rich results: what structured data still does for a hotel in 2026, and what it never did

Schema never fed Google's price list and no longer earns stars. It tells Google and AI assistants what the property is. What to mark up and how to check.

By Daniel Stoychev, Webso Digital · 5 September 2026 · 9 min read

A grey bed in a bright hotel bedroom

Structured data on a hotel website does not put your rates into Google's hotel module, and it no longer earns a row of stars under your result. What it still does is tell Google, and the AI assistants that read the same pages, exactly what the property is: a Hotel or a BedAndBreakfast, at this address, with this check-in time, these amenities, these rooms and this price range, and that this is the official site. That consistency is the point. Here is what to mark up, what not to bother with, and how to check it.

What schema can and cannot do for a hotel now

  • The price list in the knowledge panel and the hotel module is fed by Hotel Center and the Business Profile, not by markup on your site. No amount of Offer schema puts a rate there.
  • Google's structured data documentation lists no hotel-specific rich result. The lodging types fall under LocalBusiness, which gives Google entity information, not a special display.
  • Review stars from markup on your own pages stopped showing for local businesses in 2019, because Google treats a business rating its own site as self-serving. FAQ rich results were withdrawn for almost all sites in August 2023.
  • What remains: Google understanding the entity correctly and matching it to the listing; the AI assistants reading a clean description of the property; breadcrumbs and article markup on guides; and the small conversion lift of a correct result title and description.

The right type for the property

Schema.org's LodgingBusiness has subtypes that match most UK properties: Hotel, BedAndBreakfast, Hostel, Motel, Resort. A holiday let is a VacationRental, which Schema.org added for exactly this, or a LodgingBusiness if the cottage is run more like a small hotel. A pub with rooms is two things and can say so: a type array of LodgingBusiness and BarOrPub. Pick what the property is, the same as the category on the Business Profile, because a mismatch between the two is the kind of inconsistency that makes Google trust both a little less.

The properties worth filling in

PropertyWhat to putWhy
name, address, telephone, urlExactly as on the Business Profile and the signConsistency across the web is what entity matching runs on
image, geo, hasMapThree or four real photos, the coordinates, the Maps linkAssistants and Google use them to confirm the place
checkinTime, checkoutTimeThe times you enforce, as 15:00 and 10:30Answers a question every guest asks
petsAllowed, numberOfRooms, amenityFeatureTrue or false, the count, a list of LocationFeatureSpecification itemsThe amenities are what a "dog friendly hotel" query is matched on
starRatingOnly your official AA or VisitEngland grade, with the author namedSelf-declared stars are noise; graded ones are evidence
priceRange£ to ££££, or a from-rateSets expectation without promising a rate
containsPlaceEach room type as a HotelRoom or Accommodation with bed type, occupancy, floor sizeRoom pages become entities of their own
makesOfferPackages as Offer with validFrom and validThroughLets an assistant describe the dinner, bed and breakfast deal with its dates
sameAsThe Business Profile, Tripadvisor page, Booking.com page, social profilesLinks the identity across the sources assistants read
openingHoursSpecificationReception and restaurant hours if they differStops the "are you open" guess

A minimal example

{
  "@context": "https://schema.org",
  "@type": "BedAndBreakfast",
  "@id": "https://example-inn.co.uk/#lodging",
  "name": "The Example Inn",
  "url": "https://example-inn.co.uk/",
  "telephone": "+441978000000",
  "image": ["https://example-inn.co.uk/images/exterior.jpg", "https://example-inn.co.uk/images/room-river.jpg"],
  "address": { "@type": "PostalAddress", "streetAddress": "1 Bridge Street", "addressLocality": "Llangollen", "postalCode": "LL20 8PF", "addressCountry": "GB" },
  "geo": { "@type": "GeoCoordinates", "latitude": 52.9701, "longitude": -3.1720 },
  "checkinTime": "15:00",
  "checkoutTime": "10:30",
  "petsAllowed": true,
  "numberOfRooms": 6,
  "priceRange": "££",
  "amenityFeature": [
    { "@type": "LocationFeatureSpecification", "name": "Free parking", "value": true },
    { "@type": "LocationFeatureSpecification", "name": "Breakfast included", "value": true }
  ],
  "containsPlace": [
    { "@type": "HotelRoom", "name": "River Room", "bed": { "@type": "BedDetails", "typeOfBed": "Super king", "numberOfBeds": 1 }, "occupancy": { "@type": "QuantitativeValue", "maxValue": 2 } }
  ],
  "sameAs": ["https://www.tripadvisor.co.uk/Hotel_Review-example", "https://www.booking.com/hotel/gb/example.html"]
}

Put it in a script tag of type application/ld+json on the homepage, and give each room page its own HotelRoom node that references the lodging by its @id. Keep the values identical to the Business Profile; if the check-in time changes, change it in both places the same day.

Beyond the homepage

  • Room pages: HotelRoom with bed, occupancy, floorSize and photos, plus BreadcrumbList.
  • Offers page: each package as an Offer with a price, validFrom, validThrough and the room it applies to.
  • Guides and news: Article with a real author, a published date and a modified date, so an assistant can tell what is current.
  • Questions pages: FAQPage. No rich result, but the assistants read it, and it costs nothing.
  • Every page: a self-referencing canonical, one H1, and the same name and address in the footer as in the markup.

How to check it

Google's Rich Results Test tells you whether the markup parses and which of Google's features, if any, it qualifies for; for a lodging business the honest answer is usually "valid, no rich result", and that is fine. The Schema Markup Validator checks it against Schema.org itself. Search Console's enhancements reports flag errors on pages Google has crawled. Our free audit tool reads the schema graph on any page and scores its AI-readiness, which is the modern reason to bother.

Schema is an afternoon's work on a properly built site and a permanent argument with a page builder. If your platform cannot carry a JSON-LD block per page, that is one of the reasons we rebuild rather than patch.

Questions on this topic

Will schema get my hotel's rate into Google's price list?

No. That comes from Hotel Center through a connected booking engine, or from rates entered in the Business Profile. Schema describes the property; it does not sell the room.

Should I add AggregateRating with our Google score?

Not on your own pages for your own business. Google stopped showing self-serving review stars in 2019 and treats the pattern as an attempt to game it. State the score in text if you like, and let the Business Profile carry the rating.

Is FAQ schema still worth adding?

For Google's rich results, no, they were withdrawn in 2023. For the AI assistants, which read the question and answer pairs as a clean summary of what the property offers, yes, and it costs nothing.

Which type is right for a holiday let with three cottages?

VacationRental for each cottage, or one LodgingBusiness for the business with each cottage as an Accommodation under containsPlace. Match whichever you choose to the category on the Business Profile, and keep the address and phone identical.

Find out how much of your booking revenue is leaving as commission

Send us your property name, your town and your website. You get a plain-English audit of your Google hotel listing, your booking path and the three properties above you, with a quote. No pressure, no long contract.