# Auditar los datos estructurados de una ficha de producto

> Cómo auditar los datos estructurados de una ficha: el JSON-LD publicado frente a lo que se ve, la Prueba de resultados enriquecidos y Search Console.

URL: https://clione.ai/es/guias/auditar-ficha-de-producto/
Lang: es

Una herramienta que dice «válido» no ha mirado tu tienda: ha mirado tu código. Auditar los [datos estructurados](/es/glosario/datos-estructurados/) de una [ficha de producto](/es/glosario/ficha-de-producto/) es otra cosa, y la parte que más importa no la hace ninguna herramienta: comprobar que el [JSON-LD](/es/glosario/json-ld/) dice lo mismo que la página que ve el comprador, porque de eso depende que la ficha pueda optar a los [resultados enriquecidos](/es/glosario/resultados-enriquecidos/) de Google. Esta guía va por orden: qué regla aplica cada comprobación, cómo se lee el marcado de una ficha publicada, qué comparar propiedad por propiedad, qué validan la [Prueba de resultados enriquecidos](/es/glosario/prueba-de-resultados-enriquecidos/) y el validador oficial del [_schema markup_](/es/glosario/schema-markup/), el [Schema Markup Validator](/es/glosario/validador-de-schema/), y qué te cuenta [Search Console](/es/glosario/search-console/) de todo el sitio.

## La regla con la que se audita

Antes de abrir nada conviene saber contra qué se compara. Google lo resume en sus directrices generales: **tus datos estructurados tienen que ser un reflejo fiel del contenido de la página**, y no se marca lo que el lector no ve. Su ejemplo es de otro sector, pero se aplica tal cual a una tienda: si el JSON-LD describe a un artista, el cuerpo de la página tiene que describir a ese mismo artista. Tampoco se marca contenido engañoso, como reseñas falsas, y hay que incluir todas las propiedades obligatorias del tipo de resultado, porque un elemento al que le falta una no puede optar a un [resultado enriquecido](/es/glosario/resultados-enriquecidos/).[^google-sd-policies]

Para una ficha, el tipo es [Product](/es/glosario/schema-product/) y la experiencia que importa son las [fichas de comerciante](/es/glosario/fichas-de-comerciante/) (_merchant listings_): el precio, la disponibilidad, el envío y la devolución que Google puede enseñar en la Búsqueda, en el panel de Shopping o en Google Imágenes.[^google-merchant-listing] Google separa dos casos. Los fragmentos de producto (_product snippets_) son para páginas donde no se compra directamente, como una reseña; las fichas de comerciante, para las páginas donde el cliente te compra a ti. Si tu marcado tiene lo que piden las fichas de comerciante, la página puede optar también a los fragmentos de producto.[^google-product-intro]

Y una advertencia que ahorra discusiones: **un marcado correcto no garantiza el resultado enriquecido**. Google no promete enseñar los datos estructurados aunque la Prueba de resultados enriquecidos los dé por buenos, y entre las razones que da están un marcado que no representa el contenido principal, contenido oculto al usuario o un error que la prueba no puede detectar.[^google-sd-policies]

## Paso 1: abre la ficha publicada, no el panel de administración

El panel de tu plataforma enseña lo que tienes guardado. Lo que leen Google y cualquier agente es lo que publica la página, y entre una cosa y otra están el tema, las apps y la caché. Elige una ficha que se pueda comprar, ábrela en una ventana privada y apunta, con la fecha y la hora, lo que ve un comprador:

- el nombre del producto, tal como sale en el título de la página;
- el precio, con su moneda, y si hay un precio tachado;
- el mensaje de existencias: disponible, agotado, en reserva;
- la valoración media y el número de reseñas, si se ven;
- el código de barras o la referencia, si la ficha los enseña.

Esa lista es tu referencia para el paso 3. Si la ficha tiene variantes, apunta cuál está seleccionada al cargar: Google solo admite resultados de producto en páginas centradas en un único producto o en varias variantes del mismo producto.[^google-merchant-listing] Cómo se marcan las variantes está en la entrada de [variantes de producto](/es/glosario/variantes-de-producto/).


## Paso 2: encuentra el marcado en el HTML de la página

Abre el código fuente de la ficha («Ver código fuente de la página», o `view-source:` delante de la URL) y busca `application/ld+json`. Anota cuántos bloques hay, qué `@type` declara cada uno y si alguno usa [`@graph`](/es/glosario/graph/) o [`@id`](/es/glosario/id-json-ld/) para enlazar nodos. Google admite tres formatos, JSON-LD (el que recomienda), [microdatos](/es/glosario/microdatos/) y [RDFa](/es/glosario/rdfa/),[^google-sd-policies] así que busca también `itemprop` e `itemscope`: un tema puede llevar el marcado en microdatos, repartido por el HTML.

Dos comprobaciones de forma antes de leer el contenido:

- **¿Está en el HTML del servidor o lo añade JavaScript?** Google procesa el marcado que encuentra en el DOM al [renderizar la página](/es/glosario/renderizado-javascript/),[^google-js-sd] pero recomienda poner el marcado Product en el HTML inicial y avisa de que el generado con JavaScript puede hacer los rastreos de Shopping menos frecuentes y menos fiables, un problema con datos que cambian rápido, como el precio y la disponibilidad.[^google-merchant-listing] La diferencia entre el código fuente y la página renderizada, y cómo verla, está en [la guía de lo que ve un bot en tu tienda](/es/guias/que-ve-un-rastreador-de-ia/), que explica también qué es un [rastreador](/es/glosario/rastreador/) de IA.
- **¿Hay comentarios dentro del JSON-LD?** La Prueba de resultados enriquecidos los ignora, pero el estándar JSON-LD no los admite y pueden dar errores en el uso real. Google pide quitarlos antes de publicar.[^google-rrt]

Si encuentras más de un nodo Product para la misma ficha, por ejemplo uno del tema y otro de una app, anótalo y audita cada uno en el paso siguiente: cada nodo es una declaración sobre el mismo producto, y todas tienen que coincidir con la página.

## Paso 3: compara cada propiedad con lo que ve el comprador

Este es el paso que no hace ninguna herramienta. Pon tu lista del paso 1 al lado del JSON-LD y recorre las propiedades que piden las fichas de comerciante, con los nombres del vocabulario de [Schema.org](/es/glosario/schema-org/). Lo obligatorio es corto: el Product necesita nombre (`name`), imagen (`image`) y una oferta (`offers`), y esa oferta, del tipo [Offer](/es/glosario/schema-offer/), necesita precio y moneda.[^google-merchant-listing]

| Propiedad                                     | Lo que pide Google o Schema.org                                                                                                                                                                                                                                                   | Lo que compruebas en la ficha                                          |
| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| `name`                                        | Obligatoria: el nombre del producto.[^google-merchant-listing]                                                                                                                                                                                                                    | Que sea el producto de la página, no el de otra variante.              |
| `image`                                       | Obligatoria. La imagen tiene que representar el producto marcado y su URL tiene que poder rastrearse e indexarse.[^google-merchant-listing]                                                                                                                                       | Que la URL abra la foto de este producto.                              |
| `offers`                                      | Obligatoria. Las fichas de comerciante exigen una Offer, porque el comerciante tiene que ser quien vende.[^google-merchant-listing]                                                                                                                                               | Que haya una oferta y sea la tuya.                                     |
| `price`                                       | **Mayor que cero** para las fichas de comerciante; los fragmentos de producto admiten un precio de cero.[^google-merchant-listing][^google-product-snippet] Schema.org pide el punto como separador decimal y la moneda aparte, no un símbolo dentro del valor.[^schemaorg-offer] | Que sea el precio que paga el comprador hoy.                           |
| `priceCurrency`                               | Código de tres letras ISO 4217. Si vendes en varias monedas, Google pide una URL distinta por moneda.[^google-merchant-listing]                                                                                                                                                   | Que sea la moneda en la que se cobra en esa URL.                       |
| `availability`                                | Recomendada. Un solo valor de la lista de Schema.org, como `InStock`, `OutOfStock`, `PreOrder` o `BackOrder`; Google admite el nombre corto sin la URL.[^google-merchant-listing][^schemaorg-availability]                                                                        | Que diga lo mismo que el mensaje de existencias.                       |
| `priceValidUntil`                             | Recomendada. Si la fecha ya ha pasado, la ficha puede no mostrarse.[^google-merchant-listing]                                                                                                                                                                                     | Que no sea la fecha de una rebaja que ya acabó.                        |
| `gtin`, `gtin8`, `gtin12`, `gtin13`, `gtin14` | Recomendada. Google aconseja la más específica y solo admite la forma numérica, no la URL.[^google-merchant-listing] Schema.org pide 8, 12, 13 o 14 dígitos con un dígito de control válido.[^schemaorg-gtin]                                                                     | Que sea el código del envase o de tu catálogo, sin espacios ni letras. |
| `aggregateRating`                             | Recomendada. Lleva `ratingValue` y `ratingCount` o `reviewCount`, y **la valoración tiene que verse en la página**.[^google-review-snippet]                                                                                                                                       | Que la media y el número de reseñas coincidan con lo que se ve.        |
| `brand.name`, `sku`, `mpn`                    | Recomendadas. Una sola marca; el `sku` sin espacios.[^google-merchant-listing]                                                                                                                                                                                                    | Que coincidan con la ficha y con tu catálogo.                          |

El [GTIN](/es/glosario/gtin/) merece una mirada aparte: compáralo dígito a dígito con el de tu catálogo, donde quizá lo tengas guardado como [código EAN](/es/glosario/codigo-ean/). Un dígito de más o de menos no se nota en la página, pero deja el código sin un dígito de control válido. Lo mismo vale para el [SKU](/es/glosario/sku/) y el [MPN](/es/glosario/mpn/). Cómo encajan el precio y la disponibilidad entre la página, el marcado y los [_feeds_](/es/glosario/feed-de-productos/) está en [precio y disponibilidad](/es/glosario/precio-y-disponibilidad/), y la valoración media, en [AggregateRating](/es/glosario/aggregaterating/).

Un ejemplo ficticio para entrenar el ojo. La ficha enseña «34,90 €», «Agotado» y ninguna estrella; el marcado dice otra cosa en tres sitios:


```json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Zapatilla de ejemplo",
  "image": "https://tu-tienda.example/img/zapatilla.jpg",
  "gtin13": "8400000000000",
  "offers": {
    "@type": "Offer",
    "price": 29.9,
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 4.6,
    "reviewCount": 12
  }
}
```


El precio no es el que se cobra, la disponibilidad dice que hay existencias cuando la página dice que no, y la valoración describe algo que el comprador no ve. **Ninguna de las dos herramientas de los pasos siguientes marcaría estos tres desajustes como error**: el código es correcto y tiene todo lo obligatorio. Los desajustes solo aparecen al poner el marcado al lado de la página.

## Paso 4: pasa la URL por la Prueba de resultados enriquecidos

La Prueba de resultados enriquecidos responde a qué resultados enriquecidos de Google puede generar tu página.[^google-test-sd] Úsala con la URL publicada, no pegando el código: Google lo recomienda porque el modo de código tiene límites con JavaScript.[^google-js-sd] Así lees lo que ve:

- **El rastreo.** La prueba entra como Google-InspectionTool, sin tus credenciales, y por defecto como un móvil. Si un [`robots.txt`](/es/glosario/robots-txt/) o un [`noindex`](/es/glosario/noindex/) impiden que Google rastree la página, no se puede probar. Si no carga algunos recursos, avisa, y el resultado puede cambiar de una ejecución a otra.[^google-rrt]
- **Lo detectado.** Lista los tipos de resultado enriquecido que encuentra, con un estado por URL: elementos válidos, válidos con advertencias, no válidos, o datos estructurados con errores de sintaxis.[^google-rrt] En una ficha esperas ver las fichas de comerciante y los fragmentos de producto.
- **Los errores y las advertencias.** Al abrir uno, el explorador te lleva a la línea del código, y ese código es el renderizado, no el HTML original.[^google-rrt] Google pide corregir los errores críticos; los no críticos conviene arreglarlos porque mejoran la calidad del marcado, pero no son necesarios para optar al resultado.[^google-merchant-listing]


Lo que esta prueba no hace también está escrito: los problemas de contenido que no son de sintaxis, como un marcado que no coincide con la página, **no los puede identificar**.[^google-merchant-listing] Por eso va después del paso 3, no en su lugar.

## Paso 5: pasa la misma URL por el Schema Markup Validator

El [Schema Markup Validator](https://validator.schema.org/), que en español se presenta como Validador de marcado Schema.org,[^smv] valida cualquier tipo de marcado de Schema.org sin las comprobaciones propias de Google.[^google-test-sd] Te sirve para lo que la prueba de Google no mira: tipos que Google no usa para resultados enriquecidos y propiedades que no aparecen en su documentación.

Pasar la misma ficha por las dos herramientas enseña dónde no coinciden, porque cada una valida contra una regla distinta. Dos ejemplos de las fuentes:

- **El GTIN como URL.** Schema.org admite un GTIN escrito como URL de GS1 Digital Link;[^schemaorg-gtin] Google solo admite la forma numérica.[^google-merchant-listing] El validador lo da por bueno y Google no lo usa.
- **El precio cero.** Un `"price": 0` sirve para los fragmentos de producto,[^google-product-snippet] pero las fichas de comerciante piden un precio mayor que cero.[^google-merchant-listing]

Ninguna de las dos herramientas comprueba que lo que validas es lo que se ha publicado en todas tus fichas ni que coincide con lo que ve el comprador. Esa distinción tiene su propia página: [validar el marcado no es lo mismo que verificar la publicación](/es/comparativas/validar-vs-verificar/).

## Paso 6: mira los informes de producto en Search Console

Las dos pruebas miran una URL; Search Console mira el sitio. Los informes de producto están en el apartado de Shopping, no en el de mejoras donde están los demás informes de resultados enriquecidos.[^gsc-rich-report] Son dos:[^google-merchant-listing][^gsc-shopping]

- **Fichas de comerciante**, para las páginas donde el comprador puede comprar. Incluye las comprobaciones de los fragmentos de producto que llevan una Offer.
- **Fragmentos de producto**, para las demás páginas de producto, como reseñas o comparadores. En una tienda solo hace falta mirarlo para las páginas que no son fichas de comerciante.

Cada informe enseña un gráfico de elementos válidos y no válidos y dos tablas: los problemas críticos, que impiden el resultado enriquecido, y los no críticos, que afectan a cómo se ve. **Los números cuentan elementos, no páginas**, y el informe es una muestra, no la lista completa: para una URL que no aparece, Google remite a la inspección de URLs.[^gsc-rich-report] Si no ves el informe, Google no ha encontrado marcado válido de ese tipo en tu sitio.[^gsc-shopping]

Cómo leer los cambios, según Google: tras una plantilla nueva, **un aumento de elementos no válidos** puede indicar que la plantilla no funciona; **una bajada de elementos válidos sin aumento de los no válidos** puede indicar que la página ha dejado de llevar el marcado. Cuando corrijas, inspecciona la URL en directo para ver si el problema sigue y pide la validación desde el informe.[^google-merchant-listing]

La inspección de URLs cierra la auditoría de una ficha concreta. Su sección de mejoras enseña los resultados enriquecidos que Google encontró la última vez que indexó la página, con sus errores y advertencias; «Ver página rastreada» enseña el HTML que devolvió tu servidor, y la prueba en directo examina la versión actual, con una captura de lo que pintó.[^gsc-url-inspection]


## Los desajustes que buscan las reglas

Si solo tienes diez minutos por ficha, estos son los desajustes que las propias reglas de Google y de Schema.org señalan, y dónde se ven:

- **El precio del marcado no es el de la página.** Va contra la regla del reflejo fiel.[^google-sd-policies] Si tienes [Google Merchant Center](/es/glosario/google-merchant-center/), sus actualizaciones automáticas leen el precio, la disponibilidad y el estado del producto en la página para corregir el _feed_: su ejemplo es un producto a 4 dólares en el _feed_ y a 3 en la página, que pasa a 3. Pero pueden no funcionar con productos cuyo precio o disponibilidad cambian a menudo, por ejemplo más de una vez al día, y si detectan un desajuste el producto puede quedar rechazado en lugar de actualizado.[^mc-automations]
- **La disponibilidad no es la del mensaje de existencias**, o lleva más de un valor.[^google-merchant-listing]
- **Una valoración que no se ve en la página.** Si usas `aggregateRating`, el comprador tiene que poder ver esa valoración en la ficha.[^google-review-snippet] Cómo las trata Google está en [reseñas de producto](/es/glosario/resenas-de-producto/).
- **Un `priceValidUntil` caducado**, que puede dejar la ficha sin mostrarse.[^google-merchant-listing]
- **Un GTIN en forma de URL o con un dígito de control que no cuadra.**[^google-merchant-listing][^schemaorg-gtin]
- **Envíos y devoluciones declarados en varios sitios.** Google aplica un orden, de más fuerte a más débil: el _feed_ de Merchant Center, los ajustes de la Content API for Shopping, los ajustes de Merchant Center o Search Console, el marcado de la oferta en la ficha y, por último, el de la organización.[^google-merchant-listing] Si la ficha y la organización dicen cosas distintas, gana la ficha. El detalle está en [OfferShippingDetails](/es/glosario/offershippingdetails/) y [MerchantReturnPolicy](/es/glosario/merchantreturnpolicy/).

## Lo que hemos probado

- **La ficha.** Una ficha real, con el permiso escrito de la tienda (la página suma entonces `real-example`), o una ficha montada para la prueba y marcada «ejemplo ficticio». Pública, que se pueda comprar o simular la compra, con un precio mayor que cero, un mensaje de existencias, valoraciones visibles y un GTIN. Se anotan la plataforma y su versión, el tema y su versión, las apps que tocan el marcado y la fecha.
- **Los seis pasos, en orden.** La lista del paso 1 con la hora; el número de bloques JSON-LD y de nodos Product del paso 2, y si están en el HTML del servidor; la tabla del paso 3 rellena, propiedad por propiedad, con lo que dice el marcado y lo que dice la página; el resultado de la Prueba de resultados enriquecidos y del Schema Markup Validator sobre la misma URL el mismo día; y los dos informes de Search Console con su fecha.
- **Las capturas, fechadas.** Las tres que esta guía deja preparadas: la ficha con los datos señalados, la Prueba de resultados enriquecidos y el informe de fichas de comerciante. Con la fecha visible o en el pie, y sin datos de clientes.
- **Lo que se publica.** La tabla de abajo, cualquier desajuste encontrado con su corrección, y los límites: una ficha, un día, y lo que Google muestre ese día.

Probado en: plataforma y versión, tema y versión, fecha.

| Comprobación                          | Lo que dice la página | Lo que dice el marcado | ¿Coinciden? | Herramienta que lo detecta |
| ------------------------------------- | --------------------- | ---------------------- | ----------- | -------------------------- |
| Nombre                                |                       |                        |             |                            |
| Precio y moneda                       |                       |                        |             |                            |
| Disponibilidad                        |                       |                        |             |                            |
| GTIN                                  |                       |                        |             |                            |
| Valoración media y número de reseñas  |                       |                        |             |                            |
| Prueba de resultados enriquecidos     |                       |                        |             |                            |
| Schema Markup Validator               |                       |                        |             |                            |
| Search Console: fichas de comerciante |                       |                        |             |                            |
