ai

Schema de tipo de contenido

MetricSpot comprueba que el `@type` de JSON-LD coincida con lo que la página realmente es — Article, Product, HowTo, FAQPage, etc. Sin él, los agentes de IA adivinan.

Qué comprueba esta verificación

Analiza cada bloque <script type="application/ld+json"> de la página y verifica que al menos uno declare un @type que coincida con el propósito real de la página. Un post de blog debería declarar Article (o BlogPosting / NewsArticle); una página de producto, Product; una guía paso a paso, HowTo; una página de preguntas frecuentes, FAQPage. Una página que sólo emite schema WebPage o WebSite falla — esos tipos son demasiado genéricos para decirle algo útil a los agentes.

Por qué importa

JSON-LD es la estructura que los agentes de IA y los buscadores usan para entender una página sin parsear la prosa. Cuando @type es específico, ChatGPT, Perplexity y Google AI Overviews saben qué campos extraer (headline, author, datePublished para un Article; price, availability, aggregateRating para un Product) y cómo citar la página en sus respuestas.

Cuando @type falta o es genérico, el agente recurre a heurísticas sobre el texto del cuerpo — más lento, menos preciso y mucho más propenso a saltarse tu página en favor de la de un competidor mejor marcada. La misma lógica se aplica a los rich results de Google: sólo los tipos específicos desbloquean las funciones de SERP (estrellas de reseña, fichas de receta, acordeones de FAQ) que suben el CTR.

Cómo arreglarlo

Elige el @type que mejor encaje con la página y emite un bloque JSON-LD completo en el <head>.

Article / BlogPosting / NewsArticle — para contenido editorial. Usa NewsArticle para noticias con marca temporal; BlogPosting para posts de blog; el Article plano es la opción segura por defecto.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "How to enable HSTS on nginx",
  "datePublished": "2026-05-11",
  "dateModified": "2026-05-11",
  "author": {
    "@type": "Person",
    "name": "Jane Doe",
    "url": "https://example.com/authors/jane-doe"
  },
  "image": "https://example.com/og/hsts.png",
  "mainEntityOfPage": "https://example.com/blog/hsts"
}
</script>

HowTo — para guías paso a paso (recetas, instrucciones de reparación, tutoriales de configuración). Campos obligatorios: name, step.

{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "Enable HSTS on nginx",
  "step": [
    { "@type": "HowToStep", "name": "Add the header", "text": "Add `add_header Strict-Transport-Security ...` to your server block." },
    { "@type": "HowToStep", "name": "Reload nginx", "text": "Run `nginx -t && systemctl reload nginx`." }
  ]
}

FAQPage — sólo cuando la página es realmente un Q&A. Mira Schema FAQ para el patrón completo.

Product — para páginas de producto individuales. Incluye offers, aggregateRating, review cuando los tengas.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "MetricSpot Premium",
  "description": "Unlimited audits, scheduled monitoring, PDF reports.",
  "brand": { "@type": "Brand", "name": "MetricSpot" },
  "offers": {
    "@type": "Offer",
    "price": "29.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}

Next.js — inyéctalo vía <Script> del App Router o un helper de metadata:

import Script from "next/script";

export default function Post() {
  const schema = {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    headline: "How to enable HSTS on nginx",
    datePublished: "2026-05-11",
    author: { "@type": "Person", name: "Jane Doe" }
  };
  return (
    <Script id="ld" type="application/ld+json">
      {JSON.stringify(schema)}
    </Script>
  );
}

Astro — fija el JSON-LD en el <head> de tu layout:

---
const schema = { "@context": "https://schema.org", "@type": "BlogPosting", /* … */ };
---
<script type="application/ld+json" set:html={JSON.stringify(schema)} />

WordPress — Yoast SEO, Rank Math y SEOPress autoemiten schema Article para los posts. Revisa el código fuente renderizado para confirmar que @type es Article / BlogPosting, no sólo WebPage. Para páginas de producto, WooCommerce emite schema Product por defecto.

Tras desplegar, valida con la Rich Results Test de Google y el Schema Markup Validator. Mira también: Datos estructurados JSON-LD, Schema Organization.

Preguntas frecuentes

¿Una página puede tener varios bloques @type?

Sí — habitual y recomendado. Un post de blog suele llevar Article + BreadcrumbList + Organization. Cada uno en su propio bloque <script type="application/ld+json">, o combinados en un único array @graph. No te contradigas (no declares la página como Article y Product a la vez).

¿Article o BlogPosting?

BlogPosting es una subclase de Article — un pelín más específico, sin desventajas. Usa BlogPosting para contenido de blog, NewsArticle para noticias con fecha, Article para guías editoriales o técnicas evergreen. Google los trata equivalentemente para rich results.

¿Y si mi página no encaja con ningún tipo?

Las landing genéricas pueden quedarse en WebPage — esta verificación lo marca como aviso suave, no como fallo. Pero la mayoría de los casos de “no encaja” sí encajan con algo: una página de precios es Product o Service, una página “Sobre nosotros” es AboutPage, una de contacto es ContactPage. Hojea la lista completa de tipos de schema.org antes de quedarte en WebPage por defecto.

Fuentes

Última actualización 2026-05-11