SEO schema validator skill update
This commit is contained in:
@@ -0,0 +1,876 @@
|
||||
{
|
||||
"_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",
|
||||
"{{",
|
||||
"}}",
|
||||
"<insert",
|
||||
"[insert",
|
||||
"n/a",
|
||||
"샘플",
|
||||
"예시",
|
||||
"여기에",
|
||||
"변경필요",
|
||||
"수정필요",
|
||||
"입력필요",
|
||||
"내용입력",
|
||||
"테스트",
|
||||
"임시"
|
||||
],
|
||||
"geo": {
|
||||
"lat_min": -90.0,
|
||||
"lat_max": 90.0,
|
||||
"lon_min": -180.0,
|
||||
"lon_max": 180.0,
|
||||
"kr_lat_range": [
|
||||
33.0,
|
||||
39.0
|
||||
],
|
||||
"kr_lon_range": [
|
||||
124.0,
|
||||
132.0
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user