What JSON-LD is, and why it's the recommended format
JSON-LD is a block of structured data, usually placed in the page's head, that's separate from the visible content a guest reads. It's not the only way to add schema.org markup (older approaches like microdata and RDFa exist too), but it's the format Google and most tooling recommend today, mainly because it's easier to write and validate without touching your visible HTML.
The core Hotel schema type, field by field
The practically important fields are name, address (nested as a PostalAddress with street, city, and postal code), telephone, starRating, amenityFeature, checkinTime and checkoutTime, image, and geo coordinates. A common mistake is leaving a field as an empty string rather than omitting it entirely, an empty checkinTime can technically validate while telling an AI engine nothing useful, which defeats the point.
Adding FAQPage markup for common guest questions
FAQPage markup uses a mainEntity list of Question and acceptedAnswer pairs. It's one of the clearest answer-first formats an AI engine can quote directly, so it's worth picking real questions guests actually ask, parking, pet policy, how flexible check-in is, distance to nearby landmarks, rather than generic filler questions nobody searches for.
Room types and rate markup, and where it gets complicated
schema.org also defines Room, HotelRoom, and Offer types for per-room-type data, but that level of detail usually requires a live rate feed to keep accurate. Most independent hotels get the large majority of the benefit from a well-populated Hotel type plus FAQPage markup, without needing a full rate integration to start.
How to validate your markup
Google's Rich Results Test and the schema.org validator are the standard tools for checking your markup. A passing result confirms the JSON-LD is valid and the expected fields are populated, a failing result usually points to a missing required field or a syntax error, both are worth fixing before assuming the markup is doing anything.
Common mistakes that quietly break AI trust
Beyond empty-string fields, the other frequent problems are stale data (an old room count or an outdated check-in time left over from a previous listing) and JSON-LD that isn't valid JSON, a single missing comma breaks the entire block. Stale or conflicting facts also connect directly to the NAP consistency problem covered in our other guide, since AI engines cross-reference your markup against what Google Business and OTAs say too.
Where structured data fits in the bigger picture
Schema markup is one piece of a fuller AI-readiness picture that also includes robots.txt, semantic HTML, and a working sitemap. Our AI crawler readiness guide covers the full checklist, this article is the deeper how-to for the structured-data piece specifically.