# 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.

- Canonical page: https://lantad.co/blog/hotel-schema-markup-1-of-1093-home-pages
- This file: https://lantad.co/blog/hotel-schema-markup-1-of-1093-home-pages.md
- Last substantive update: 2026-10-21

## Key facts

- **Published:** 2026-10-21
- **Category:** Findings
- **Author:** Lantad
- **Length:** 4045 words
- **Takeaway 1:** 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.
- **Takeaway 2:** 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.
- **Takeaway 3:** 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.
- **Takeaway 4:** 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.
- **Takeaway 5:** 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.

## Summary

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.

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.

## 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](https://schema.org/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](https://schema.org/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](https://developers.google.com/search/docs/appearance/structured-data/search-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](https://developers.google.com/search/docs/appearance/structured-data/vacation-rental), 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](https://lantad.co/blog/schema-markup-types-88-of-939-on-626-home-pages) while [only 16 types reach 10 million domains](https://lantad.co/blog/sixteen-schema-types-reach-ten-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](https://lantad.co/glossary/structured-data) about their breadcrumbs and their logo it is cheap to check.

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

Every request in this measurement was sent as [LantadBot](https://lantad.co/bot) 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](https://lantad.co/methodology): 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](https://lantad.co/tools/robots-txt-tester).

One ordering fault is worth stating rather than hiding, because it is the same one recorded in [the Dataset schema measurement](https://lantad.co/blog/dataset-schema-0-of-117-data-pages-declared-it). 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](https://lantad.co/glossary/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.

## 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](https://lantad.co/blog/discussion-forum-structured-data-zero-of-88), [1 of 242 course pages declaring Course](https://lantad.co/blog/course-schema-markup-1-of-242-course-pages), [5 of 374 careers pages declaring JobPosting](https://lantad.co/blog/job-posting-schema-5-of-374-careers-pages) and [21 of the 270 home pages showing a video declaring a video type](https://lantad.co/blog/video-schema-21-of-270-home-pages-declared-it). 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.

## 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](https://lantad.co/blog/localbusiness-schema-two-of-172-carried-hours), and on the contact properties, where [119 of 191 home pages with a clickable phone number named no telephone in their markup](https://lantad.co/blog/contactpoint-schema-119-of-191-named-no-telephone).

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](https://lantad.co/blog/review-schema-33-of-615-declared-a-rating). 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](https://lantad.co/blog/structured-data-for-ai-70-of-146-values-off-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](https://lantad.co/blog/json-ld-vs-microdata-22-of-385-carried-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](https://lantad.co/blog/schema-markup-validator-117-of-612-carried-a-defect) when Lantad checked that separately.

## 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](https://lantad.co/blog/schema-structured-data-syntax-decided-the-score). For anyone doing [generative engine optimization](https://lantad.co/glossary/geo) work on a travel site, the lesson is that the validator is not the arbiter.

## 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](https://lantad.co/research/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](https://lantad.co/glossary/aeo) 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.

## Questions and answers

**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.

---

Lantad measures whether AI crawlers can actually read a page: it fetches as a non-rendering
crawler, renders as a browser, and reports the gap. Free scan, one URL, no signup.

Method and weights: https://lantad.co/methodology | All pages as markdown: https://lantad.co/md | Crawler policy: https://lantad.co/bot
