Introducción: Por qué el Schema Markup puede duplicar tu visibilidad en E-Commerce
Imagina que tu producto aparece en los resultados de búsqueda de Google no con texto aburrido, sino con valoraciones con estrellas, precio, disponibilidad e imágenes de producto directamente en los SERPs. Ese es el poder del schema markup.
Schema Markup (también llamado Structured Data) es un lenguaje estandarizado que Google, Bing y otros motores de búsqueda entienden. Les muestra qué es un precio, quién es el fabricante, cuántas estrellas tiene la valoración — sin necesidad de analizarlo manualmente.
Las ventajas:
- Rich Results — Tu snippet es visualmente más atractivo
- Mayor CTR — Con estrellas y precio, más usuarios hacen clic
- Featured Snippets — Schema ayuda a Google a encontrar respuestas
- Optimización para búsqueda por voz — Google Assistant usa schema
- Señales E-A-T — Schema de autor/organización muestra autoridad a Google
En smplx. hemos visto que un product schema correctamente implementado puede aumentar las tasas de clics entre un 15-30%. Y esto con los mismos rankings — solo una mejor presentación.
1. Entender los tipos de Schema Markup para E-Commerce
Los tipos de schema más importantes para Shopify
Product Schema — El más importante
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Zapatillas de running Nike Air Max",
"image": "https://example.com/shoe.jpg",
"description": "Zapatillas de running premium con amortiguación de aire",
"brand": "Nike",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "127"
}
}
Organization Schema — Para el footer/logo
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "TuTienda.es",
"url": "https://tutienda.es",
"logo": "https://tutienda.es/logo.png",
"sameAs": [
"https://www.facebook.com/tutienda",
"https://twitter.com/tutienda"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "Customer Service",
"telephone": "+49-123-456789",
"email": "hello@tutienda.es"
}
}
BreadcrumbList — Para la navegación
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Inicio",
"item": "https://tutienda.es"
},
{
"@type": "ListItem",
"position": 2,
"name": "Zapatos",
"item": "https://tutienda.es/zapatos"
},
{
"@type": "ListItem",
"position": 3,
"name": "Zapatillas de running",
"item": "https://tutienda.es/zapatos/zapatillas-running"
}
]
}
Review Schema — Para reseñas de clientes
{
"@context": "https://schema.org",
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5"
},
"author": {
"@type": "Person",
"name": "Max Mueller"
},
"reviewBody": "Zapatos muy cómodos, los volvería a comprar.",
"datePublished": "2026-02-15"
}
FAQPage Schema — Para páginas de preguntas frecuentes
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "¿Qué talla de zapatos debería elegir?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Recomendamos pedir una talla más grande..."
}
}
]
}
2. Implementar Product Schema en Shopify
Implementación Liquid para páginas de producto
Los themes de Shopify a menudo ya tienen product schema integrado, pero suele estar incompleto. Aquí hay una implementación completa:
{% assign first_3d_model = product.media | where: "media_type", "model" | first %}
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": {{ product.title | json }},
"description": {{ product.description | strip_html | json }},
"brand": {
"@type": "Brand",
"name": {{ product.vendor | json }}
},
"image": [
{% for media in product.featured_image %}
"{{ media | image_url: width: 1200 }}"{{ forloop.last | unless: forloop.last: "," }}
{% endfor %}
],
"offers": {
"@type": "Offer",
"url": {{ product.url | absolute_url | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"price": {{ product.selected_or_first_available_variant.price | divided_by: 100 | json }},
"availability": "{% if product.selected_or_first_available_variant.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}",
"seller": {
"@type": "Organization",
"name": {{ shop.name | json }}
}
},
{% if product.selected_or_first_available_variant.sku %}
"sku": {{ product.selected_or_first_available_variant.sku | json }},
{% endif %}
{% if product.selected_or_first_available_variant.barcode %}
"gtin": {{ product.selected_or_first_available_variant.barcode | json }},
{% endif %}
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "127"
}
}
</script>
Mejores prácticas para Product Schema
1. Formatear precios correctamente:
// CORRECTO (con punto decimal)
"price": "89.99"
// INCORRECTO (con coma)
"price": "89,99"
2. Establecer disponibilidad dinámicamente:
"availability": "{% if product.available %}
https://schema.org/InStock
{% elsif product.selected_or_first_available_variant.available %}
https://schema.org/PreOrder
{% else %}
https://schema.org/OutOfStock
{% endif %}"
3. Recuento de inventario para avisos de poco stock:
"inventoryLevel": {
"@type": "QuantitativeValue",
"value": 5
}
3. Review y AggregateRating Schema
Review Schema para reseñas reales de clientes
Si usas un sistema de reseñas como Loox, Growave o Judge.me, tu theme debería generar automáticamente review schema.
Implementación manual para Shopify:
{% if product.metafields.reviews.rating %}
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": {{ product.title | json }},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": {{ product.metafields.reviews.rating | json }},
"bestRating": "5",
"worstRating": "1",
"reviewCount": {{ product.metafields.reviews.review_count | json }}
},
"review": [
{% for review in product.metafields.reviews.reviews %}
{
"@type": "Review",
"author": {
"@type": "Person",
"name": {{ review.author | json }}
},
"reviewRating": {
"@type": "Rating",
"ratingValue": {{ review.rating | json }}
},
"reviewBody": {{ review.body | json }},
"datePublished": {{ review.date | date: "%Y-%m-%d" | json }}
}{{ forloop.last | unless: forloop.last: "," }}
{% endfor %}
]
}
</script>
{% endif %}
Requisitos de Google Rich Result para reseñas
Para que tus reseñas aparezcan como "Rich Results" en Google:
- Se requiere al menos 1 reseña (Google tiende a mostrarlos a partir de 10+)
- Valoración con estrellas (se requieren 1-5 estrellas)
- Texto de la reseña obligatorio (no solo las estrellas)
- Nombre del revisor obligatorio
- Fecha de la reseña obligatoria
// CORRECTO — se mostrará como Rich Result
{
"@type": "Review",
"author": { "@type": "Person", "name": "Maria Schmidt" },
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"reviewBody": "Calidad excepcional, muy recomendable.",
"datePublished": "2026-02-15"
}
// INCORRECTO — no se mostrará como Rich Result
{
"@type": "Review",
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"datePublished": "2026-02-15"
// ¡Faltan reviewBody y author!
}
4. BreadcrumbList Schema para navegación por categorías
Los breadcrumbs son esenciales para tiendas grandes con muchos niveles de categorías.
Implementación Liquid de Breadcrumbs
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Inicio",
"item": "{{ shop.url }}"
}
{% if collection %}
,{
"@type": "ListItem",
"position": 2,
"name": {{ collection.title | json }},
"item": "{{ collection.url | absolute_url }}"
}
{% endif %}
{% if product %}
,{
"@type": "ListItem",
"position": 3,
"name": {{ product.title | json }},
"item": "{{ product.url | absolute_url }}"
}
{% endif %}
]
}
</script>
Ventajas:
- Navegación de breadcrumbs mostrada en los SERPs de Google
- Mejor rastreabilidad para estructuras complejas
- Experiencia de usuario mejorada
5. Organization Schema para el footer
El Organization schema debería implementarse una vez en el theme (por ejemplo, en el footer):
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": {{ shop.name | json }},
"url": {{ shop.url | json }},
"logo": "{{ 'logo.png' | asset_url | absolute_url }}",
"description": "Somos una tienda online líder en productos de alta calidad",
"sameAs": [
"https://www.facebook.com/{{ settings.facebook_username }}",
"https://twitter.com/{{ settings.twitter_username }}",
"https://www.instagram.com/{{ settings.instagram_username }}"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "Customer Service",
"telephone": {{ settings.phone_number | json }},
"email": {{ settings.email | json }}
},
"address": {
"@type": "PostalAddress",
"streetAddress": {{ settings.address | json }},
"addressLocality": {{ settings.city | json }},
"postalCode": {{ settings.zip | json }},
"addressCountry": "DE"
}
}
</script>
6. FAQ Schema para páginas de soporte
El FAQ schema es perfecto para preguntas frecuentes en páginas de categoría o producto:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "¿Qué talla de zapatos debería elegir?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Recomendamos usar la tabla de tallas. La mayoría de los clientes piden una talla más grande que su talla habitual de zapatos."
}
},
{
"@type": "Question",
"name": "¿Cuánto tarda el envío?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Alemania: 2-3 días laborables. UE: 5-7 días laborables."
}
}
]
}
</script>
7. BlogPosting Schema para artículos de blog
Para tu hub de contenido, cada artículo de blog debería estar equipado correctamente con BlogPosting schema:
{% if article %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": {{ article.title | json }},
"description": {{ article.excerpt_or_content | strip_html | truncate: 160 | json }},
"image": "{{ article.image | img_url: '1200x630' | absolute_url }}",
"datePublished": {{ article.published_at | date: "%Y-%m-%dT%H:%M:%SZ" | json }},
"dateModified": {{ article.updated_at | date: "%Y-%m-%dT%H:%M:%SZ" | json }},
"author": {
"@type": "Person",
"name": {{ article.author | json }}
},
"publisher": {
"@type": "Organization",
"name": {{ shop.name | json }},
"logo": {
"@type": "ImageObject",
"url": "{{ 'logo.png' | asset_url | absolute_url }}"
}
}
}
</script>
{% endif %}
8. Probar y validar el Schema Markup
Google Rich Results Test
Usa el Rich Results Test de Google para comprobar tu schema:
- Ve a https://search.google.com/test/rich-results
- Introduce la URL o pega el código
- Ejecuta la prueba
- Revisa los problemas
Errores comunes:
- Missing required property "price"
- Aggregating ratings without at least 1 review
- "availability" value is not valid
Schema.org Validator
Adicionalmente: https://validator.schema.org/
Allí puedes pegar el código JSON-LD directamente y validarlo.
9. Errores comunes en la implementación de Schema en Shopify
Error 1: Precios en formato incorrecto
// INCORRECTO
"price": "{{ product.price | money }}" // Se convierte en "€89,99"
// CORRECTO
"price": {{ product.price | divided_by: 100 | json }} // Se convierte en 89.99
Error 2: Valores de disponibilidad no estándar
// INCORRECTO
"availability": "Available"
// CORRECTO
"availability": "https://schema.org/InStock"
Error 3: Múltiples Product Schemas en una página
Google puede confundirse si generas múltiples product schemas (por ejemplo, para cada variante). Mejor: Un schema por página, con todos los datos de variantes.
// MALO: Múltiples schemas para cada variante
{% for variant in product.variants %}
<script type="application/ld+json">
{
"@type": "Product",
"name": {{ product.title | json }},
"sku": {{ variant.sku | json }}
}
</script>
{% endfor %}
// BUENO: Un schema con un Offer para cada variante
<script type="application/ld+json">
{
"@type": "Product",
"name": {{ product.title | json }},
"offers": [
{% for variant in product.variants %}
{
"@type": "Offer",
"sku": {{ variant.sku | json }},
"price": {{ variant.price | divided_by: 100 | json }},
"availability": "https://schema.org/InStock"
}{{ forloop.last | unless: forloop.last: "," }}
{% endfor %}
]
}
</script>
Error 4: Review Schema incompleto
Las reseñas necesitan Nombre + Valoración + Texto + Fecha para posicionar como Rich Results:
// INCORRECTO (solo estrellas, sin texto)
{
"@type": "Review",
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"author": { "@type": "Person", "name": "Max" }
}
// CORRECTO (completo)
{
"@type": "Review",
"author": { "@type": "Person", "name": "Max Mueller" },
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"reviewBody": "Gran servicio, muy satisfecho.",
"datePublished": "2026-02-15"
}
Error 5: Sin secuencias de escape en JSON
Especialmente importante con caracteres especiales:
// INCORRECTO
"description": "Zapatos bonitos de talla"
// CORRECTO (usa el filtro Liquid | json)
"description": {{ product.description | json }}
10. Schema Markup para diferentes tipos de themes de Shopify
Theme Debut (Theme estándar gratuito)
Debut tiene buen product schema desde el principio. Comprueba /snippets/product-schema.liquid.
Theme Dawn (Theme minimal más reciente)
Dawn tiene schema moderno con mejor estructura. Si tu theme está basado en Dawn, normalmente ya tienes buen schema.
Themes personalizados
Para themes personalizados: Comprueba theme.liquid o el include del header para schema tags. Si no están presentes, añade los bloques de código Liquid anteriores.
11. Oportunidades de Schema frecuentemente pasadas por alto
LocalBusiness Schema para tiendas locales
Si tienes un negocio local con showroom:
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "TuTienda GmbH",
"image": "https://example.com/photo.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "Calle Principal 123",
"addressLocality": "Munsterland",
"addressRegion": "NRW",
"postalCode": "48653",
"addressCountry": "DE"
},
"telephone": "+49-2541-777789",
"url": "https://example.com",
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday"],
"opens": "09:00",
"closes": "18:00"
}
}
AggregateOffer para variantes con rangos de precio
{
"@type": "AggregateOffer",
"priceCurrency": "EUR",
"lowPrice": "49.99",
"highPrice": "99.99",
"offerCount": "5",
"offers": [
{ "@type": "Offer", "price": "49.99", "sku": "SIZE-S" },
{ "@type": "Offer", "price": "69.99", "sku": "SIZE-M" }
]
}
12. ROI y monitorización del Schema Markup
Monitorizar impresiones de Rich Results
En Google Search Console:
- Ve a "Rendimiento"
- Filtro: "Tipo de búsqueda" → "Resultados de producto"
- Observa cuántas impresiones generan tus rich results
Las tiendas con product schema correcto suelen ver:
- +15-30% CTR (porque las estrellas y el precio son visibles)
- +20% impresiones (Google muestra más tus snippets)
- Mejor posición para "Featured Snippets"
Monitorización automatizada de Schema
Usa herramientas como:
- Screaming Frog: Rastrear regularmente los schema tags
- SE Ranking: Monitorizar errores de schema
- Structured Data Testing Tool de Yandex: Para SEO internacional
13. La solución de Schema Markup de smplx.
Para tiendas Shopify que quieran implementar schema markup completo:
Schema Setup e implementación (desde 6k €):
- Auditoría de todos los schema tags existentes
- Optimización del product schema para todos los productos
- Integración de review/rating schema
- Configuración de Organization + LocalBusiness schema
- Testing y validación
- Configuración de Google Search Console
Mantenimiento continuo del Schema (desde 1,5k €/mes):
- Monitorización de errores de schema
- Revisión regular de rich results
- Actualizaciones para nuevos estándares de schema
Esta inversión se amortiza rápidamente a través de mayor CTR y mejor visibilidad.
Conclusión: El Schema Markup no es opcional
El schema markup no es solo una técnica SEO — es imprescindible para el e-commerce moderno. Google favorece los sitios web con schema markup completo y los recompensa con mejor visibilidad y rich results.
Próximos pasos:
- Prueba tu web con Google Rich Results Test
- Comprueba tu plantilla del theme en busca de schema tags faltantes
- Implementa como mínimo: Product, Organization, BreadcrumbList
- Prueba regularmente con Rich Results Test
Si necesitas ayuda con la implementación de schema, contacta con el equipo de smplx. — optimizamos tu theme de Shopify para un structured data markup completo.
Contacto: hello@smplx.de | Munsterland, NRW