BlogFindings

Hotel schema markup: 1 of 1,093 home pages declared it, and none of the 111 Hotel nodes named a check-in time

Lantad asked all 1,419 hostnames in this repository's two committed corpus seed files for robots.txt on 21 October 2026, read the home page of every host its own file permitted, and then followed the same-host links whose path named a hotel, a room, a destination or a tour. One of the 1,093 readable home pages declared a Hotel node. Across those home pages and the 134 travel pages reached from them, 111 Hotel nodes arrived from four hosts, and not one of them declared checkinTime, numberOfRooms or amenityFeature.

18 min read Lantad

The counting ran on 21 October 2026 against the 1,419 hostnames in this repository's two committed corpus seed files, with the robots.txt of every host read and evaluated first. Every figure below is from that run or from a vendor page named and dated where it is used. Nothing here measures whether an answer engine quotes a hotel more often for carrying the markup, because this run did not test that and no source read for this post claims it.

In short

  • Hotel schema markup reached 1 of the 1,093 readable home pages Lantad read on 21 October 2026, and that host was meininger-hotels.com, which declared 40 Hotel nodes on the home page alone.
  • Across those home pages and the 134 travel interior pages read the same day, 111 Hotel nodes arrived from four hosts; all 111 declared a name, an address, a telephone number and an image, and 0 declared checkinTime, numberOfRooms or amenityFeature.
  • Google's structured data gallery, carrying Last updated 2026-10-16 UTC, lists 25 features, and exactly one is a travel feature: Vacation rental, whose own documentation says the instructions are intended for sites that have already connected with a Google Technical Account Manager.
  • airbnb.com was the only host in this corpus declaring VacationRental, and of the 36 nodes Lantad read from it on 21 October 2026 none expressed containsPlace.occupancy as the QuantitativeValue that documentation requires, and none carried the minimum of 8 images it asks for.
  • 68 of the 134 travel pages read on 21 October 2026 carried no JSON-LD typed node of any kind, so the commonest state of a hotel or destination page in this corpus is not wrong markup but absent markup.
  • Airline 3 sites airbaltic, royalairmaroc, rwandair
  • Restaurant 2 sites dishoom, wagamama
  • TravelAgency 2 sites edreams, trip.com
  • Hotel 1 meininger-hotels.com, 40 nodes
  • TouristDestination 1 sites peru.travel
  • LodgingBusiness 0 the parent type of Hotel
  • TouristAttraction 0 nobody declared it
  • Trip or TouristTrip 0 nobody declared it
Travel and lodging types declared in JSON-LD on the 1,093 home pages Lantad read on 21 October 2026, counted as sites declaring at least one node of that type. Every one of the nine sites is in the travel stratum of the corpus. The zero rows are measured zeros, not missing values.

What is hotel schema markup, and does anything actually read it?

The type is real, old and specific. schema.org's own page for Hotel defines it as an establishment that provides lodging paid on a short-term basis, and gives it two parent paths that both run through the same place: Thing, Organization, LocalBusiness, LodgingBusiness, Hotel, and Thing, Place, LocalBusiness, LodgingBusiness, Hotel. The properties that make a hotel a hotel rather than a shop are inherited from LodgingBusiness one level up, and they are the obvious ones: starRating, checkinTime, checkoutTime, numberOfRooms, amenityFeature, petsAllowed. A machine reading a complete Hotel node would know how many rooms the place has, when you can get in, and whether the gym is real.

What Google documents reading is a much shorter list. Google's structured data gallery, carrying a last updated date of 2026-10-16 UTC, enumerates 25 features: Article, Breadcrumb, Carousel, Course list, Dataset, Discussion forum, Education Q&A, Employer aggregate rating, Event, Image metadata, Job posting, Local business, Math solver, Movie, Organization, Product, Profile page, Q&A, Recipe, Review snippet, Software app, Speakable, Subscription and paywalled content, Vacation rental and Video. Exactly one of those is a travel feature. There is no Hotel feature, no TouristAttraction feature and no Trip feature in that gallery, and Local business, which a hotel does qualify as, is documented in terms of opening hours, ratings and directions rather than lodging.

The one travel feature carries a gate most sites cannot pass. Google's vacation rental documentation, last updated 2026-09-08 UTC, states that its instructions are intended for sites that have already connected with a Google Technical Account Manager, and that access to Hotel Center is also needed. Sites outside that arrangement can fill in an interest form, which the same page says does not guarantee an invitation to the Early Adopters Program. So the single documented payoff for travel markup in Google Search is, on Google's own account, not generally available.

That is the honest frame for anyone weighing the work, and it is the same shape this blog keeps finding when it checks a content type against what reads it. Lantad has published that 88 of the types schema.org defines reached 626 home pages while only 16 types reach 10 million domains, and the lodging vocabulary sits far outside that common set. Whether Hotel markup belongs on a hotel page is a judgement. Whether it is there is a fact, and on pages already publishing structured data about their breadcrumbs and their logo it is cheap to check.

schema.org typeGoogle documents a resultDeclared in this corpus
HotelNo gallery feature4 hosts, 111 nodes
LodgingBusinessNo gallery feature0 hosts
VacationRentalYes, partner gated1 host, 36 nodes
AccommodationOnly inside Vacation rental1 host, 36 nodes
TouristAttractionNo gallery feature0 hosts
TouristDestinationNo gallery feature4 hosts, 7 nodes
Trip or TouristTripNo gallery feature0 hosts
The schema.org travel and lodging vocabulary set against what Google's structured data gallery documents, read from developers.google.com on 21 October 2026 where the gallery carries Last updated 2026-10-16 UTC and the vacation rental page carries Last updated 2026-09-08 UTC. The right column is Lantad's count from the same day.

How 1,093 home pages and 134 travel pages were read

Every request in this measurement was sent as LantadBot from one network location, with redirects followed, a timeout of twenty five to thirty seconds, no browser involved and no JavaScript executed. The frame is the one described on the methodology page: 1,419 hostnames across two committed seed files, 392 of them in ten platform strata and 1,027 in eight industry strata, one of which is a travel stratum of 130 hosts.

The robots pass went first. 1,138 of the 1,419 hostnames answered robots.txt in the 2xx range; of those, 44 served an HTML document at the robots.txt address and 45 parsed into no user-agent group at all, leaving 1,049 parsed files. Each was evaluated with this scanner's own parseRobotsTxt and evaluateRobots from core/src/robots.ts, for the token LantadBot against the site root: 1,035 allow this crawler there and 14 refuse it. Of the rest, 94 hostnames failed in the client before any status arrived, 114 answered 403, 48 answered 404, 13 answered 429, three each answered 401 and 503, and seven single instances of other statuses arrived. Anyone wanting the same verdict for their own file and a named token can get it from the robots.txt tester.

One ordering fault is worth stating rather than hiding, because it is the same one recorded in the Dataset schema measurement. The home page pass in this run ran before the robots verdict was computed, so nine of the fourteen hosts that refuse this crawler at the root had their home page requested once before that was known. Those nine are excluded from the 1,093 and from every count downstream, which is the right result reached in the wrong order. None of the fourteen is in the travel stratum, so no travel figure moves either way.

Selection of the travel pages was mechanical, and it is the part to argue with. From each of the 76 readable travel-stratum home pages, every same-host link was tested against one pattern looking for a hotel, resort, room, suite, accommodation, lodging, villa, apartment, hostel, campsite, stay, destination, attraction, tour, itinerary, cruise or package in the URL path, with blog, news, careers, legal, account and help paths excluded, and at most four matches kept per host. 45 hosts produced a match, for 138 candidate URLs, and every candidate was evaluated against its own site's parsed robots.txt before it was requested. 134 answered HTTP 200 with HTML, two answered 404, one answered 522 and one failed in the client.

The filter is a sieve, not a census, and it fails predictably. A chain whose room inventory sits behind a search form rather than a link is absent. So is one whose navigation names the section in a language the pattern does not match, which matters on a corpus holding hostnames in a dozen languages. Four links per host caps a global hotel group at the same depth as a single restaurant. What it does deliver is the set of pages an AI crawler would reach by following a link from the home page that says the word hotel, and that is the population every count below describes.

The order of requests behind the counts in this post, as run by Lantad on 21 October 2026, with the figure that survived each stage. The home page stage carries the caveat stated in the prose: it ran before the robots verdict was computed, and the nine root-refused hosts were removed afterwards.

Hotel appeared on one home page in 1,093

640 of the 1,093 readable home pages delivered at least one JSON-LD block this scanner could parse, and across all of them nine sites declared a travel, lodging or transport type of any kind. Every one of the nine is in the travel stratum, so no hotel, airline or tour operator markup turned up anywhere in the government, education, healthcare, news, SaaS, ecommerce or finance strata, and none in any of the ten platform strata either. That is unsurprising and it is worth having as a number rather than an assumption.

The breakdown is small enough to list in full. Three sites declared an Airline node: airbaltic.com, royalairmaroc.com and rwandair.com. Two declared TravelAgency: edreams.com and trip.com. Two declared Restaurant: dishoom.com with 13 nodes and wagamama.com with one. One declared TouristDestination, peru.travel. And one declared Hotel: meininger-hotels.com, which put 40 Hotel nodes on its home page, one per property. Nobody declared LodgingBusiness, the parent type. Nobody declared TouristAttraction, Trip or TouristTrip. Nobody declared VacationRental or Accommodation on a home page.

A single-digit count is also not a novelty on this blog, and the comparisons are the honest way to size it. Lantad has measured zero of 88 community pages declaring the discussion forum type, 1 of 242 course pages declaring Course, 5 of 374 careers pages declaring JobPosting and 21 of the 270 home pages showing a video declaring a video type. Hotel now joins that pattern. The reading that fits all of them is not that these publishers are careless: it is that markup describing what a page is about, rather than who published it, is something almost nobody deploys unless a plugin does it for them, and there is no plugin ecosystem for a hotel group's own booking platform.

The travel stratum answered worse than the corpus as a whole, which bounds the finding in the opposite direction from the one that would flatter it. Only 76 of the 130 travel hosts answered the home page with HTTP 200 and HTML. 31 answered 403, 17 failed before any status arrived, and the rest returned a 401, a 404, a 405, a 406, a 202 or a 429. Airlines and booking engines sit behind the most aggressive bot defences in the corpus, which means the sites most likely to have invested in markup are also the ones most likely to be missing from this count. 42 of the 76 that did answer carried no typed JSON-LD node at all.

StratumHome pages readableCarried JSON-LDDeclared a travel type
Travel76349
News98850
SaaS114900
Finance91510
Education98260
Healthcare93450
Government86290
Ecommerce64380
Home page response and markup by corpus stratum, Lantad, 21 October 2026, after removing the nine hosts whose robots.txt refuses this crawler at the root. The travel stratum is the only one declaring a travel type, and it is also the hardest to read.

What the 111 Hotel nodes declared, and what every one of them left out

Following the links produced more markup than the home pages did, which is the expected direction: a page about one hotel has something to describe. 19 of the 134 travel pages declared a travel type, across seven hosts: airbnb.com, kayak.com, meininger-hotels.com, spain.info, motel-one.com, kempinski.com and rwandair.com. 13 of the 19 declared a lodging type specifically. Counting the home pages and the interior pages together, 111 Hotel nodes arrived from four hosts: 90 from meininger-hotels.com, 16 from kayak.com, three from kempinski.com and two from motel-one.com.

Then the pattern inside those nodes, which is the part worth sitting with. All 111 declared a name, an address, a telephone number and an image. 106 declared a priceRange and 99 an aggregateRating. 19 declared a starRating, all of them on kayak.com or kempinski.com. Three declared a geo object, all on kempinski.com. And across all 111 nodes, from four companies whose business is selling rooms, checkinTime was declared zero times, numberOfRooms zero times and amenityFeature zero times.

Read the two lists against each other and the shape is clear. What gets declared is the contact card: who we are, where we are, what number to ring, roughly what it costs, how many stars people gave us. What does not get declared is the lodging, which is the only part the Hotel type adds over a plain LocalBusiness node. A machine reading all 111 of these nodes learns four hotel brands' phone numbers and nothing about a single room. This is the same gap Lantad measured on the parent type, where 2 of 172 home pages carried opening hours a machine could read, and on the contact properties, where 119 of 191 home pages with a clickable phone number named no telephone in their markup.

The aggregateRating count deserves one caution rather than a cheer. 99 of 111 Hotel nodes carry a rating, which makes it the second best populated property in the set, and Lantad has separately found that 14 of 33 home pages declaring a rating rated their own business. Self-rating is not what these nodes are doing, since a hotel group rating its own properties is a first-party claim about inventory it owns, but a reader should hold the distinction: a rating in markup is an assertion by the publisher, and 70 of 146 markup values Lantad checked were not on the page at all.

Two measurement limits bound every number above, and both cut the same way. Only JSON-LD was counted, so a Hotel expressed in microdata or RDFa reads here as absent; Lantad's own comparison of JSON-LD against microdata found microdata on 22 of 385 home pages and RDFa on one, so the correction is small and not nil. And no JavaScript ran, so a node injected after load is invisible here, which makes every figure a floor in delivered bytes rather than a statement about a rendered page. Presence was all that was tested: nothing here says a declaration would validate, and 117 of 612 home pages with JSON-LD carried a defect when Lantad checked that separately.

PropertyDefined onNodes of 111 declaring itHosts declaring it
nameThing1114 of 4
addressLocalBusiness1114 of 4
telephoneLocalBusiness1114 of 4
imageThing1114 of 4
priceRangeLocalBusiness1062 of 4
aggregateRatingLocalBusiness993 of 4
starRatingLodgingBusiness192 of 4
geoPlace31 of 4
checkinTimeLodgingBusiness00 of 4
numberOfRoomsLodgingBusiness00 of 4
amenityFeatureLodgingBusiness00 of 4
Property presence across the 111 Hotel nodes Lantad read on 21 October 2026, from four hosts, on home pages and on the travel pages linked from them. The property column names where schema.org defines each one. The last three rows are measured zeros.

The only site declaring Google's travel type missed three of its requirements

One host in this corpus declared VacationRental, the single travel type in Google's gallery: airbnb.com. Three of the four Airbnb pages reached by the link pattern carried 12 VacationRental nodes each, for 36 nodes, with a paired Accommodation node inside each one. Because that is the one travel type with published requirements, it is the one case where a measurement can be checked against a documented standard rather than against taste, so every node was tested against the required list on Google's own page.

All 36 clear the flat requirements. Each carries a name, an identifier, an image, a latitude, a longitude and a containsPlace, which is six of the eight required rows. Three requirements are not met on any of the 36. The required containsPlace.occupancy must be a QuantitativeValue carrying an Integer in its value property, and all 36 give occupancy as a bare integer instead, so the required occupancy.value is absent from every node. The image requirement asks for a minimum of 8 photos including at least one each of a bedroom, a bathroom and a common area, and every one of the 36 nodes carries exactly one image. And the documentation notes that for vacation rentals review.datePublished is required, while none of the 36 carries a review property at all; all 36 carry an aggregateRating instead, which is a different thing and is listed separately.

None of that is an accusation of carelessness, and the limits of what it proves should travel with it. These are search listing pages rather than individual property pages, and a node summarising a listing in a grid is a reasonable thing to build differently from a node describing one rental in full. This measurement did not look at an individual Airbnb property page, so it cannot say what that page declares. Nor does this post know whether Airbnb is inside the partner arrangement the documentation describes, which would change what the markup is for. What it can say precisely is that the markup delivered at these three URLs on 21 October 2026 does not satisfy three of the eight requirements on the page that defines the feature.

The useful generalisation is about the gap between a vocabulary and a specification. schema.org will accept occupancy as a number, because schema.org is a vocabulary and tolerant by design. Google's feature documentation will not, because it is a specification for one product. A site that validates against the first and is measured against the second passes one bar and fails the other, which is exactly the failure mode Lantad found when a valid BreadcrumbList scored zero because of its syntax. For anyone doing generative engine optimization work on a travel site, the lesson is that the validator is not the arbiter.

Required propertyExpected typeDeclared on the 36 nodes
nameText36 of 36
identifierText or PropertyValue36 of 36
latitudeNumber36 of 36
longitudeNumber36 of 36
containsPlaceAccommodation36 of 36
imageRepeated URL, minimum 8 photos36 carry exactly 1
containsPlace.occupancyQuantitativeValue36 carry a bare integer
containsPlace.occupancy.valueInteger0 of 36
The eight properties Google's vacation rental documentation marks required, read at developers.google.com on 21 October 2026 where the page carries Last updated 2026-09-08 UTC, against the 36 VacationRental nodes Lantad read from airbnb.com the same day.

What to check on your own travel site, and what this run did not measure

The first thing to check is not the markup. 68 of the 134 travel pages read for this post carried no JSON-LD typed node of any kind, and 42 of the 76 readable travel home pages carried none either, so for roughly half of this population the question of which lodging properties to declare does not arise yet. The order that follows from the measurement is therefore: confirm a crawler gets the page at all, confirm the words a guest reads are in the HTML that arrives, and only then argue about properties. The 31 travel hosts that answered this crawler with a 403 have a more expensive problem than a missing checkinTime, and it is the problem Lantad's own crawlability study is about.

Where markup already exists, the finding points at one specific omission. If a Hotel node is on the page, the properties that distinguish it from a shop are the ones nobody in this corpus declared, and they are cheap: a check-in time, a room count, an amenity list. Whether declaring them changes anything in an answer engine is not established by this run and is not claimed here. What is established is that they are absent, that a Hotel node without them carries no lodging information at all, and that the three of them are the only reason to choose Hotel over LocalBusiness in the first place.

For vacation rentals the honest advice is narrower still. The requirements on Google's page are specific enough to check yourself in a minute, the occupancy shape is the one most likely to be wrong because the vocabulary accepts the shorter form, and the eight-photo floor is a content requirement rather than a markup one. If the partner arrangement that documentation describes is not in place, the properties are still a reasonable description of a rental for any other reader, and they are still not a Google Search feature.

Three things this run did not measure, stated plainly because a count without its limits invites the wrong conclusion. It did not ask any answer engine anything, so nothing here is a claim about citations or answer engine optimization outcomes. It did not render a page, so client-side markup is uncounted and every figure is a floor. And it read at most four interior pages per host from one network location on one day, which is a thin slice of any large travel site and says nothing about the individual property pages where the richest markup would most plausibly live. The next version of this measurement should go one level deeper and read those pages directly.

  • Crawler gets the page 76 of 130 Travel hosts answering the home page with HTTP 200 and HTML. 31 answered 403 and 17 failed before any status arrived.
  • Any typed JSON-LD node 66 of 134 Travel pages carrying a parseable typed node. 68 carried none of any kind, and 42 of the 76 travel home pages carried none.
  • A travel type declared 19 of 134 Travel pages declaring any travel, lodging or transport type, across seven hosts. 13 of the 19 declared a lodging type.
  • Lodging properties filled in 0 of 111 Hotel nodes declaring checkinTime, numberOfRooms or amenityFeature. All 111 declared a name, address, telephone and image.
  • A documented feature met exactly 0 of 36 VacationRental nodes meeting all eight required rows on Google's own page. Three of the eight are unmet on every node.
What the 21 October 2026 measurement found at each stage of a travel page, in the order the counts put them. Every verdict is a count from this run, not a judgement about any one site.

Written by

Lantad

Published .

Hotel schema markup is one of the better documented corners of the schema.org vocabulary and one of the least rewarded. The vocabulary models an entire lodging business: a star rating, a check-in time, a room count, a list of amenities, each of them a property somebody sat down and defined. What reads those properties is a separate question, and the answer this measurement arrived at is narrower than the vocabulary suggests. So this post does two things. It states what Google documents as reading travel markup, from Google's own pages, and it counts what 1,093 home pages and 134 travel pages actually declared on one day.

Common questions

What is hotel schema markup?

It is the schema.org Hotel type and the properties it inherits from LodgingBusiness, used in JSON-LD to describe a lodging business to a machine. schema.org defines Hotel as an establishment that provides lodging paid on a short-term basis, with starRating, checkinTime, numberOfRooms and amenityFeature among the properties that distinguish it from a plain LocalBusiness node.

Does Google show a rich result for Hotel markup?

Not according to its own gallery. Google's structured data gallery, carrying Last updated 2026-10-16 UTC when Lantad read it on 21 October 2026, lists 25 features and includes no Hotel, TouristAttraction or Trip feature. The single travel feature is Vacation rental, and its documentation says the instructions are intended for sites that have already connected with a Google Technical Account Manager and that Hotel Center access is also needed.

How many sites actually declare it?

In this corpus, very few. 1 of the 1,093 home pages Lantad read on 21 October 2026 declared a Hotel node, and counting the 134 travel pages linked from those home pages as well, 111 Hotel nodes arrived from four hosts in total. No site in the corpus declared LodgingBusiness, TouristAttraction, Trip or TouristTrip anywhere this run looked.

Will adding a check-in time improve my AI visibility?

This measurement cannot say, and no source read for this post claims it. The run counted what pages declared and asked no answer engine anything. What it establishes is that checkinTime, numberOfRooms and amenityFeature were declared on 0 of the 111 Hotel nodes read, so a Hotel node in this corpus typically carries contact details and no lodging information at all.

See what AI can read on your site

Run a free scan and get a graded report of exactly what AI crawlers can and cannot read, with ranked fixes.