Schema.org Product en JSON-LD: guía e-commerce
El JSON-LD Product activa rich results de Google con estrellas, precio y stock. Aquí tienes la implementación completa en 2026 y los fallos a evitar.
El JSON-LD Product activa rich results de Google con estrellas, precio y stock. Aquí tienes la implementación completa en 2026 y los fallos a evitar.
¿Ya has visto esos resultados de Google donde una ficha de producto muestra directamente las estrellas, el precio y "En stock" bajo el título? Eso es un rich result, y es lo que activa un schema.org Product bien implementado. Los sitios que lo aprovechan suelen ver subir su CTR entre un 15 y un 40 % en la misma posición frente a un resultado sin rich result.
En 2026, la implementación con JSON-LD es el método oficial y recomendado por Google. Aquí tienes la versión completa, comprobable y lista para producción.
Hay tres formatos para añadir schema.org a una página web: Microdata (directamente en el HTML), RDFa (atributos HTML5) y JSON-LD (bloque de datos estructurados separado).
Google recomienda JSON-LD desde 2015, y en 2026 se ha convertido en el estándar de facto. Motivos:
<script type="application/ld+json"> dentro del <head>, independientemente del HTML visibleMicrodata sigue siendo legible para Google, pero ya no se recomienda para nuevas implementaciones.
Aquí tienes un JSON-LD Product mínimo que pasa las pruebas de Google y activa los rich results:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Chaussure Derby cuir homme",
"description": "Chaussure Derby en cuir italien, finie à la main, disponible du 38 au 46.",
"image": [
"https://example.com/products/derby-01.jpg",
"https://example.com/products/derby-02.jpg",
"https://example.com/products/derby-03.jpg"
],
"sku": "DERBY-BLK-44",
"brand": {
"@type": "Brand",
"name": "Atelier Maison"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/products/derby-cuir-homme",
"priceCurrency": "EUR",
"price": "149.00",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "38"
}
}
Desglose:
@context y @type — declaran que estamos hablando de un Product de schema.orgname — el nombre del producto (≤100 car. recomendado)description — descripción corta (150-300 car.)image — array de URLs de imágenes (mínimo 1, idealmente 3-6 en alta resolución)sku — identificador único del producto (obligatorio para rich results)brand — marca del productooffers — estructura de precio y disponibilidad (crítica)aggregateRating — valoración media si tienes reviews (activa las estrellas en las SERP)La parte más sensible. Cuatro reglas que debes respetar:
priceCurrency en ISO 4217: "EUR", "USD", "GBP"… no "€", "$" o "£". Es un error frecuente que hace fallar el rich result.
price como string, no como número: "149.00" y no 149.00. Google acepta ambos en 2026, pero las guidelines recomiendan string.
availability como URL completa de schema.org:
https://schema.org/InStock → en stockhttps://schema.org/OutOfStock → sin stockhttps://schema.org/PreOrder → preventahttps://schema.org/BackOrder → pedido bajo encargo con plazopriceValidUntil (opcional pero recomendado): fecha de fin de validez del precio en formato ISO 8601 ("2026-12-31"). A Google le sirve para detectar precios obsoletos.
Activa las estrellas en las SERP. Requisitos:
ratingValue entre 1 y 5reviewCount: mínimo 1, pero Google recomienda 3 o más para mostrarloAggregateRating con reviews inexistentes puede acabar en una acción manualConsejo: si tienes pocas reviews, muéstralas en tu página con un widget (Yotpo, Judge.me, Trustpilot) y recupera el count y la valoración media desde su API para el JSON-LD.
Antes de subirlo a producción, prueba cada plantilla de página de producto con Rich Results Test de Google.
Comprueba:
Errores habituales que detecta:
"availability" expected schema.org URL → has puesto "In stock" en lugar de la URL de schema.org"priceCurrency" invalid → divisa no ISO 4217Missing field "sku" → no hay SKU en el OfferMultiple products in single offer → has intentado meter varios productos en un solo bloque JSON-LDUna vez superada la prueba, Google Search Console muestra el rendimiento y los errores en un plazo de 2 a 4 semanas en Enhancements → Products.
Desde 2023, Shopify genera automáticamente un schema Product en las páginas de producto si usas un tema oficial. El problema es que el schema por defecto suele estar incompleto (sin AggregateRating, sin brand).
Para tener un schema completo:
snippets/product-structured-data.liquid o sections/main-product.liquidAlternativa: instala una app como SEO JSON-LD Schema o Smart SEO, que gestiona el schema de todo el catálogo de forma autónoma.
WooCommerce también genera un schema por defecto desde la v5+, pero incompleto. Plugins recomendados para completarlo:
Si usas un frontend personalizado, puedes inyectar el JSON-LD en el <head> mediante un componente SSR:
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(productSchema)
}}
/>
Ojo: generar el JSON-LD del lado del cliente (con useEffect) no funciona para SEO — Google rastrea en server-render. Asegúrate de que el JSON-LD esté en el HTML inicial que devuelve el servidor.
Contradicciones entre la página visible y el JSON-LD. Si la página muestra "En stock" pero el JSON-LD dice OutOfStock, Google ignora el JSON-LD. Sincroniza ambos con la misma fuente de datos.
Precio distinto en el JSON-LD y en la página. La misma lógica: Google detecta la divergencia e ignora el rich result.
Varios Product en un mismo <script>. Un solo @type: Product por script. Si tienes variantes, usa @type: ProductGroup con hasVariant: [...] para relacionarlas.
Imágenes no accesibles. Las URLs de las imágenes deben ser públicas (no detrás de un login). Prueba cada URL con curl para comprobar que devuelve un 200.
AggregateRating inventado. Poner 4,9 estrellas en una ficha sin reviews visibles puede acabar en una acción manual; el riesgo es real.
Si tu producto tiene varias tallas o colores, hay 2 enfoques:
Enfoque 1: un solo schema Product (el padre)
Más simple, válido para el 90 % de los casos. El schema padre describe el producto genérico, y la página gestiona las variantes mediante el selector. El precio mostrado es el predeterminado y la availability es InStock si al menos una variante está disponible.
Enfoque 2: ProductGroup con hasVariant
Más preciso, pero más complejo. Recomendado si tus variantes tienen precios muy distintos o disponibilidades diferentes (sin stock en la talla 44 pero no en la 42). Google soporta ProductGroup desde 2022.
Entre 1 y 4 semanas después de publicar el schema correcto. Google tiene que volver a rastrear la página y activar la elegibilidad a nivel de algoritmo. Puedes acelerarlo enviando la URL desde Search Console → URL Inspection → Request Indexing.
No directamente. El schema no es una señal de ranking. Activa los rich results (estrellas, precio, disponibilidad en las SERP), que aumentan el CTR, y eso puede mejorar el ranking de forma indirecta por la señal de interacción.
Opcional. Añadir Review individuales en el JSON-LD puede activar más rich features, pero también hace el código más pesado. En catálogos de más de 5.000 fichas, solo con AggregateRating suele ser más que suficiente.
No. Google no penaliza el origen del contenido, penaliza la calidad. Un JSON-LD correcto en una ficha generada por IA y de buena calidad puede beneficiarse de los rich results igual que cualquier otra.
<head> o en <body>?Ambos funcionan, pero <head> es la buena práctica. Coloca el JSON-LD justo antes de la etiqueta de cierre </head> para asegurarte de que los crawlers lo lean pronto.
En Bing sí, aunque con más retraso (a veces 2-3 meses). DuckDuckGo usa Bing como backend, así que sí, indirectamente. Ambos usan el mismo estándar schema.org, no hace falta adaptarlo.
En Ecomptimize, el JSON-LD Product se genera automáticamente a partir de los datos de tu catálogo Shopify o WooCommerce. Consulta la página Shopify o WooCommerce.
¿Te ha gustado este artículo?