En esta página, se proporciona una referencia para agregar lenguajes de marcado de datos estructurados a los datos de precios de tus hoteles.
Descripción general
Los datos estructurados de precios de hoteles se usan para explicar, validar y mostrar en detalle los precios de hoteles que se indican en tu sitio web, independientemente de la interfaz de usuario. Esto también incluye el precio base, las tarifas, las habitaciones, las comisiones y los impuestos, y los campos relacionados con los precios.
Google recomienda a los socios que anoten sus páginas web con datos estructurados estandarizados que los rastreadores puedan leer, proporcionados por schema.org, para extraer los precios de sus páginas web con precisión.
Esto permite escalar las validaciones de precisión del precio mejorando la confiabilidad de los rastreadores. El beneficio para ti es un aumento en la cantidad de validaciones de precisión del precio y la capacidad de depurar problemas de precisión del precio directamente, además de tener una puntuación de precisión del precio coherente.
Si aún no conoces los datos estructurados, obtén más información sobre el vocabulario y el formato de los datos estructurados.
Google Hoteles recomienda el formato JSON-LD para anotar tus páginas web. Consulta Formatos admitidos para obtener más información sobre otros formatos aceptables. En esta documentación, se proporciona contenido de referencia detallado específico para la implementación de datos estructurados en Hoteles.
Los datos estructurados de Hotel se usan para anotar campos específicos de hoteles en tu página web. Los datos estructurados de Hotel tienen las siguientes propiedades:
Propiedades
nameyaddressPropiedad
makesOfferPropiedad
Hotel priceSpecificationPropiedad
hasMerchantReturnPolicyPropiedad
eligibleCustomerType
Los datos estructurados de HotelRoom se usan para anotar campos específicos de la habitación en tu página web.
Los datos estructurados de HotelRoom tienen las siguientes propiedades:
Propiedad
offersPropiedades
bedyoccupancyPropiedad
HotelRoom priceSpecificationPropiedad
includesObjectPropiedad
availabilityPropiedad
amenityFeature
Datos estructurados de hoteles
Propiedades name y address
Las propiedades name y address se usan para anotar el nombre y la ubicación del hotel. A continuación, se indican las propiedades name y address:
"@type": "Hotel",
"name": "hotel-name",
"identifier": "hotel-id-1234",
"address": {
"@type": "PostalAddress",
"addressCountry": "XX",
"addressLocality": "City Name",
"addressRegion": "State Name",
"postalCode": "01234",
"streetAddress": "1234 Main St."
},
Sintaxis
Las propiedades name y address usan la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "hotel-name",
"identifier": "hotel-id-1234",
"address": {
"@type": "PostalAddress",
"addressCountry": "XX",
"addressLocality": "City Name",
"addressRegion": "State Name",
"postalCode": "01234",
"streetAddress": "1234 Main St."
},
"makesOffer": {
"@type": ["Offer", "LodgingReservation"]
...
}
}
Propiedades
A continuación, se indican las propiedades name y address:
| Propiedad | ¿Obligatorio? | Tipo | Descripción |
|---|---|---|---|
| Hotel.name | Required | string | El nombre del hotel |
| Hotel.identifier | Required | string | Es el ID de hotel del socio. El identificador debe ser una cadena única por hotel y debe coincidir exactamente con la cadena que se usa en el feed de precios. |
| Hotel.address | Optional | PostalAddress | Dirección o ubicación del hotel. |
Ejemplos
Nombre y dirección
A continuación, se muestra un ejemplo básico para agregar anotaciones name y address:
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "Mountain Hotel",
"identifier": "hotel-id-1234",
"address": {
"@type": "PostalAddress",
"addressCountry": "AT",
"addressLocality": "Innsbruck",
"addressRegion": "Tyrol",
"postalCode": "6020",
"streetAddress": "Technikerstrasse 21"
},
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD"
}
}
}
makesOffer propiedad
Las anotaciones makesOffer se usan para marcar tus itinerarios de hoteles.
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "YYYY-MM-DD[THH:mm:ss]",
"checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
"availability": "https://schema.org/InStock",
...
}
Sintaxis
La propiedad makesOffer usa la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "hotel-name",
"identifier": "hotel-id-1234",
"address": { ... },
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "YYYY-MM-DD[THH:mm:ss]",
"checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
"availability": "https://schema.org/InStock",
"priceSpecification": { ... }
}
}
Propiedades
Las siguientes son las propiedades de makesOffer:
| Propiedad | ¿Obligatorio? | Tipo | Descripción |
|---|---|---|---|
| makesOffer | Required | Offer and LodgingReservation | Son las ofertas de hotel para el itinerario determinado.
La propiedad |
| LodgingReservation.checkinTime | Required | DateTime | Es la hora de registro en la zona horaria del usuario. Si no se menciona tu zona horaria, se considera la zona horaria del hotel. |
| LodgingReservation.checkoutTime | Required | DateTime | Es la hora de salida en la zona horaria del usuario. Si no se menciona tu zona horaria, se considera la zona horaria del hotel. |
Ejemplo
makesOffer
A continuación, se muestra un ejemplo básico para anotar tus ofertas de hoteles. Puedes especificar varias ofertas para un itinerario, pero debes especificar primero la tarifa que muestra Google y, luego, otras tarifas. El importe del precio especificado incluye todos los impuestos aplicables.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "Mountain Hotel",
"identifier": "hotel-id-1234",
"address": { ... },
"makesOffer": [
{
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD"
}
},
{
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1200.74,
"priceCurrency": "USD"
}
}
]
}
Hotel priceSpecification propiedad
Esta propiedad se usa para anotar la información de precios de tu hotel o habitaciones de hotel. Hay dos propiedades adicionales que son obligatorias para anotar tus precios e impuestos. Debes usar CompoundPriceSpecification para especificar la información total de precios, como la tarifa base, los impuestos y los descuentos.
Usa UnitPriceSpecification para especificar impuestos adicionales o tipos especiales de cargos, como ResortFee, GenericTax y ServiceFee. La propiedad priceSpecification se incluye con la propiedad Offer.
{
...
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": "float",
"priceCurrency": "currency",
"priceComponent": [
{
"@type": "UnitPriceSpecification",
"name": "GenericTax",
"price": "float",
"priceCurrency": "currency"
},
...
]
}
}
Sintaxis
La propiedad Hotel priceSpecification usa la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
"@type": "Hotel",
...
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
...
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": "float",
"priceCurrency": "currency",
"priceComponent": [
{
"@type": "UnitPriceSpecification",
"name": "",
"price": "float",
"priceCurrency": "currency"
},
{
"@type": "UnitPriceSpecification",
"name": "GenericTax",
"price": "float",
"priceCurrency": "currency",
"priceComponentType": "GenericTax",
"potentialAction": {
"@type": "https://schema.org/PayAction",
"recipient": {
"@type": "OnlineBusiness",
"name": "name-of-the-business"
}
}
},
{
"@type": "UnitPriceSpecification",
"name": "Discount",
"price": "float",
"priceCurrency": "currency",
"priceComponentType": "Discount"
}
]
}
}
}
Microdatos
<div itemscope itemtype="https://schema.org/Hotel">
<meta itemprop="name" content="hotel-name"/>
...
<div itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation" itemprop="makesOffer">
...
<div itemscope itemtype="https://schema.org/CompoundPriceSpecification" itemprop="priceSpecification">
<meta itemprop="price" content="float"/>
<meta itemprop="priceCurrency" content="currency"/>
<div itemscope itemtype="https://schema.org/UnitPriceSpecification" itemprop="priceComponent">
<meta itemprop="name" content=""/>
<meta itemprop="price" content="float"/>
<meta itemprop="priceCurrency" content="currency"/>
</div>
<div itemscope itemtype="https://schema.org/UnitPriceSpecification" itemprop="priceComponent">
<meta itemprop="name" content="GenericTax" />
<meta itemprop="price" content="float"/>
<meta itemprop="priceCurrency" content="currency"/>
<meta itemprop="priceComponentType" content="GenericTax"/>
</div>
<div itemscope itemtype="https://schema.org/UnitPriceSpecification" itemprop="priceComponent">
<meta itemprop="name" content="Discount"/>
<meta itemprop="price" content="float"/>
<meta itemprop="priceCurrency" content="currency"/>
<meta itemprop="priceComponentType" content="Discount"/>
</div>
</div>
</div>
</div>
Propiedades
Las siguientes son las propiedades de hotel priceSpecification:
| Propiedad | ¿Obligatorio? | Tipo | Descripción |
|---|---|---|---|
| Hotel.Offer.priceSpecification.price | Required | float | El precio total del hotel, incluidos los impuestos y las comisiones La tarifa de Google siempre debe estar anotada en tu página de destino junto con los detalles completos de la tarifa. Anotar los detalles de las tarifas te permite completar las verificaciones de precisión del precio. Google acepta precios a nivel del hotel y de la habitación. |
| Hotel.Offer.priceSpecification.priceCurrency | Required | currency | Es un código de moneda de tres letras para el precio especificado. P. ej.: "USD"
. |
| Hotel.Offer.priceSpecification.priceComponent | Optional | UnitPriceSpecification[] | Es el desglose del precio total, incluidos los impuestos y las comisiones del hotel. Existen dos tipos de datos estructurados de precios:
Debes establecer los valores en la propiedad |
| Hotel.Offer.priceSpecification.priceComponent. potentialAction | Optional | PayAction | Es el punto de pago del hotel.Los flujos de pago del hotel incluyen precios que se cobran durante la hora de salida en el sitio de reservas y en el hotel durante el registro de entrada. Debes usar la propiedad Google admite los siguientes dos parámetros de configuración para el destinatario de
|
Ejemplos
Ejemplos de JSON-LD
Precio
A continuación, se muestra un ejemplo básico de cómo agregar datos estructurados de precio a tu página web. Se pueden incluir varias ofertas a nivel del hotel en la propiedad makesOffer.
Los tipos de PostalAddress, como addressCountry, postalCode, streetAddress y otros campos, son obligatorios si eliges especificar la propiedad address. La tarifa que muestra Google debe aparecer primero en la propiedad makesOffer. El importe del precio especificado incluye todos los impuestos aplicables.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "ACME Hotel",
"identifier": "hotel-id-1234",
"address": {
"@type": "PostalAddress",
"addressCountry": "AT",
"addressLocality": "Innsbruck",
"addressRegion": "Tyrol",
"postalCode": "6020",
"streetAddress": "Technikerstrasse 21"
},
"makesOffer": [
{
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD"
}
},
{
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1200.74,
"priceCurrency": "USD"
}
},
...
]
}
Desglose de precios
A continuación, se muestra un ejemplo de la propiedad priceSpecification con el desglose de precios. La tarifa base, los impuestos (como el impuesto genérico) y el descuento se definen con el componente UnitPriceSpecification. Recuerda establecer el campo priceComponentType con los valores correspondientes al componente UnitPriceSpecification.
El precio total de la estadía debe especificarse en la propiedad CompoundPriceSpecification. El desglose del precio se debe especificar en la propiedad priceComponent.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "ACME Hotel",
"identifier": "hotel-id-1234",
"address": {...},
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD",
"priceComponent": [
{
"@type": "UnitPriceSpecification",
"name": "",
"price": 1150,
"priceCurrency": "USD"
},
{
"@type": "UnitPriceSpecification",
"name": "GenericTax",
"price": 172.74,
"priceCurrency": "USD",
"priceComponentType": "GenericTax"
},
{
"@type": "UnitPriceSpecification",
"name": "Discount",
"price": -100,
"priceCurrency": "USD",
"priceComponentType": "Discount"
}
]
}
}
}
Punto de pago
A continuación, se muestra un ejemplo de la especificación de potentialAction en el que se usa el tipo de destinatario de PayAction.
El precio total del paquete es de USD 1,170, y el sitio web en línea cobra una parte del precio total, que es de USD 1,150 en el momento de la reserva, especificado con "@type": "OnlineBusiness", y el usuario debe pagar los USD 20 restantes en el momento del registro de entrada en el hotel, especificado con @type": "Hotel".
Debes especificar el componente potentialAction para desglosar el pago en el momento de la reserva y en el hotel. Si no se especifica, payAction interpreta el pago en el momento de la reserva como la forma de pago predeterminada.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "ACME Hotel",
"identifier": "hotel-id-1234",
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00]",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1170,
"priceCurrency": "USD",
"priceComponent": [
{
"@type": "UnitPriceSpecification",
"price": 1150,
"priceCurrency": "USD",
"potentialAction": {
"@type": "https://schema.org/PayAction",
"recipient": {
"@type": "OnlineBusiness",
"name": "myonlinebusiness"
}
}
},
{
"@type": "UnitPriceSpecification",
"price": 20,
"priceCurrency": "USD",
"potentialAction": {
"@type": "https://schema.org/PayAction",
"recipient": {
"@type": "Hotel",
"name": "The Langham, Boston",
"address": { ... }
}
}
}
]
}
}
}
Ejemplo de microdatos
Desglose de precios
A continuación, se muestra un ejemplo de la propiedad priceSpecification con el desglose de precios. La tarifa base, los impuestos (como el impuesto genérico) y el descuento se definen con el componente UnitPriceSpecification. Recuerda establecer la propiedad name con los valores correspondientes al componente UnitPriceSpecification.
El precio total de la estadía debe especificarse en la propiedad CompoundPriceSpecification. El desglose del precio se debe especificar en la propiedad priceComponent.
<div itemscope itemtype="https://schema.org/Hotel">
<meta itemprop="name" content="ACME Hotel"/>
<meta itemprop="identifier" content="hotel-id-1234"/>
<div itemscope itemtype="https://schema.org/PostalAddress" itemprop="address">
<meta itemprop="addressCountry" content="US" />
<meta itemprop="addressLocality" content="Mountain View" />
<meta itemprop="addressRegion" content="Santa Clara" />
<meta itemprop="postalCode" content="94040" />
<meta itemprop="streetAddress" content="123 Main street" />
</div>
<div itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation" itemprop="makesOffer">
<meta itemprop="checkinTime" content="2023-03-10 15:00:00" />
<meta itemprop="checkoutTime" content="2023-03-16 10:00:00"/>
<div itemscope itemtype="https://schema.org/CompoundPriceSpecification" itemprop="priceSpecification">
<meta itemprop="price" content="1222.74" />
<meta itemprop="priceCurrency" content="USD" />
<div itemscope itemtype="https://schema.org/UnitPriceSpecification" itemprop="priceComponent">
<meta itemprop="name" content="" />
<meta itemprop="price" content="1150" />
<meta itemprop="priceCurrency" content="USD" />
</div>
<div itemscope itemtype="https://schema.org/UnitPriceSpecification" itemprop="priceComponent">
<meta itemprop="name" content="GenericTax" />
<meta itemprop="price" content="172.74" />
<meta itemprop="priceCurrency" content="USD" />
<meta itemprop="priceComponentType" content="GenericTax" />
</div>
<div itemscope itemtype="https://schema.org/UnitPriceSpecification" itemprop="priceComponent">
<meta itemprop="name" content="Discount" />
<meta itemprop="price" content="-100" />
<meta itemprop="priceCurrency" content="USD" />
<meta itemprop="priceComponentType" content="Discount" />
</div>
</div>
</div>
</div>
hasMerchantReturnPolicy propiedad
Esta propiedad se usa para anotar la política de reembolsos del comercio en los itinerarios.
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"refundType": "https://schema.org/FullRefund",
"merchantReturnDays": "YYYY-MM-DD[THH:mm:ss]",
"restockingFee": 0
}
Sintaxis
hasMerchantReturnPolicy tiene la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
"@type": "Hotel",
...
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "YYYY-MM-DD[THH:mm:ss]",
"checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
"priceSpecification": { ... },
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"refundType": "https://schema.org/FullRefund",
"merchantReturnDays": "YYYY-MM-DD[THH:mm:ss]",
"restockingFee": 0
}
}
}
Propiedad
A continuación, se muestra la propiedad hasMerchantReturnPolicy:
| Atributo | ¿Es obligatorio? | Tipo | Descripción |
|---|---|---|---|
| Offer.hasMerchantReturnPolicy | Optional | MerchantReturnPolicy | Es la política de reembolsos del comercio. Los socios deben usar Si no se especifica |
Ejemplo
Política de devoluciones
A continuación, se muestra un ejemplo básico de datos estructurados para un hotel con detalles de las habitaciones y el precio total con impuestos y tarifas. En este ejemplo, se indica una estadía que se puede cancelar sin cargos hasta las 11 p.m. (UTC) del 18 de diciembre de 2023. Los socios deben usar "MerchantReturnPolicy.restockingFee" para indicar las políticas de cancelación que no reembolsan el importe total de la estadía. El valor predeterminado de restockingFee es USD 0.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "ACME Hotel",
"identifier": "hotel-id-1234",
"description": "Beautiful resort in the outskirts of the city",
"address": {...},
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-12-15 16:00:00",
"checkoutTime": "2023-12-20 11:00:00",
"priceSpecification": {...},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"refundType": "https://schema.org/FullRefund",
"merchantReturnDays": "2023-12-18 23:00:00",
"restockingFee": 0
}
}
}
eligibleCustomerType propiedad
Esta propiedad se puede usar para anotar los programas de recompensas que se proporcionan a los clientes miembros de hoteles.
"eligibleCustomerType": "RewardsMember",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": "float",
"priceCurrency": "currency"
}
Sintaxis
La propiedad eligibleCustomerType tiene la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
"@type": "Hotel",
...
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "YYYY-MM-DD[THH:mm:ss]",
"checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
"eligibleCustomerType": "RewardsMember",
"priceSpecification": { ... }
}
}
Propiedad
A continuación, se muestra la propiedad eligibleCustomerType:
| Atributo | ¿Es obligatorio? | Tipo | Descripción |
|---|---|---|---|
| Offer.eligibleCustomerType | Optional | BusinessEntityType | Son los programas de lealtad o las recompensas para miembros que se ofrecen a los clientes. Muchas páginas de hoteles muestran las tarifas para miembros junto con las tarifas públicas para alentar a los usuarios a registrarse en sus programas de lealtad. Las tarifas restringidas a públicos específicos, como las tarifas para miembros, se pueden especificar configurando la propiedadOffer.eligibleCustomerType. |
Ejemplos
Tarifas para miembros
A continuación, se muestra un ejemplo básico de especificación de precios para miembros o tarifas restringidas para programas de lealtad. El cliente es "miembro de recompensas" del hotel.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "ACME Hotel",
"identifier": "hotel-id-1234",
"address": {...},
"makesOffer": {
"@type": ["Offer", "LodgingReservation"],
"name": "RewardsMember",
"checkinTime": "2023-12-15 16:00:00",
"checkoutTime": "2023-12-20 11:00:00",
"eligibleCustomerType": "RewardsMember",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1342.74,
"priceCurrency": "USD",
"priceComponent": [
{
"@type": "UnitPriceSpecification",
"name": "Base rate",
"price": 1069.98,
"priceCurrency": "USD"
},
{
"@type": "UnitPriceSpecification",
"name": "GenericTax",
"price": 172.74,
"priceCurrency": "currency"
},
{
"@type": "UnitPriceSpecification",
"name": "ResortFee",
"price": 100,
"priceCurrency": "USD"
}
]
}
}
}
Tarifas para miembros y tarifas normales
Este es un ejemplo de las anotaciones de precios de tarifas normales y para miembros. Primero se muestran los precios para miembros y, luego, las tarifas regulares.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "ACME Hotel",
"identifier": "hotel-id-1234",
"address": {...},
"makesOffer": [
{
"@type": ["Offer", "LodgingReservation"],
"name": "RewardsMember",
"checkinTime": "2023-12-15 16:00:00",
"checkoutTime": "2023-12-20 11:00:00",
"eligibleCustomerType": "RewardsMember",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1342.74,
"priceCurrency": "USD",
"priceComponent": [
{
"@type": "UnitPriceSpecification",
"name": "Base rate",
"price": 1069.98,
"priceCurrency": "USD"
},
{
"@type": "UnitPriceSpecification",
"name": "GenericTax",
"price": 172.74,
"priceCurrency": "currency"
},
{
"@type": "UnitPriceSpecification",
"name": "ResortFee",
"price": 100,
"priceCurrency": "USD"
}
]
}
},
{
"@type": ["Offer", "LodgingReservation"],
"name": "regularRate",
"checkinTime": "2023-12-15 16:00:00",
"checkoutTime": "2023-12-20 11:00:00",
"priceSpecification": {
"price": 1572.24,
"priceCurrency": "USD",
"priceComponent": [
{
"@type": "UnitPriceSpecification",
"name": "Base rate",
"price": 1369.98,
"priceCurrency": "USD"
},
{
"@type": "UnitPriceSpecification",
"name": "GenericTax",
"price": 202.26,
"priceCurrency": "currency"
},
{
"@type": "UnitPriceSpecification",
"name": "ResortFee",
"price": 100,
"priceCurrency": "USD"
}
]
}
}
]
}
Datos estructurados de HotelRoom
offers propiedad
Las anotaciones offers se usan para marcar tus itinerarios de habitaciones. Debes usar la propiedad offers para la especificación de HotelRoom.
"offers": {
"@type": ["Offer", "LodgingReservation"],
"identifier": "hotel-room-id-1234",
"checkinTime": "YYYY-MM-DD[THH:mm:ss]",
"checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
"priceSpecification": {...}
}
Sintaxis
La propiedad offers tiene la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
"@type": "HotelRoom",
"identifier": "hotel-room-id-1234",
"offers": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "YYYY-MM-DD[THH:mm:ss]",
"checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": "float",
"priceCurrency": "currency",
...
}
}
}
Propiedades
Las siguientes son las propiedades de offers:
| Propiedad | ¿Obligatorio? | Tipo | Descripción |
|---|---|---|---|
| offers | Required | Offer and LodgingReservation | Es la especificación del precio de la habitación para el itinerario determinado. La propiedad |
| LodgingReservation.checkinTime | Required | DateTime | Es la hora de registro en la zona horaria del usuario. Si no se menciona tu zona horaria, se considera la zona horaria del hotel. |
| LodgingReservation.checkoutTime | Required | DateTime | Es la hora de salida en la zona horaria del usuario. Si no se menciona tu zona horaria, se considera la zona horaria del hotel. |
Ejemplo
ofertas
A continuación, se muestra un ejemplo básico para especificar offers en la propiedad HotelRoom.
{
"@context": "https://schema.org",
"@type": "HotelRoom",
"identifier": "hotel-room-id-1234",
"offers": {
"@type": ["Offer", "LodgingReservation"],
"identifier": "rate-plan-id-of-member-rate",
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD"
}
}
}
Propiedades bed y occupancy
La propiedad bed se usa para anotar el tipo y la cantidad de camas disponibles en la habitación. La propiedad occupancy se usa para anotar la cantidad de huéspedes en la habitación. Las propiedades bed y occupancy se pueden especificar con la propiedad HotelRoom.
"@type": "Hotel",
"identifier": "hotel-id-1234",
"containsPlace": {
"@type": ["HotelRoom", "Product"],
"identifier": "hotel-room-id",
"bed": {
"@type": "BedDetails",
"numberOfBeds": "integer",
"typeOfBed": "KING"
},
"occupancy": {
"@type": "QuantitativeValue",
"value": "integer"
}
}
Sintaxis
Las propiedades bed y occupancy tienen la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "hotel-name",
"identifier": "hotel-id-1234",
"containsPlace": {
"@type": ["HotelRoom", "Product"],
"name": "room-name",
"identifier": "hotel-room-id-1234",
"bed": {
"@type": "BedDetails",
"numberOfBeds": "integer",
"typeOfBed": "KING"
},
"occupancy": {
"@type": "QuantitativeValue",
"value": "integer"
},
"offers": {
"@type": ["Offer", "LodgingReservation"],
"identifier": "rate-plan-id-of-member-rate",
"checkinTime": "YYYY-MM-DD[THH:mm:ss]",
"checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": "float",
"priceCurrency": "currency",
"priceComponent": {
"@type": "UnitPriceSpecification",
"name": "",
"price": "float",
"priceCurrency": "currency"
},
...
}
}
}
}
Las propiedades bed y occupancy solo se pueden establecer con la propiedad HotelRoom. La información específica de la habitación, incluidas las tarifas a nivel de la habitación, se puede incluir en la propiedad Hotel a través de la propiedad containsPlace. Consulta el ejemplo de especificación de Hotel y HotelRoom.
Propiedades
A continuación, se indican las propiedades bed y occupancy:
| Propiedad | ¿Obligatorio? | Tipo | Descripción |
|---|---|---|---|
| HotelRoom.bed | Optional (Recommended) | bed | El tipo de camas que incluye el alojamiento y la cantidad de ocupantes en la habitación. Los valores admitidos son los siguientes:
|
| HotelRoom.occupancy | Optional (Recommended) | QuantitativeValue | Cantidad de huéspedes en la habitación del hotel. El tipo de ocupación es La ocupación es una propiedad explícita de |
| containsPlace | Optional (Recommended) | LocationFeatureSpecification | Se usa para anotar las tarifas a nivel de la habitación asociadas con habitaciones específicas. También se puede usar para especificar las comodidades de la habitación. Obtén más información para usar |
Ejemplos
HotelRoom
A continuación, se muestra un ejemplo básico de camas y ocupaciones para la especificación de una habitación.
{
"@context": "https://schema.org",
"@type": ["HotelRoom", "Product"],
"name": "Deluxe Room, 1 King Bed",
"identifier": "hotel-room-id-1234",
"bed": [
{
"@type": "BedDetails",
"numberOfBeds": 1,
"typeOfBed": "KING"
},
{
"@type": "BedDetails",
"numberOfBeds": 1,
"typeOfBed": "SINGLE"
}
],
"occupancy": {
"@type": "QuantitativeValue",
"value": 2
},
"offers": {
"@type": ["Offer", "LodgingReservation"],
"identifier": "rate-plan-id-of-member-rate",
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD"
}
}
}
Hotel y HotelRoom
A continuación, se muestra un ejemplo de cómo anotar las propiedades Hotel y HotelRoom junto con bed, occupancy y priceSpecification.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "hotel-name",
"identifier": "hotel-id-1234",
"containsPlace": {
"@type": ["HotelRoom", "Product"],
"name": "Deluxe Room, 1 King Bed",
"identifier": "hotel-room-id",
"bed": {
"@type": "BedDetails",
"numberOfBeds": 1,
"typeOfBed": "KING"
},
"occupancy": {
"@type": "QuantitativeValue",
"value": 2
},
"amenityFeature": {
"@type": "LocationFeatureSpecification",
"name": "Minibar",
"value": true
},
"offers": {
"@type": ["Offer", "LodgingReservation"],
"identifier": "rate-plan-id-of-member-rate",
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD"
}
}
}
}
HotelRoom priceSpecification propiedad
La especificación de precios de habitaciones de hotel es similar a la especificación de precios de hoteles.La diferencia es que los precios de las habitaciones se especifican con la propiedad Product.offers en lugar de la propiedad Hotel.makesOffer.
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": "float",
"priceCurrency": "currency",
"priceComponent": {
"@type": "UnitPriceSpecification",
"name": "GenericTax",
"price": "float",
"priceCurrency": "currency"
}
...
}
Sintaxis
La propiedad priceSpecification para las habitaciones de hotel tiene la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
"@type": ["HotelRoom", "Product"],
...
"bed": {
"@type": "BedDetails",
"numberOfBeds": "integer",
"typeOfBed": "KING"
},
"occupancy": {
"@type": "QuantitativeValue",
"value": "integer"
},
"offers": {
"@type": ["Offer", "LodgingReservation"],
...
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": "float",
"priceCurrency": "currency",
"priceComponent": [
{
"@type": "UnitPriceSpecification",
"name": "",
"price": "float",
"priceCurrency": "currency"
},
{
"@type": "UnitPriceSpecification",
"name": "GenericTax",
"price": "float",
"priceCurrency": "currency",
"priceComponentType": "GenericTax"
},
{
"@type": "UnitPriceSpecification",
"name": "Discount",
"price": "float",
"priceCurrency": "currency",
"priceComponentType": "Discount"
}
]
}
}
}
Propiedades
Las siguientes son las propiedades de HotelRoom priceSpecification:
| Propiedad | ¿Obligatorio? | Tipo | Descripción |
|---|---|---|---|
| Hotel.Offer.priceSpecification.price | Required | float | El precio por habitación, incluidos los impuestos y las tarifas del La tarifa de Google siempre debe estar anotada en tu página de destino junto con los detalles completos de la tarifa. Anotar los detalles de las tarifas te permite completar las verificaciones de precisión del precio. Google acepta precios a nivel del hotel y de la habitación. |
| Hotel.Offer.priceSpecification.priceCurrency | Required | currency | Es un código de moneda de tres letras para el precio especificado. P. ej.: "USD"
. |
| Hotel.Offer.priceSpecification.priceComponent | Optional | UnitPriceSpecification[] | El desglose del precio total, incluidos los impuestos y las tarifas de la habitación de hotel y la ocupación con ofertas vinculadas a
|
Ejemplos
Precio total de la habitación
A continuación, se muestra un ejemplo básico para definir el precio total de la estadía y el precio por ocupación.
{
"@context": "https://schema.org",
"@type": ["HotelRoom", "Product"],
"name": "Deluxe Room King, 1 Single Bed",
"identifier": "hotel-room-id-1234",
"bed": [
{
"@type": "BedDetails",
"numberOfBeds": 1,
"typeOfBed": "KING"
},
{
"@type": "BedDetails",
"numberOfBeds": 1,
"typeOfBed": "SINGLE"
}
],
"occupancy": {
"@type": "QuantitativeValue",
"value": 2
},
"offers": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1232.74,
"priceCurrency": "USD"
}
},
...
}
Desglose del precio de la habitación
A continuación, se muestra un ejemplo del precio por habitación o plan. El desglose de precios se define para el tipo de habitación, como la habitación Deluxe, y el tipo de bed y occupancy, como las camas KING y SINGLE, y una ocupación de 2 huéspedes.
{
"@context": "https://schema.org",
"@type": ["HotelRoom", "Product"],
"name": "Deluxe Room King, 1 Single Bed",
"identifier": "hotel-room-id-1234",
"offers": {
"@type": ["Offer", "LodgingReservation"],
"identifier": "rate-plan-id-of-member-rate",
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"bed": [
{
"@type": "BedDetails",
"numberOfBeds": 1,
"typeOfBed": "KING"
},
{
"@type": "BedDetails",
"numberOfBeds": 1,
"typeOfBed": "SINGLE"
}
],
"occupancy": {
"@type": "QuantitativeValue",
"value": 2
},
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD",
"priceComponent": [
{
"@type": "UnitPriceSpecification",
"name": "Base rate",
"price": 1150,
"priceCurrency": "USD"
},
{
"@type": "UnitPriceSpecification",
"name": "GenericTax",
"price": 172.74,
"priceCurrency": "USD",
"priceComponentType": "GenericTax"
},
{
"@type": "UnitPriceSpecification",
"name": "Discount",
"price": -100,
"priceCurrency": "USD",
"priceComponentType": "Discount"
}
]
}
}
}
includesObject propiedad
Esta propiedad se usa para anotar los servicios específicos de la tarifa que se proporcionan en el hotel o la habitación, como las opciones de comidas y el servicio de valet. Puedes anotar includesObject en la propiedad Hotel o HotelRoom.
{
"includesObject": [
{
"@type": "TypeAndQuantityNode",
"typeOfGood": {
"@type": "Service",
"name": "Valet"
}
},
{
"@type": "TypeAndQuantityNode",
"amountOfThisGood": "float",
"unitText": "currency",
"typeOfGood": {
"@type": "FoodService",
"name": "MealCredit"
}
}
]
}
Sintaxis
El includesObject tiene la siguiente sintaxis para los servicios específicos de tarifas disponibles en la habitación:
JSON-LD
{
"@context": "https://schema.org",
...
"@type": ["HotelRoom", "Product"],
...
"offers": {
"@type": ["Offer", "LodgingReservation"],
...
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": "float",
"priceCurrency": "currency"
},
"includesObject": [
{
"@type": "TypeAndQuantityNode",
"typeOfGood": {
"@type": "Service",
"name": "Valet"
}
},
{
"@type": "TypeAndQuantityNode",
"amountOfThisGood": "float",
"unitText": "currency",
"typeOfGood": {
"@type": "FoodService",
"name": "MealCredit"
}
}
]
}
}
Propiedad
includesObject tiene la siguiente propiedad:
| Atributo | ¿Es obligatorio? | Tipo | Descripción |
|---|---|---|---|
| Offer.includesObject | Optional | TypeAndQuantityNode | Los servicios que se ofrecen en el hotel o la habitación Las funciones específicas de la tarifa se incluyen con la propiedad Las funciones específicas de la tarifa también se pueden incluir en las ofertas de nivel básico o se pueden especificar como complementos por un precio adicional. El parámetro
|
Ejemplo
Servicios
A continuación, se muestra un ejemplo básico de funciones específicas de tarifas para el estacionamiento con valet y los servicios de comida. Las características específicas de la tarifa se deben especificar con la propiedad "Offer.includesObject". El campo name en "TypeAndQuantityNode.typeOfGood" se debe usar para indicar el tipo de servicio.
{
"@context": "https://schema.org",
"@type": ["HotelRoom", "Product"],
"name": "Deluxe Room, 1 King Bed",
"identifier": "hotel-room-id-1234",
"offers": {
"@type": ["Offer", "LodgingReservation"],
"identifier": "rate-plan-id-of-member-rate",
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD"
},
"includesObject": [
{
"@type": "TypeAndQuantityNode",
"typeOfGood": {
"@type": "Service",
"name": "Valet"
}
},
{
"@type": "TypeAndQuantityNode",
"amountOfThisGood": 50,
"unitText": "USD",
"typeOfGood": {
"@type": "FoodService",
"name": "MealCredit"
}
}
]
}
}
availability propiedad
La propiedad offer.availability se usa para anotar los itinerarios agotados de las habitaciones de hotel.
"offers": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "YYYY-MM-DD[THH:mm:ss]",
"checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
"availability": "https://schema.org/SoldOut"
}
Sintaxis
La propiedad availability tiene la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
...
"@type": ["HotelRoom", "Product"],
"name": "room-type",
"identifier": "hotel-room-id-1234",
"bed": {
"@type": "BedDetails",
"numberOfBeds": "integer",
"typeOfBed": "KING"
},
"occupancy": {
"@type": "QuantitativeValue",
"value": "integer"
},
"offers": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "YYYY-MM-DD[THH:mm:ss]",
"checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
"availability": "https://schema.org/SoldOut"
}
}
Propiedad
A continuación, se muestra la propiedad availability:
| Atributo | ¿Es obligatorio? | Tipo | Descripción |
|---|---|---|---|
| Offer.availability | Optional | ItemAvailability | Disponibilidad del hotel o la habitación. Las tarifas se extraen de
Una oferta sin un No es necesario especificar |
Ejemplo
Disponibilidad
A continuación, se muestra un ejemplo básico para indicar la no disponibilidad de habitaciones de hotel. Debes incluir el tipo de cama, la cantidad de camas y los detalles de ocupación de la habitación especificada.
{
"@context": "https://schema.org",
"@type": ["HotelRoom", "Product"],
"name": "Deluxe Room, 1 King Bed",
"identifier": "hotel-room-id-1234",
"bed": [
{
"@type": "BedDetails",
"numberOfBeds": 1,
"typeOfBed": "KING"
},
{
"@type": "BedDetails",
"numberOfBeds": 1,
"typeOfBed": "SINGLE"
}
],
"occupancy": {
"@type": "QuantitativeValue",
"value": 2
},
"offers": {
"@type": ["Offer", "LodgingReservation"],
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"availability": "https://schema.org/SoldOut",
"priceSpecification": {...}
}
}
amenityFeature propiedad
Los servicios se pueden especificar en el tipo Hotel o HotelRoom con la propiedad amenityFeature. Debes usar la propiedad containsPlace para especificar los servicios que se proporcionan en la habitación.
{
"@type": "Hotel",
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "HotTub",
"hoursAvailable": {
"@type": "OpeningHoursSpecification",
"opens": "HH:mm:ss",
"closes": "HH:mm:ss"
}
},
{
"@type": "LocationFeatureSpecification",
"name": "GymFitnessEquipment",
"value": "boolean"
}
],
"containsPlace": {
"@type": "HotelRoom",
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Minibar",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Smoking",
"value": false
}
]
}
}
Sintaxis
Las propiedades amenityFeature y containsPlace tienen la siguiente sintaxis:
JSON-LD
{
"@context": "https://schema.org",
"@type": "Hotel",
...
"amenityFeature": {
"@type": "LocationFeatureSpecification",
"name": "HotTub",
"hoursAvailable": {
"@type": "OpeningHoursSpecification",
"opens": "HH:mm:ss",
"closes": "HH:mm:ss"
}
},
"containsPlace": {
"@type": "HotelRoom",
"amenityFeature": {
"@type": "LocationFeatureSpecification",
"name": "Minibar",
"value": "boolean"
}
}
}
Comodidades
Los siguientes servicios se permiten y se definen en la propiedad name.
| Atributo | ¿Es obligatorio? | Tipo | Descripción |
|---|---|---|---|
| amenityFeature.AC | Optional | boolean | Si la propiedad tiene aire acondicionado. |
| amenityFeature.AirportShuttle | Optional | boolean | Si el anfitrión brinda transporte desde y hacia el aeropuerto o alguna otra terminal. |
| amenityFeature.Balcony | Optional | boolean | Si el alojamiento tiene balcón. |
| amenityFeature.BeachAccess | Optional | boolean | Si la propiedad tiene acceso a una playa pública cercana. |
| amenityFeature.ChildFriendly | Optional | boolean | Si la propiedad es apta para niños. |
| amenityFeature.Crib | Optional | boolean | Si la propiedad proporciona una cuna. |
| amenityFeature.Elevator | Optional | boolean | Si la propiedad tiene ascensor. |
| amenityFeature.FirePlace | Optional | boolean | Si el alojamiento tiene chimenea. |
| amenityFeature.FreeBreakfast | Optional | boolean | Indica si la propiedad ofrece desayuno incluido para todos los huéspedes. Usa las funciones de tarifas para indicar si el desayuno está incluido solo en planes de tarifas específicos. |
| amenityFeature.GymFitnessEquipment | Optional | boolean | Si la propiedad tiene gimnasio o equipos para hacer ejercicio. |
| amenityFeature.Heating | Optional | boolean | Si el alojamiento tiene calefacción. |
| amenityFeature.HotTub | Optional | boolean | Si la propiedad tiene jacuzzi. |
| amenityFeature.InstantBookable | Optional | boolean | Si la propiedad se puede reservar de forma instantánea a través del proceso de confirmación de compra. La alternativa es esperar la aprobación. |
| amenityFeature.IroningBoard | Optional | boolean | Si la propiedad dispone de tabla de planchar. |
| amenityFeature.Kitchen | Optional | boolean | Si el alojamiento tiene cocina. |
| amenityFeature.Microwave | Optional | boolean | Si el alojamiento dispone de microondas. |
| amenityFeature.OpenAirBath(Hotels only) | Optional | boolean | Si el alojamiento tiene un baño al aire libre adjunto. Si se especifica a nivel de la habitación, el baño debe ser privado solo para los ocupantes de la habitación. |
| amenityFeature.OutdoorGrill | Optional | boolean | Si la propiedad tiene parrilla. |
| amenityFeature.OvenStove | Optional | boolean | Si la propiedad tiene estufa. |
| amenityFeature.Patio | Optional | boolean | Si la propiedad tiene patio. |
| amenityFeature.Pool | Optional | boolean | Si el alojamiento tiene piscina. |
| amenityFeature.PrivateBeachAccess | Optional | boolean | Si la propiedad tiene acceso exclusivo a una playa privada. |
| amenityFeature.SelfCheckinCheckout | Optional | boolean | Si la propiedad admite el autorregistro de entrada y de salida. |
| amenityFeature.WasherDryer | Optional | boolean | Si el alojamiento tiene electrodomésticos para el cuidado de la ropa. |
| amenityFeature.Wifi | Optional | boolean | Si la propiedad tiene Wi-Fi. |
| amenityFeature.Smoking | Optional | boolean | Si el alojamiento permite fumar. |
| amenityFeature.InternetType | Optional | Enum | El tipo de Internet disponible en la propiedad. Los valores admitidos son los que se detallan a continuación:
|
| amenityFeature.ParkingType | Optional | Enum | El tipo de estacionamiento disponible en la propiedad. Los valores admitidos son los que se detallan a continuación:
|
| amenityFeature.PoolType | Optional | Enum | El tipo de piscina disponible en la propiedad. Los valores admitidos son los que se detallan a continuación:
|
| amenityFeature.RoomStyle | Optional | Enum | Indica si la habitación tiene un diseño de estilo japonés. Los valores admitidos son los que se detallan a continuación:
|
| amenityFeature.LicenseNum | Required | string | Es el número de licencia de la empresa que se mostrará en la propiedad en ciertas regiones del mundo. Se puede repetir y, si existen varias licencias, se recomienda agregar el propietario o la autoridad de la licencia. Por ejemplo, |
Propiedades
Las siguientes son las propiedades de amenityFeature:
| Propiedad | ¿Obligatorio? | Tipo | Descripción |
|---|---|---|---|
| amenityFeature | Optional | LocationFeatureSpecification | Los servicios que se ofrecen en el hotel o la habitación Se puede especificar con la propiedad Los servicios se pueden especificar a nivel de |
| containsPlace | Optional | LocationFeatureSpecification | Son los servicios que se proporcionan en el hotel o la habitación a todos los huéspedes. Se puede especificar con
|
Ejemplo
Comodidades en el hotel y la habitación
A continuación, se muestra un ejemplo de un hotel con una piscina abierta de 10 a.m. a 10 p.m. y sin gimnasio disponible en la propiedad. La habitación del hotel es para no fumadores y tiene minibar.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "ACME Hotel",
"address": { ... },
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "HotTub",
"hoursAvailable": {
"@type": "OpeningHoursSpecification",
"opens": "10:00:00",
"closes": "22:00:00"
}
},
{
"@type": "LocationFeatureSpecification",
"name": "GymFitnessEquipment",
"value": false
}
],
"containsPlace": {
"@type": "HotelRoom",
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Minibar",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Smoking",
"value": false
}
],
"offers": {
"@type": ["Offer", "LodgingReservation"],
"identifier": "rate-plan-id-of-member-rate",
"checkinTime": "2023-03-10 15:00:00",
"checkoutTime": "2023-03-16 10:00:00",
"priceSpecification": {
"@type": "CompoundPriceSpecification",
"price": 1222.74,
"priceCurrency": "USD"
}
}
}
}