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.

El recorrido de JSON-LD: el marcado dentro de <script> → Google analiza la estructura → snippet enriquecido con estrellas de valoración y precio directamente en la SERP.
Google recomienda oficialmente JSON-LD como formato preferido. A diferencia de Microdata y RDFa, JSON-LD va dentro de una etiqueta <script> y no se integra en el marcado HTML, así que es más fácil de mantener y de actualizar sin tocar la maquetación.

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.

Visible

Coincide con la página

El marcado debe describir información que los lectores pueden ver y comprobar.

Elegible

Sigue las normas de cada resultado

Usa un tipo compatible y cumple sus requisitos de contenido y técnicos.

Validar

Prueba el grafo

Comprueba la sintaxis y los requisitos de las políticas, y luego inspecciona la página tras el renderizado.

Observar

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.

FormatoDónde se ubicaRelación con el HTMLRecomendación de Google
JSON-LDEtiqueta <script type="application/ld+json">Separado del HTMLPreferido
MicrodataAtributos itemscope, itemtype, itempropIntegrado en los elementos HTMLCompatible
RDFaAtributos vocab, typeof, propertyIntegrado en los elementos HTMLCompatible
JSON-LD es la opción clara para proyectos nuevos: el código queda aislado de la maquetación, es fácil de generar de forma dinámica y de actualizar sin tocar las plantillas HTML. Google admite Microdata y RDFa, pero cualquier cambio en la maquetación puede romper el marcado sin que se note.

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.

html
<!-- 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 schemaResultado enriquecido en GooglePrioridad
Product + OfferPrecio, disponibilidad y valoraciones en el snippet; tarjetas de ShoppingCrítico para e-commerce
LocalBusiness + AggregateRatingKnowledge Panel, Map Pack, estrellasCrítico para negocio local
Article / NewsArticleCarrusel de Top Stories, fecha de publicaciónAlta para medios y blogs
BreadcrumbListMigas de pan en lugar de la URL en el snippetAlta para cualquier sitio
EventTarjeta del evento con fecha y lugarMedia para páginas de eventos
RecipeTarjeta de receta con foto, tiempo y caloríasMedia para sitios de cocina
Organization (no local)Knowledge Graph, logotipo en los resultadosBase 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.

TipoPara quiénCampos adicionales clave
OrganizationCualquier empresa, ONG o marca sin dirección físicaname, url, logo, sameAs
LocalBusinessCualquier negocio con dirección físicaaddress, telephone, openingHours, geo
StoreTienda minoristacurrenciesAccepted, paymentAccepted
FoodEstablishmentCafetería o restaurante (tipo base)servesCuisine, menu, hasMap
RestaurantRestauranteservesCuisine, menu, acceptsReservations
CafeOrCoffeeShopCafeteríaservesCuisine
FastFoodRestaurantComida rápidaservesCuisine
MedicalOrganizationInstitución médica (base)medicalSpecialty
HospitalHospitalavailableService, medicalSpecialty
MedicalClinicClínicamedicalSpecialty, availableService
DentistConsulta dentalavailableService
LegalServiceBufete de abogados—
LawyerAbogado—
AccountingServiceDespacho de contabilidad o auditoría—
FinancialServiceBanco, aseguradora o firma de inversión—
RealEstateAgentAgencia inmobiliaria—
AutomotiveBusinessConcesionario o taller de automóviles (base)—
AutoDealerConcesionario de coches—
AutoRepairTaller mecánico—
HotelHotelamenityFeature, checkinTime, checkoutTime
SportsActivityLocationInstalación deportiva (base)availableService
GymOrHealthClubGimnasio o club de fitness—
GovernmentOrganizationOrganismo público—
EducationalOrganizationInstitución educativa (base)—
CollegeOrUniversityUniversidad o colegio universitario—
SchoolColegio—
CorporationGran corporacióntickerSymbol, 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.

json
{
  "@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.

json
{
  "@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"
}
Los días de la semana en openingHoursSpecification deben escribirse en inglés y con mayúscula inicial: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. Las horas usan el formato de 24 horas HH:MM. Para horario ininterrumpido: opens "00:00" y closes "23:59".

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.

TipoCaso de usoNotas
ProductSchema base para cualquier productoname, image, description obligatorios
OfferOferta concreta: precio y disponibilidadprice, priceCurrency, availability obligatorios
AggregateOfferRango de precios (varias ofertas)lowPrice, highPrice, offerCount
ProductGroupGrupo de productos con variantesvariesBy, hasVariant
IndividualProductVariante concreta dentro de un ProductGroupisVariantOf → ProductGroup
BrandMarca 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á.

json
{
  "@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"
  }
}
Los valores de availability deben usar el vocabulario que espera el tipo de schema correspondiente. Sigue la documentación vigente de la función y valida el conjunto completo en contexto; no deduzcas el resultado enriquecido a partir de un solo campo.

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.

json
{
  "@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.

json
{
  "@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"
      }
    }
  ]
}
Para un resultado enriquecido de Product, Google exige: name, image y un Offer anidado. Sin Offer (precio y disponibilidad), el snippet enriquecido no se mostrará. Además, brand, sku o gtin13 aumentan las opciones de aparecer en Google Shopping.

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.

json
{
  "@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"
  }
}
ratingCount es el número total de valoraciones, incluidas las que no tienen texto. reviewCount es el número de reseñas con texto. Si solo tienes valoraciones con estrellas, sin texto, usa ratingCount. Si solo tienes reseñas con texto, usa reviewCount. Se pueden indicar ambos campos a la vez.

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.

json
{
  "@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."
      }
    }
  ]
}
Requisito crítico de Google: las reseñas del marcado deben ser reseñas reales de usuarios reales de tu sitio. Está prohibido mostrar solo reseñas de cinco estrellas, ocultar las negativas o publicar reseñas escritas por el equipo editorial. Las infracciones provocan una acción manual y la pérdida de los resultados enriquecidos.

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 schemaRequisitos de imagenAncho mín.
ProductAl menos una imagen del producto; preferible fondo blanco800 px recomendado
Article / NewsArticleAl menos 3 imágenes: 16:9, 4:3 y 1:11200 px
RecipeEs obligatoria una imagen del plato terminadoCualquiera; 1200×628 es lo óptimo
LocalBusinessFotos de la entrada, el interior y la fachadaCualquiera
Organization (logo)Logotipo rectangular, con fondo blanco o transparente112×112 mín., proporción de hasta 1×10
Ejemplo de marcado de imagen de Schema.org en JSON-LD:
json
{
  "@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"
  }
}
En Article, Google exige al menos una imagen de 1200 px de ancho con proporción 16:9, 4:3 o 1:1. Incluye las tres variantes: Google elige la adecuada para cada ubicación. Las imágenes deben poder rastrearse (no bloqueadas en robots.txt) y tener una URL estable.

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.

html
<!-- 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>
Sobre seller: { "@id": "https://example.com/#organization" } es una referencia a la organización definida antes, mediante su @id. Se llama vinculación de grafo: Google conecta las entidades en un único Knowledge Graph sin duplicar datos.

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.

Paso 1Rich Results Test

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.

Paso 2Schema Markup Validator

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.

Paso 3Google Search Console

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.

Comprobación rápida: asegúrate de que JSON-LD esté en la respuesta HTML del servidor y no solo añadido con JavaScript. Abre DevTools → Network → busca la primera solicitud → Preview → busca script type="application/ld+json". Si falta el bloque, es posible que Googlebot no vea el marcado.

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?
Los datos estructurados ayudan a Google a entender las funciones que puede mostrar una página, pero Google no garantiza un resultado enriquecido ni describe el marcado como un atajo directo para posicionar. Úsalo para representar con precisión los datos visibles.
¿Se pueden añadir datos estructurados con Google Tag Manager?
Técnicamente sí: GTM puede inyectar una etiqueta <script> con JSON-LD. Pero Google prefiere el marcado en la respuesta HTML del servidor, no añadido con JavaScript. El marcado inyectado con GTM puede no reconocerse bien durante el rastreo si Googlebot no ejecuta JS en esa página. Lo óptimo es generar el JSON-LD en el servidor.
¿Cuántas reseñas conviene incluir en el marcado de Review?
Google no exige un número fijo. En la práctica: si hay menos de 10 reseñas, inclúyelas todas; si hay cientos, bastan entre 3 y 5 recientes. La calidad importa más: cada Review necesita texto, autor y fecha. Con muy pocas reseñas, Google puede no mostrar las estrellas en el snippet.
¿Por qué no aparecen los resultados enriquecidos si el marcado ha pasado la validación?
Puede haber varias razones: (1) Google todavía no ha vuelto a rastrear la página; espera de 1 a 4 semanas o solicita una nueva indexación; (2) reviewCount es demasiado bajo; (3) la página incumple las políticas de Google, por ejemplo si las reseñas parecen manipuladas; (4) los resultados enriquecidos de este tipo de schema compiten con otras funciones de la SERP. Revisa Search Console → Mejoras.
¿Cómo se debe indicar el precio en una tienda internacional?
Usa un Offer por cada moneda, o varios Offer dentro de un AggregateOffer. El campo priceCurrency usa los códigos ISO 4217: USD, EUR, GBP, JPY. Google muestra el precio del país o idioma para el que está pensada la página. Asegúrate de que hreflang esté bien configurado para que cada versión muestre el marcado en su propia moneda.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it