¿Qué es el tipo Offer de Schema.org?
Offer es el tipo de Schema.org que describe las condiciones en que se ofrece un artículo o un servicio: el precio, la moneda, la disponibilidad, el estado, hasta cuándo vale el precio y quién vende. En una ficha, Offer va anidado dentro del producto con la propiedad offers, y es la parte del marcado que cambia cada vez que cambia el precio.
Lo esencial
- Offer no es una promoción: es cualquier condición de venta, también a precio normal, y sin más indicación se entiende que es una oferta para vender.
- El precio se escribe con punto decimal y sin símbolo; la moneda va aparte, con su código de tres letras, como EUR.
- Para las fichas de comerciante, Google exige precio mayor que cero y moneda, y recomienda disponibilidad, estado, envío y devoluciones.
- Una fecha de validez del precio ya pasada puede impedir que Google muestre el fragmento de producto.
- El precio y la disponibilidad tienen que cambiar en el marcado a la vez que en la ficha.
En el marcado de una ficha, Offer responde a dos preguntas que el producto no contesta: a qué precio se vende y si se puede comprar hoy. Es un tipo de Schema.org y se escribe en inglés porque es un nombre del vocabulario. No tiene nada que ver con una oferta en el sentido de rebaja: una camisa a precio normal también tiene su Offer. Y no es el producto, que tiene su propio tipo, Product. Te importa porque es la parte de los datos estructurados que Google necesita para enseñar el precio en los resultados enriquecidos, y porque es la que más se desajusta: cada rebaja, cada cambio de existencias, la deja vieja si no se actualiza a la vez que la ficha.
Cómo funciona
Schema.org define Offer como un ofrecimiento para transferir algún derecho sobre un artículo o para prestar un servicio, con ejemplos como vender entradas, alquilar una película, reparar una moto o prestar un libro. Si no se indica otra cosa, una Offer se entiende como una oferta para vender.[1]Schema.org. Offer En una ficha, el producto la lleva dentro con la propiedad offers.
Las propiedades que importan en una tienda, según Schema.org:[1]Schema.org. Offer
| Propiedad | Qué dice |
|---|---|
price |
El precio. Con punto como separador decimal, nunca coma, y con los dígitos del 0 al 9 |
priceCurrency |
La moneda, en formato ISO 4217, como EUR o USD |
availability |
La disponibilidad: en existencias, agotado, en preventa |
itemCondition |
El estado del artículo, por ejemplo nuevo o usado |
priceValidUntil |
La fecha a partir de la cual el precio deja de estar disponible |
seller |
Quién vende: una organización o una persona |
shippingDetails |
Las condiciones de envío |
hasMerchantReturnPolicy |
La política de devoluciones que se aplica |
Google toma ese vocabulario y fija sus mínimos. Para las fichas de comerciante, la oferta tiene que llevar un precio mayor que cero y la moneda en código ISO 4217 de tres letras. Recomienda además la disponibilidad, con valores como https://schema.org/InStock, OutOfStock, BackOrder o PreOrder; el estado, como https://schema.org/NewCondition; la fecha de validez del precio; los detalles de envío; la política de devoluciones, con el tipo MerchantReturnPolicy; y la URL desde la que se compra.[2]Google Search Central. Merchant listing (Product, Offer) structured data
Hay una condición más que no está en el vocabulario. Las fichas de comerciante solo aceptan Offer, no AggregateOffer, porque para optar a ellas el comerciante tiene que ser quien vende el producto. Los fragmentos de producto, en cambio, aceptan las dos.[2]Google Search Central. Merchant listing (Product, Offer) structured data Para ellos el precio es obligatorio si usas Offer, la moneda es recomendable y Google avisa de que el fragmento puede no mostrarse si priceValidUntil indica una fecha pasada.[3]Google Search Central. Product snippet (Product, Review, Offer) structured data
Y una advertencia que es casi exclusiva de Offer. Google puede leer datos estructurados añadidos con JavaScript, pero avisa de que el marcado generado dinámicamente puede hacer que los rastreos de Shopping sean menos frecuentes y menos fiables, un problema para lo que cambia rápido, como el precio y la disponibilidad.[4]Google Search Central. Generate structured data with JavaScript
En una tienda
La oferta de una camisa en rebajas, con lo que muestra la ficha y cómo se escribe en el marcado. Ejemplo ficticio: la tienda, el producto, el precio y las fechas son inventados.
| Lo que muestra la ficha | Cómo se escribe en la oferta |
|---|---|
| 29,90 € (antes 39,90 €) | "price": "29.90" y "priceCurrency": "EUR" |
| «En stock» | "availability": "https://schema.org/InStock" |
| «Nuevo» | "itemCondition": "https://schema.org/NewCondition" |
| «Precio válido hasta el 31 de octubre» | "priceValidUntil": "2026-10-31" |
"offers": {
"@type": "Offer",
"price": "29.90",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"priceValidUntil": "2026-10-31",
"url": "https://www.example.com/camisa-lino-calella"
}
Tres cosas que el ejemplo enseña. El precio de la oferta es el que paga hoy el cliente, el rebajado, porque los datos tienen que representar la página tal como está.[5]Google Search Central. General structured data guidelines La fecha de validez solo se pone si la ficha la dice; aquí la rebaja tiene un final anunciado. Y la disponibilidad es una dirección del vocabulario, no la frase que ve el cliente: «Últimas unidades» o «Envío en 48 horas» no tienen traducción literal, así que se marca el hecho (hay existencias) y el resto se queda en la página.
Lo que se suele confundir
Escribir el precio como se ve en una tienda española, «29,90 €», dentro de price. Schema.org pide punto como separador decimal y la moneda en su propia propiedad, con su código ISO 4217.[1]Schema.org. Offer
Cómo comprobarlo
- Busca
offersen el código fuente de la ficha y apunta el precio, la moneda y la disponibilidad que declara. - Compáralos con lo que ve un cliente en ese momento, precio rebajado incluido. Si no coinciden, los datos no representan la página.[5]Google Search Central. General structured data guidelines
- Mira la fecha de
priceValidUntil, si existe. Si ya pasó, el fragmento de producto puede no mostrarse.[3]Google Search Central. Product snippet (Product, Review, Offer) structured data - Comprueba si la oferta está en el HTML que sirve el servidor o la añade JavaScript después: para el precio y la disponibilidad, Google avisa de que lo segundo hace los rastreos de Shopping menos frecuentes y menos fiables.[4]Google Search Central. Generate structured data with JavaScript
- Pasa la URL por la Prueba de resultados enriquecidos para ver qué experiencias detecta y con qué errores.[6]Ayuda de Search Console. Rich Results Test
Concepto cercano: AggregateOffer
AggregateOffer es el tipo que Schema.org propone cuando un mismo producto tiene varias ofertas, por ejemplo el mismo par de zapatos vendido por comercios distintos, y resume el conjunto con el precio más bajo (lowPrice), el más alto (highPrice) y el número de ofertas (offerCount).[7]Schema.org. AggregateOffer Encaja en un comparador o en un marketplace; en la ficha de una tienda que vende lo suyo, lo que corresponde es Offer, y Google solo acepta Offer para las fichas de comerciante.[2]Google Search Central. Merchant listing (Product, Offer) structured data
Para seguir, la ruta de lectura de datos estructurados ordena el resto de términos, y la entrada de JSON-LD enseña dónde va esta oferta dentro del bloque de la ficha.
Sinónimos
- English
- offer schema, offer markup
- Español
- marcado de oferta
Fuentes
- [1] Schema.org. Offer. Consultado el . ↑ ↑ ↑
- [2] Google Search Central. Merchant listing (Product, Offer) structured data. Consultado el . ↑ ↑ ↑
- [3] Google Search Central. Product snippet (Product, Review, Offer) structured data. Consultado el . ↑ ↑
- [4] Google Search Central. Generate structured data with JavaScript. Consultado el . ↑ ↑
- [5] Google Search Central. General structured data guidelines. Consultado el . ↑ ↑
- [6] Ayuda de Search Console. Rich Results Test. Consultado el . ↑
- [7] Schema.org. AggregateOffer. Consultado el . ↑
Historial de cambios
- Primera versión.
Esta definición se publica bajo licencia CC BY 4.0. Puedes reutilizar esta definición citando a Clione con un enlace a esta página.
Términos relacionados
Product
Qué es el tipo Product de Schema.org, qué propiedades lleva, qué pide Google para fragmentos de producto y fichas de comerciante, y cómo contrastarlo.
AggregateOffer
Qué es AggregateOffer en Schema.org, qué propiedades pide Google, por qué no sirve para las variantes de tu ficha y en qué páginas encaja de verdad.
Señales de precio y disponibilidad
Qué son las señales de precio y disponibilidad, dónde vive cada copia (ficha, marcado y feeds), cómo las compara Google y qué pasa cuando no coinciden.
OfferShippingDetails
Qué es OfferShippingDetails, qué pide Google para mostrar el coste y el plazo de envío, cuándo usarlo frente a la política general y cómo revisarlo.
MerchantReturnPolicy
Qué es MerchantReturnPolicy, qué propiedades pide Google, dónde va (en la organización o en la oferta), qué gana a qué y cómo revisarlo en tu tienda.
Fichas de comerciante
Qué son las fichas de comerciante (merchant listings) de Google, dónde aparecen, qué marcado Product y Offer piden y cómo comprobar si tu ficha opta.
Haz que los bots entiendan tu catálogo
Clione completa cada ficha de producto con lo que los bots leen mejor: el grafo JSON-LD con sus datos estructurados, la meta description y las preguntas frecuentes. Tú revisas y pulsas Push; después comprobamos tu tienda en vivo para que todo siga publicado.