Schema.org JSON-LD: datos estructurados para Google Search
Cómo elegir, generar y validar datos estructurados que coincidan con el contenido visible y sigan siendo elegibles para resultados enriquecidos, sin garantizarlos.
Los datos estructurados de Schema.org son un vocabulario que los buscadores usan para entender el contenido de una página. Bien implementados, convierten un snippet normal en un resultado enriquecido: con valoraciones en estrellas, precios de productos, horarios comerciales o fotos que se muestran directamente en los resultados de Google.
Este artículo cubre el sistema completo: desde elegir el formato adecuado y priorizar los schemas hasta el código JSON-LD concreto para Organization, Product, AggregateRating, Review e ImageObject, con especial atención a los subtipos que más se suelen pasar por alto.
<script> → Google analiza la estructura → snippet enriquecido con estrellas de valoración y precio directamente en la SERP.Qué es Schema.org y por qué usar datos estructurados
Schema.org es un proyecto conjunto de Google, Bing, Yahoo y Yandex lanzado en 2011. El vocabulario contiene más de 900 tipos de datos y miles de propiedades. Todos los tipos heredan del tipo base Thing y se ramifican en Person, Organization, Product, Event, CreativeWork, Action y otros.
Coincide con la página
El marcado debe describir información que los lectores pueden ver y comprobar.
Sigue las normas de cada resultado
Usa un tipo compatible y cumple sus requisitos de contenido y técnicos.
Prueba el grafo
Comprueba la sintaxis y los requisitos de las políticas, y luego inspecciona la página tras el renderizado.
Sin garantía de visualización
Superar una prueba no garantiza que se muestre un resultado enriquecido.
El marcado de Schema.org resuelve tres problemas a la vez. Para los buscadores: identifica las entidades sin ambigüedad. Esto es una organización, no solo un texto con un nombre de empresa; esto es un precio de producto, no solo un número. Para los usuarios: los resultados enriquecidos en la SERP hacen que el snippet sea más informativo antes del clic. Para el negocio: más CTR y presencia en el Knowledge Graph.
Formatos: JSON-LD, Microdata y RDFa
Los datos estructurados de Schema.org se pueden añadir de tres formas. En proyectos nuevos la elección es clara: JSON-LD. Los otros dos son compatibles, pero más difíciles de mantener.
| Formato | Dónde se ubica | Relación con el HTML | Recomendación de Google |
|---|---|---|---|
| JSON-LD | Etiqueta <script type="application/ld+json"> | Separado del HTML | Preferido |
| Microdata | Atributos itemscope, itemtype, itemprop | Integrado en los elementos HTML | Compatible |
| RDFa | Atributos vocab, typeof, property | Integrado en los elementos HTML | Compatible |
La plantilla base de JSON-LD es la misma para cualquier página: una etiqueta <script> con type application/ld+json, que contiene un objeto JSON con los campos obligatorios @context y @type. La etiqueta puede ir en <head> o al final de <body>. Varios schemas, varios bloques <script> separados.
<!-- Base JSON-LD template -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Site Name",
"url": "https://example.com"
}
</script>
<!-- Multiple schemas — multiple <script> blocks -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Company",
"url": "https://example.com"
}
</script>Prioridad de los schemas: qué da resultados enriquecidos en Google
No todos los tipos de Schema.org generan un resultado enriquecido. Google admite un conjunto limitado de tipos que aportan mejoras visuales en la SERP. Los demás schemas ayudan a Google a entender el contenido, pero no cambian el aspecto del snippet.
Negocios y organizaciones
LocalBusiness, Restaurant, Store: horario, dirección, teléfono y valoraciones en el Knowledge Panel. Máxima prioridad para negocios locales.
Productos y precios
Product + Offer: precio, disponibilidad y valoraciones directamente en el snippet. Google Shopping y snippets enriquecidos. Imprescindible en e-commerce.
Contenido y FAQ
Article y otros tipos compatibles deben describir con precisión el contenido visible. El contenido de FAQ sigue siendo útil para el lector, pero no garantiza una ampliación del resultado en la búsqueda.
Valoraciones y reseñas
AggregateRating + Review: valoraciones en estrellas en el snippet. Es el elemento visual más llamativo. Funciona con Product, LocalBusiness, Recipe y Course.
| Tipo de schema | Resultado enriquecido en Google | Prioridad |
|---|---|---|
| Product + Offer | Precio, disponibilidad y valoraciones en el snippet; tarjetas de Shopping | Crítico para e-commerce |
| LocalBusiness + AggregateRating | Knowledge Panel, Map Pack, estrellas | Crítico para negocio local |
| Article / NewsArticle | Carrusel de Top Stories, fecha de publicación | Alta para medios y blogs |
| BreadcrumbList | Migas de pan en lugar de la URL en el snippet | Alta para cualquier sitio |
| Event | Tarjeta del evento con fecha y lugar | Media para páginas de eventos |
| Recipe | Tarjeta de receta con foto, tiempo y calorías | Media para sitios de cocina |
| Organization (no local) | Knowledge Graph, logotipo en los resultados | Base para todos los sitios |
Organization: schema base y todos sus subtipos
Organization es el tipo base para cualquier empresa, organización o marca. La jerarquía de subtipos es amplia, y cada subtipo añade campos específicos. Elegir el subtipo correcto importa: Google lo usa para determinar el contexto del negocio y qué mostrar en el Knowledge Panel.
| Tipo | Para quién | Campos adicionales clave |
|---|---|---|
| Organization | Cualquier empresa, ONG o marca sin dirección física | name, url, logo, sameAs |
| LocalBusiness | Cualquier negocio con dirección física | address, telephone, openingHours, geo |
| Store | Tienda minorista | currenciesAccepted, paymentAccepted |
| FoodEstablishment | Cafetería o restaurante (tipo base) | servesCuisine, menu, hasMap |
| Restaurant | Restaurante | servesCuisine, menu, acceptsReservations |
| CafeOrCoffeeShop | Cafetería | servesCuisine |
| FastFoodRestaurant | Comida rápida | servesCuisine |
| MedicalOrganization | Institución médica (base) | medicalSpecialty |
| Hospital | Hospital | availableService, medicalSpecialty |
| MedicalClinic | Clínica | medicalSpecialty, availableService |
| Dentist | Consulta dental | availableService |
| LegalService | Bufete de abogados | — |
| Lawyer | Abogado | — |
| AccountingService | Despacho de contabilidad o auditoría | — |
| FinancialService | Banco, aseguradora o firma de inversión | — |
| RealEstateAgent | Agencia inmobiliaria | — |
| AutomotiveBusiness | Concesionario o taller de automóviles (base) | — |
| AutoDealer | Concesionario de coches | — |
| AutoRepair | Taller mecánico | — |
| Hotel | Hotel | amenityFeature, checkinTime, checkoutTime |
| SportsActivityLocation | Instalación deportiva (base) | availableService |
| GymOrHealthClub | Gimnasio o club de fitness | — |
| GovernmentOrganization | Organismo público | — |
| EducationalOrganization | Institución educativa (base) | — |
| CollegeOrUniversity | Universidad o colegio universitario | — |
| School | Colegio | — |
| Corporation | Gran corporación | tickerSymbol, legalName |
Organization base
El schema Organization base se añade a la página de inicio de cualquier sitio. Ayuda a Google a identificar la marca y a vincularla con perfiles externos mediante sameAs. El campo @id con un identificador único permite que otros schemas referencien esta organización sin duplicar datos.
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Company Name",
"legalName": "Example LLC",
"url": "https://example.com",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png",
"width": 200,
"height": 60
},
"description": "Brief company description for Knowledge Graph.",
"foundingDate": "2015",
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+1-800-123-4567",
"contactType": "customer service",
"availableLanguage": "English"
},
"sameAs": [
"https://www.linkedin.com/company/yourcompany",
"https://twitter.com/yourcompany",
"https://www.facebook.com/yourcompany"
]
}LocalBusiness: negocio físico con dirección
LocalBusiness es el subtipo más importante para negocios con ubicación física. Un schema bien completado mejora las opciones de aparecer en el Google Map Pack (el bloque de mapa en la parte superior de la SERP) y en un Knowledge Panel con el horario comercial. Campos clave: address, geo, openingHoursSpecification, telephone y priceRange.
{
"@context": "https://schema.org",
"@type": "Restaurant",
"@id": "https://example.com/#business",
"name": "The Birch Restaurant",
"url": "https://example.com",
"telephone": "+1-212-555-0100",
"email": "info@example.com",
"servesCuisine": ["American", "European"],
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10001",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 40.7128,
"longitude": -74.0060
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "12:00",
"closes": "23:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday", "Sunday"],
"opens": "12:00",
"closes": "00:00"
}
],
"image": "https://example.com/photos/restaurant.jpg",
"hasMap": "https://maps.google.com/?cid=XXXXXX"
}sameAs: enlazar perfiles externos
El campo sameAs indica a Google que tu organización es la misma entidad que aparece en perfiles de plataformas externas. Es el campo clave para construir el Knowledge Graph, la base de datos de entidades de Google. Cuantas más fuentes fiables confirmen que una organización existe, más probable es que aparezca en un Knowledge Panel.
- Wikidata (la fuente más fiable): https://www.wikidata.org/wiki/Q...
- Wikipedia: https://en.wikipedia.org/wiki/...
- LinkedIn, Twitter/X, Facebook, Instagram
- El canal de YouTube de la organización
- Perfil de Google Business (para negocios locales)
- Directorios sectoriales: registros médicos, colegios profesionales, etc.
Product: schema de producto y todos sus subtipos
Product es el schema base para cualquier producto o artículo. Funciona junto con Offer (precio y disponibilidad) y AggregateRating (valoración). Un schema Product bien implementado genera un resultado enriquecido en Google: precio, estado de disponibilidad y valoraciones en estrellas directamente en el snippet.
| Tipo | Caso de uso | Notas |
|---|---|---|
| Product | Schema base para cualquier producto | name, image, description obligatorios |
| Offer | Oferta concreta: precio y disponibilidad | price, priceCurrency, availability obligatorios |
| AggregateOffer | Rango de precios (varias ofertas) | lowPrice, highPrice, offerCount |
| ProductGroup | Grupo de productos con variantes | variesBy, hasVariant |
| IndividualProduct | Variante concreta dentro de un ProductGroup | isVariantOf → ProductGroup |
| Brand | Marca del producto (anidada en Product) | name obligatorio |
Product base con Offer
Google exige un conjunto mínimo de campos para un resultado enriquecido: name, image, description y un Offer anidado con priceCurrency, price y availability. Si falta al menos uno de estos campos, el snippet del producto no se enriquecerá.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"description": "Lightweight running shoes with foam sole for road running. Weight 230g, drop 10mm.",
"sku": "AIRX-001-BLK",
"mpn": "AIRX001",
"gtin13": "0123456789012",
"brand": {
"@type": "Brand",
"name": "RunMax"
},
"image": [
"https://example.com/photos/airx-front.jpg",
"https://example.com/photos/airx-side.jpg",
"https://example.com/photos/airx-back.jpg"
],
"offers": {
"@type": "Offer",
"url": "https://example.com/products/air-x-pro",
"priceCurrency": "USD",
"price": "89.99",
"priceValidUntil": "2026-12-31",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"seller": {
"@type": "Organization",
"name": "RunMax Store"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128"
}
}AggregateOffer: rango de precios
Si un producto lo venden varios vendedores o tiene variantes con precios distintos, usa AggregateOffer. Muestra un rango de precios (lowPrice – highPrice) en lugar de un precio único.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Galaxy S25 Smartphone",
"brand": { "@type": "Brand", "name": "Samsung" },
"image": "https://example.com/galaxy-s25.jpg",
"offers": {
"@type": "AggregateOffer",
"priceCurrency": "USD",
"lowPrice": "799",
"highPrice": "1099",
"offerCount": "3",
"offers": [
{
"@type": "Offer",
"name": "128 GB / Black",
"price": "799",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
{
"@type": "Offer",
"name": "256 GB / White",
"price": "899",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
{
"@type": "Offer",
"name": "512 GB / Violet",
"price": "1099",
"priceCurrency": "USD",
"availability": "https://schema.org/PreOrder"
}
]
}
}ProductGroup: productos con variantes
ProductGroup es un grupo de productos relacionados que se diferencian por parámetros (talla, color, material). Se usa en páginas de producto con variantes. Cada variante concreta es un Product anidado, con isVariantOf apuntando al ProductGroup padre.
{
"@context": "https://schema.org",
"@type": "ProductGroup",
"name": "Air X Pro Running Shoes",
"description": "Road running shoes available in multiple colours and sizes.",
"url": "https://example.com/products/air-x-pro",
"brand": { "@type": "Brand", "name": "RunMax" },
"productGroupID": "AIRX-PRO",
"variesBy": ["https://schema.org/color", "https://schema.org/size"],
"hasVariant": [
{
"@type": "Product",
"name": "Air X Pro — Black, US 9",
"sku": "AIRX-BLK-9",
"color": "Black",
"size": "US 9",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Air X Pro — Blue, US 11",
"sku": "AIRX-BLU-11",
"color": "Blue",
"size": "US 11",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/OutOfStock"
}
}
]
}AggregateRating y Review: valoraciones y reseñas
Las valoraciones en estrellas de los resultados de búsqueda son el elemento visual más llamativo del snippet. Se implementan mediante dos tipos relacionados: AggregateRating (la puntuación combinada de todas las valoraciones) y Review (una reseña de texto individual). Ambos tipos siempre se anidan dentro de un schema padre: Product, LocalBusiness, Recipe, Course, Book, etc.
AggregateRating: puntuación combinada
AggregateRating refleja la puntuación global: el valor medio y el número de votos. Google lo muestra como estrellas en el snippet. Campos obligatorios: ratingValue (media) y reviewCount o ratingCount.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"image": "https://example.com/airx.jpg",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"bestRating": "5",
"worstRating": "1",
"reviewCount": "128",
"ratingCount": "215"
}
}Review: reseñas individuales
Review es el schema de una reseña de texto individual. Se anida dentro del objeto padre a través de la propiedad review. Cada Review contiene un autor, una valoración y el texto de la reseña. Google puede mostrar un fragmento del texto de la reseña en el resultado enriquecido.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"image": "https://example.com/airx.jpg",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128"
},
"review": [
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"name": "Great shoes for daily runs",
"reviewBody": "Been running in them for 3 months — sole holds up well, feet don't tire. Recommend for road running.",
"datePublished": "2026-03-15",
"author": {
"@type": "Person",
"name": "Alex K."
}
},
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "4",
"bestRating": "5"
},
"reviewBody": "Good cushioning, but runs a little small. Order half a size up.",
"datePublished": "2026-04-01",
"author": {
"@type": "Person",
"name": "Maria S."
}
}
]
}ImageObject: fotos en los datos estructurados
Las imágenes en Schema.org se pueden indicar de dos formas: como cadena con la URL ("image": "https://example.com/photo.jpg") o como ImageObject con metadatos. Una cadena basta en la mayoría de schemas, pero para Article, Recipe y HowTo Google recomienda ImageObject, porque permite indicar dimensiones, pie de foto y formato.
| Tipo de schema | Requisitos de imagen | Ancho mín. |
|---|---|---|
| Product | Al menos una imagen del producto; preferible fondo blanco | 800 px recomendado |
| Article / NewsArticle | Al menos 3 imágenes: 16:9, 4:3 y 1:1 | 1200 px |
| Recipe | Es obligatoria una imagen del plato terminado | Cualquiera; 1200×628 es lo óptimo |
| LocalBusiness | Fotos de la entrada, el interior y la fachada | Cualquiera |
| Organization (logo) | Logotipo rectangular, con fondo blanco o transparente | 112×112 mín., proporción de hasta 1×10 |
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"image": [
{
"@type": "ImageObject",
"url": "https://example.com/airx-front.jpg",
"width": 1200,
"height": 1200,
"caption": "Air X Pro — front view"
},
{
"@type": "ImageObject",
"url": "https://example.com/airx-side.jpg",
"width": 1200,
"height": 1200,
"caption": "Air X Pro — side view"
}
],
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}Combinar schemas en una misma página
Varios schemas en una misma página se añaden como bloques <script> separados. A continuación, un marcado completo de página de producto: la organización que vende, las migas de pan, el producto con precio, valoración y reseña.
<!-- Schema 1: Selling organisation (on all site pages) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "RunMax Store",
"url": "https://example.com",
"logo": "https://example.com/logo.png"
}
</script>
<!-- Schema 2: Breadcrumbs -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com" },
{ "@type": "ListItem", "position": 2, "name": "Footwear", "item": "https://example.com/shoes" },
{ "@type": "ListItem", "position": 3, "name": "Air X Pro" }
]
}
</script>
<!-- Schema 3: Product with price, rating and review (on product page) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Air X Pro Running Shoes",
"description": "Road running shoes.",
"sku": "AIRX-001",
"brand": { "@type": "Brand", "name": "RunMax" },
"image": "https://example.com/airx.jpg",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"priceValidUntil": "2026-12-31",
"seller": { "@id": "https://example.com/#organization" }
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128",
"bestRating": "5"
},
"review": {
"@type": "Review",
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"author": { "@type": "Person", "name": "Alex K." },
"reviewBody": "Excellent shoes, run in them every day.",
"datePublished": "2026-04-10"
}
}
</script>Validar los datos estructurados
Tras la implementación, valida siempre el marcado. Google ofrece dos herramientas oficiales, y Search Console muestra la situación real de lo que ve el rastreador en las páginas indexadas.
Abre search.google.com/test/rich-results e introduce una URL o HTML. La herramienta muestra qué resultados enriquecidos están disponibles para el schema, qué campos son obligatorios y cuáles están rellenados de forma incorrecta. Es el único lugar donde se puede confirmar si el marcado generará mejoras visuales en la SERP.
Abre validator.schema.org para una validación completa frente al estándar de Schema.org, no solo frente a los tipos que admite Google. Comprueba las propiedades obligatorias de cada tipo y avisa de combinaciones incompatibles, algo útil en schemas anidados complejos.
Search Console → Mejoras → selecciona el tipo de schema. Esta sección muestra los errores reales en las páginas indexadas. Los errores de aquí son lo que bloquea ahora mismo los resultados enriquecidos, en URL activas: la señal más útil para actuar.
Lista de comprobación de datos estructurados
Implementación base de JSON-LD
- Etiqueta <script type="application/ld+json"> añadida en <head> o al final de <body>
- Cada bloque contiene @context: "https://schema.org" y @type
- Todas las entidades principales tienen un @id único en formato URL con fragmento (#nombre)
- El JSON es válido: sin comas finales y con todas las comillas cerradas
- El marcado está presente en la respuesta HTML del servidor, no solo mediante JavaScript
Organization / LocalBusiness
- Subtipo correcto (Restaurant, Dentist, AutoDealer, etc.) en lugar de Organization genérico
- Completados: name, url, telephone y address (para LocalBusiness)
- geo añadido con coordenadas precisas (latitude, longitude)
- openingHoursSpecification completado con nombres de día en inglés y horas en formato HH:MM
- sameAs con enlaces a al menos perfiles sociales y Wikidata (si existe)
Product
- Completados: name, description e image (al menos una imagen)
- Offer anidado con: price, priceCurrency, availability y priceValidUntil
- availability con la URL completa: https://schema.org/InStock
- sku y/o gtin13 indicados para Google Shopping
- AggregateRating anidado si la página tiene valoraciones de usuarios
Valoraciones y reseñas
- AggregateRating contiene ratingValue, reviewCount, bestRating y worstRating
- Los valores de AggregateRating coinciden con datos reales del sitio
- Review está anidada dentro del objeto padre (Product / LocalBusiness), no suelta
- Cada Review tiene author (Person), reviewRating, datePublished y reviewBody
- Las reseñas del marcado son reseñas reales de usuarios reales
Preguntas frecuentes
¿El marcado de Schema.org afecta directamente a las posiciones en Google?
¿Se pueden añadir datos estructurados con Google Tag Manager?
¿Cuántas reseñas conviene incluir en el marcado de Review?
¿Por qué no aparecen los resultados enriquecidos si el marcado ha pasado la validación?
¿Cómo se debe indicar el precio en una tienda internacional?
Check it with SpiderHead
Free and local: run the audit on your own machine.



