# Precio y disponibilidad: las señales que deben coincidir

> 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.

URL: https://clione.ai/es/glosario/precio-y-disponibilidad/
Lang: es

Aquí no se habla de cómo fijar precios ni de cuánto stock tener, sino de cómo se dicen. Un mismo producto tiene un precio y un estado de existencias, pero **tu tienda los publica en varios sitios a la vez**: en la [ficha de producto](/es/glosario/ficha-de-producto/) que ve el cliente, en los [datos estructurados](/es/glosario/datos-estructurados/) de esa ficha y en cada [feed de productos](/es/glosario/feed-de-productos/) que mandas fuera. Cada copia es una señal, y quien la lee no siempre lee la misma. Te importa porque son los datos que más cambian (cada rebaja, cada venta, cada reposición) y los que más se comprueban: Google y los asistentes comparan las copias entre sí, y una diferencia puede bastar para que un producto deje de mostrarse.

## Cómo funciona

Las cuatro copias habituales dicen lo mismo con formatos distintos:

| Copia                                                                       | Precio                                                                                                                               | Disponibilidad                                                    |
| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- |
| La ficha                                                                    | Como lo lee una persona: «29,90 €» | Como la lee una persona: «En stock», «Últimas unidades»           |
| El marcado, en la oferta                                                    | `price` y `priceCurrency`                                                                                                            | Un único valor del vocabulario, como `https://schema.org/InStock` |
| El _feed_ de [Google Merchant Center](/es/glosario/google-merchant-center/) | `price`, con la moneda                                                                                                               | `in_stock`, `out_of_stock`, `preorder` o `backorder`              |
| El _feed_ de ChatGPT                                                        | `price`, el precio normal, y `sale_price`                                                                                            | `in_stock`, `out_of_stock`, `pre_order`, `backorder` o `unknown`  |

En el marcado, la oferta es el tipo [Offer](/es/glosario/schema-offer/). Para las [fichas de comerciante](/es/glosario/fichas-de-comerciante/), Google exige un precio mayor que cero y la moneda en código ISO 4217, y en la disponibilidad pide un solo valor.[^google-merchant-listing] La especificación de Merchant Center pide que el precio coincida con el de la página, el de los datos estructurados y el del proceso de pago, y que la disponibilidad coincida con la de la página, la del pago y la del marcado; y añade que **un producto agotado tiene que seguir mostrando su precio de forma visible en la página**.[^mc-spec] El _feed_ de OpenAI hace obligatoria la disponibilidad en cada fila: si falta o no es uno de sus valores, rechaza la fila. El precio rebajado tiene que ser mayor que cero, menor que el normal y en la misma moneda, y OpenAI pide actualizar el _feed_ cuando empieza o acaba una rebaja y cuando un producto se agota o vuelve a estar disponible.[^openai-feed-spec]

**Google compara las copias.** Su [rastreador](/es/glosario/rastreador/), [Googlebot](/es/glosario/googlebot/), visita tus fichas y **compara el precio de tu _feed_ con el de la página o el del marcado**. Si encuentra una diferencia, el producto puede quedar rechazado, y Google avisa de que puede llevar a la suspensión de la cuenta. Lee el HTML que devuelve tu servidor: si el precio se añade con JavaScript después de cargar la página, eso da error. Cuando lo corriges, vuelve a rastrear los productos rechazados en unas horas o días.[^mc-price-mismatch] Con la disponibilidad pasa lo mismo: el valor del _feed_ y el de la página tienen que coincidir, y demasiados productos con la disponibilidad equivocada pueden llevar también a la suspensión.[^mc-availability-mismatch]

**La causa más habitual es el reloj.** Google cita como motivos frecuentes la diferencia de tiempo entre lo que cambias en la web y lo que llega a Merchant Center, un marcado incorrecto, un precio distinto para los bots que para las personas y, en las rebajas, unas fechas de inicio y fin o una zona horaria mal puestas en el precio rebajado.[^mc-price-mismatch] Por eso recomienda sincronizar los envíos del _feed_ con los cambios de la tienda o, si cambias precios y existencias a menudo, activar las actualizaciones automáticas.[^mc-availability-mismatch] Esas actualizaciones usan los datos estructurados de tu página para corregir el precio, el precio rebajado, la disponibilidad y el estado del producto en Merchant Center, pero no sustituyen a un _feed_ al día, pueden no funcionar con productos que cambian de precio o de disponibilidad más de una vez al día y, si detectan una diferencia, pueden rechazar el producto en lugar de actualizarlo.[^mc-auto-updates]

**El marcado también tiene que llegar a tiempo.** Google avisa de que el marcado de producto generado con JavaScript 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.[^google-js-sd]

**Los asistentes también lo usan.** Cuando varios comercios venden el mismo producto, ChatGPT los ordena teniendo en cuenta la disponibilidad, el precio, la calidad y si son el fabricante o el vendedor principal. OpenAI reconoce que, cuando un comercio cambia su precio o sus condiciones de envío, puede pasar un tiempo hasta que se refleja en lo que ve el usuario.[^openai-shopping]

## En una tienda

Una camisa entra en rebajas el lunes a las 9:00. A las 11:00, la tienda revisa sus cuatro copias. Es un **ejemplo ficticio**: la tienda, el producto, los precios y las horas están inventados para enseñar dónde aparece la diferencia.

| Copia, a las 11:00 (ejemplo ficticio) | Precio                    | Disponibilidad | ¿Coincide con la ficha?                                               |
| ------------------------------------- | ------------------------- | -------------- | --------------------------------------------------------------------- |
| La ficha                              | 29,90 €                   | En stock       | Es la referencia                                                      |
| El marcado de la ficha                | `29.90` EUR               | `InStock`      | Sí                                                                    |
| El _feed_ de Merchant Center          | 39,90 €, sin `sale_price` | `in_stock`     | No: el precio es el de antes de la rebaja                             |
| El _feed_ de ChatGPT                  | 39,90 €                   | Vacío          | No: el precio es el de antes, y la fila sin disponibilidad se rechaza |


Dos lecturas. **La página y el marcado están bien, y aun así hay un problema**: el _feed_ de Merchant Center se envía una vez al día y todavía no sabe que hay rebaja, así que si Google rastrea la ficha esa mañana encontrará dos precios distintos.[^mc-price-mismatch] La solución no es tocar la ficha, sino el _feed_: enviar el precio rebajado con sus fechas de inicio y fin, o dejar que las actualizaciones automáticas lo corrijan si el precio no cambia más de una vez al día.[^mc-auto-updates] La segunda: en el _feed_ de ChatGPT, la disponibilidad vacía no es un aviso, es una fila rechazada.[^openai-feed-spec]


**Marcar un producto como agotado para dejar de anunciarlo.** Si la página dice que hay existencias, eso crea justo la diferencia que Google castiga. Merchant Center pide no usar `out_of_stock` para pausar un producto: para eso está el atributo de pausa, durante un máximo de 14 días, y el de destino excluido si es para más tiempo.[^mc-availability-mismatch]


## Cómo comprobarlo

1. **Elige un producto en rebaja o con pocas existencias** y apunta lo que ve un cliente en la ficha.
2. **Abre el código fuente de la ficha**, no el inspector del navegador, y busca el precio y la disponibilidad del marcado. Si solo aparecen en el inspector, los está añadiendo JavaScript después de cargar.[^mc-price-mismatch][^google-js-sd]
3. **Entra en Merchant Center, en Productos, en la pestaña de los que necesitan atención** (_Needs attention_), y filtra por los problemas de precio y de disponibilidad que no coinciden.[^mc-availability-mismatch]
4. **Si usas precio rebajado, revisa sus fechas de inicio y fin y la zona horaria**: un error ahí enseña un precio equivocado aunque todo lo demás esté bien.[^mc-price-mismatch]
5. **Revisa cada fila de tu _feed_ para ChatGPT**: la disponibilidad tiene que ser uno de los valores admitidos, y `unknown` solo cuando de verdad no la sabes.[^openai-feed-spec]

## Concepto cercano: Offer

Offer es una sola de las copias: la que va en el marcado de la ficha, con su precio, su moneda y su disponibilidad. Las señales de precio y disponibilidad son el conjunto, y su problema no suele estar dentro de ninguna copia, sino **entre ellas**: una oferta perfecta en el marcado no sirve si el _feed_ dice otro precio. Cuando una copia que estaba bien deja de coincidir con el tiempo, el nombre es [deriva de datos](/es/glosario/deriva-de-datos/).

Para seguir, la [ruta de lectura de catálogo y entidades](/es/aprender/catalogo-y-entidades/) ordena el resto de términos, y la entrada sobre la [política de devoluciones](/es/glosario/politica-de-devoluciones/) cubre las otras condiciones de venta que leen buscadores y asistentes.
