{ "_meta": { "version": "1.1", "scope": "Curated, hotel-focused subset of schema.org + Google rich-result requirements.", "intent": "Self-contained offline rules (the runtime cannot reach schema.org or Google). Unknown types/properties degrade to warnings, never hard errors, to avoid false positives. To support a new type or tighten a rule, edit THIS file only. [v1.1 2026-05-29: +EventVenue/ExerciseGym/SportsActivityLocation/HealthAndBeautyBusiness/DaySpa/CafeOrCoffeeShop, +LodgingReservation container, Organization/Corporation url->recommended per Google, +slogan/founder/ceo/parentOrganization/award/hasOfferCatalog/openingDate/isPartOf allowances.]", "sources": "schema.org/Hotel, schema.org/LocalBusiness, Google Search Central 'Structured data' rich-result docs (as of 2025)." }, "valid_contexts": [ "https://schema.org", "http://schema.org", "https://schema.org/", "http://schema.org/", "https://www.schema.org", "http://www.schema.org" ], "global_properties": [ "@context", "@type", "@id", "@graph", "@reverse", "name", "alternateName", "legalName", "description", "disambiguatingDescription", "url", "image", "logo", "sameAs", "identifier", "mainEntityOfPage", "additionalType", "subjectOf", "potentialAction", "inLanguage", "isPartOf" ], "known_types": { "Organization": { "required": [ "name" ], "recommended": [ "logo", "sameAs", "contactPoint", "address", "url" ], "allowed": [ "legalName", "foundingDate", "parentOrganization", "subOrganization", "brand", "telephone", "email", "founder", "numberOfEmployees", "memberOf", "hasMerchantReturnPolicy", "member", "slogan", "hasOfferCatalog" ] }, "Corporation": { "required": [ "name" ], "recommended": [ "logo", "sameAs", "address", "url" ], "allowed": [ "legalName", "foundingDate", "parentOrganization", "tickerSymbol", "telephone", "email", "brand", "founder", "ceo", "subOrganization", "memberOf", "slogan", "hasOfferCatalog" ] }, "WebSite": { "required": [ "name", "url" ], "recommended": [ "publisher", "potentialAction", "inLanguage" ], "allowed": [ "alternateName", "about", "copyrightHolder", "copyrightYear" ] }, "WebPage": { "required": [ "name" ], "recommended": [ "url", "isPartOf", "primaryImageOfPage", "breadcrumb", "datePublished", "dateModified" ], "allowed": [ "about", "mentions", "speakable", "lastReviewed", "reviewedBy", "significantLink" ] }, "LocalBusiness": { "required": [ "name", "address" ], "recommended": [ "telephone", "openingHoursSpecification", "geo", "image", "url", "priceRange", "aggregateRating" ], "allowed": [ "email", "openingHours", "paymentAccepted", "currenciesAccepted", "areaServed", "hasMap", "department", "menu", "review", "containedInPlace", "containsPlace", "amenityFeature" ] }, "Hotel": { "required": [ "name", "address" ], "recommended": [ "telephone", "image", "priceRange", "geo", "url", "starRating", "aggregateRating", "checkinTime", "checkoutTime" ], "allowed": [ "email", "amenityFeature", "petsAllowed", "numberOfRooms", "availableLanguage", "containedInPlace", "containsPlace", "makesOffer", "brand", "currenciesAccepted", "smokingAllowed", "openingHoursSpecification", "audience", "review", "parentOrganization", "openingDate", "award" ] }, "LodgingBusiness": { "required": [ "name", "address" ], "recommended": [ "telephone", "image", "priceRange", "geo", "url", "starRating", "aggregateRating", "checkinTime", "checkoutTime" ], "allowed": [ "email", "amenityFeature", "petsAllowed", "numberOfRooms", "availableLanguage", "containedInPlace", "containsPlace", "makesOffer", "currenciesAccepted", "smokingAllowed" ] }, "Resort": { "required": [ "name", "address" ], "recommended": [ "telephone", "image", "priceRange", "geo", "url", "starRating", "aggregateRating" ], "allowed": [ "email", "amenityFeature", "numberOfRooms", "containedInPlace", "containsPlace", "checkinTime", "checkoutTime" ] }, "Restaurant": { "required": [ "name", "address" ], "recommended": [ "servesCuisine", "priceRange", "telephone", "menu", "openingHoursSpecification", "image", "url", "geo", "acceptsReservations" ], "allowed": [ "email", "hasMenu", "starRating", "aggregateRating", "review", "containedInPlace", "smokingAllowed", "award" ] }, "FoodEstablishment": { "required": [ "name", "address" ], "recommended": [ "servesCuisine", "priceRange", "telephone", "menu", "openingHoursSpecification" ], "allowed": [ "email", "hasMenu", "acceptsReservations", "containedInPlace" ] }, "BarOrPub": { "required": [ "name", "address" ], "recommended": [ "telephone", "openingHoursSpecification", "priceRange", "servesCuisine" ], "allowed": [ "menu", "hasMenu", "image", "url", "containedInPlace", "acceptsReservations", "award" ] }, "FAQPage": { "required": [ "mainEntity" ], "recommended": [], "allowed": [ "about", "headline", "datePublished", "dateModified", "isPartOf" ] }, "Question": { "required": [ "name", "acceptedAnswer" ], "recommended": [], "allowed": [ "text", "answerCount", "suggestedAnswer", "upvoteCount", "author" ] }, "Answer": { "required": [ "text" ], "recommended": [], "allowed": [ "url", "upvoteCount", "author", "dateCreated" ] }, "BreadcrumbList": { "required": [ "itemListElement" ], "recommended": [], "allowed": [ "numberOfItems", "itemListOrder" ] }, "ItemList": { "required": [ "itemListElement" ], "recommended": [], "allowed": [ "numberOfItems", "itemListOrder" ] }, "ListItem": { "required": [ "position" ], "recommended": [ "item", "name" ], "allowed": [ "url", "image", "nextItem", "previousItem" ] }, "Product": { "required": [ "name" ], "recommended": [ "image", "offers", "brand", "aggregateRating", "review", "description", "sku" ], "allowed": [ "gtin", "gtin13", "gtin8", "gtin12", "mpn", "color", "material", "category", "audience", "isVariantOf", "additionalProperty", "hasMerchantReturnPolicy" ] }, "Offer": { "required": [ "price", "priceCurrency" ], "recommended": [ "availability", "url", "validFrom", "priceValidUntil" ], "allowed": [ "itemCondition", "seller", "eligibleRegion", "priceSpecification", "shippingDetails", "availabilityStarts" ] }, "AggregateOffer": { "required": [ "lowPrice", "priceCurrency" ], "recommended": [ "highPrice", "offerCount" ], "allowed": [ "offers", "availability" ] }, "Article": { "required": [ "headline" ], "recommended": [ "author", "datePublished", "image", "dateModified", "publisher" ], "allowed": [ "articleBody", "articleSection", "wordCount", "keywords", "speakable" ] }, "NewsArticle": { "required": [ "headline" ], "recommended": [ "author", "datePublished", "image", "dateModified", "publisher" ], "allowed": [ "articleBody", "dateline", "printSection" ] }, "BlogPosting": { "required": [ "headline" ], "recommended": [ "author", "datePublished", "image", "dateModified", "publisher" ], "allowed": [ "articleBody", "keywords", "wordCount" ] }, "Event": { "required": [ "name", "startDate", "location" ], "recommended": [ "endDate", "offers", "performer", "image", "eventStatus", "eventAttendanceMode", "organizer" ], "allowed": [ "doorTime", "previousStartDate", "typicalAgeRange", "maximumAttendeeCapacity" ] }, "Review": { "required": [ "reviewRating", "author" ], "recommended": [ "datePublished", "reviewBody", "itemReviewed" ], "allowed": [ "publisher", "name" ] }, "AggregateRating": { "required": [ "ratingValue" ], "recommended": [ "reviewCount", "ratingCount", "bestRating" ], "allowed": [ "worstRating", "itemReviewed" ] }, "MemberProgram": { "required": [ "name" ], "recommended": [ "hasTiers", "hostingOrganization", "url" ], "allowed": [ "description", "membershipPointsEarned" ] }, "EventVenue": { "required": [ "name" ], "recommended": [ "url", "address", "maximumAttendeeCapacity", "image" ], "allowed": [ "containedInPlace", "amenityFeature", "openingHoursSpecification", "photo", "telephone", "alternateName", "geo" ] }, "ExerciseGym": { "required": [ "name" ], "recommended": [ "url", "address", "openingHoursSpecification", "image" ], "allowed": [ "containedInPlace", "amenityFeature", "telephone", "priceRange", "alternateName" ] }, "SportsActivityLocation": { "required": [ "name" ], "recommended": [ "url", "address" ], "allowed": [ "containedInPlace", "amenityFeature", "openingHoursSpecification", "telephone", "alternateName" ] }, "HealthAndBeautyBusiness": { "required": [ "name" ], "recommended": [ "url", "address", "telephone", "openingHoursSpecification", "priceRange", "image" ], "allowed": [ "containedInPlace", "amenityFeature", "potentialAction", "parentOrganization", "geo", "alternateName" ] }, "DaySpa": { "required": [ "name" ], "recommended": [ "url", "address", "telephone", "openingHoursSpecification", "priceRange", "image" ], "allowed": [ "containedInPlace", "amenityFeature", "potentialAction", "parentOrganization", "geo", "alternateName" ] }, "CafeOrCoffeeShop": { "required": [ "name" ], "recommended": [ "url", "address", "servesCuisine", "priceRange", "telephone", "openingHoursSpecification", "image" ], "allowed": [ "menu", "hasMenu", "containedInPlace", "acceptsReservations", "alternateName" ] } }, "container_types": [ "PostalAddress", "GeoCoordinates", "GeoShape", "ImageObject", "VideoObject", "ContactPoint", "OpeningHoursSpecification", "Rating", "QuantitativeValue", "MonetaryAmount", "PriceSpecification", "Brand", "EntryPoint", "Place", "OfferCatalog", "ReserveAction", "OrderAction", "SearchAction", "ViewAction", "MeetingRoom", "Room", "HotelRoom", "Suite", "LocationFeatureSpecification", "MemberProgramTier", "MobileApplication", "WebApplication", "SoftwareApplication", "Menu", "MenuItem", "MenuSection", "Country", "AdministrativeArea", "Duration", "PropertyValue", "Person", "Audience", "Language", "LodgingReservation" ], "value_formats": { "url_props": [ "url", "logo", "sameAs", "image", "contentUrl", "thumbnailUrl", "target", "urlTemplate", "installUrl", "menu", "hasMap", "downloadUrl", "embedUrl" ], "date_props": [ "datePublished", "dateModified", "dateCreated", "startDate", "endDate", "validFrom", "validThrough", "priceValidUntil", "foundingDate", "uploadDate", "availabilityStarts", "availabilityEnds", "lastReviewed", "previousStartDate" ], "lang_props": [ "inLanguage", "availableLanguage" ], "currency_props": [ "priceCurrency", "currenciesAccepted" ], "number_props": [ "price", "lowPrice", "highPrice", "ratingValue", "reviewCount", "ratingCount", "bestRating", "worstRating", "position", "numberOfRooms", "maxValue", "minValue", "offerCount" ] }, "valid_currencies": [ "KRW", "USD", "EUR", "JPY", "CNY", "GBP", "HKD", "SGD", "THB", "AUD", "CAD", "CHF", "TWD", "MYR", "PHP", "VND", "IDR", "INR" ], "valid_language_codes": [ "ko", "en", "ja", "zh", "zh-CN", "zh-TW", "zh-Hans", "zh-Hant", "ko-KR", "en-US", "en-GB", "ja-JP", "fr", "de", "es", "ru", "th", "vi", "id", "ms" ], "placeholder_tokens": [ "lorem ipsum", "lorem", "ipsum", "dolor sit", "todo", "tbd", "fixme", "xxx", "yyy", "zzz", "placeholder", "insert here", "insert text", "example.com", "your-domain", "yourdomain", "changeme", "sample text", "{{", "}}", "