CommunityRedacción y edicióngithub.com

shaul1991/structured-data

Creación y verificación de datos estructurados JSON-LD: Event (eventos, exposiciones, ferias, estados de cancelación/ aplazamiento), Organization + sameAs (canales relacionados del sitio Naver), WebSite (nombre del sitio Google), BreadcrumbList, ItemList. Incluye diferencias de soporte entre Google y Naver.

¿Qué es structured-data?

Esta skill está diseñada para ayudar a desarrolladores y especialistas en SEO a crear y verificar datos estructurados en formato JSON-LD, alineados con las guías oficiales de Google Search Central y Naver Search Advisor. Cubre tipos de schema como Event, Organization con sameAs, WebSite, BreadcrumbList e ItemList, detallando las diferencias de soporte entre ambos motores de búsqueda (por ejemplo, Google no muestra rich results de Event en Corea del Sur a fecha de noviembre de 2026). La skill enfatiza la importancia de que los datos coincidan con el contenido visible, no inventar valores y usar JSON-LD como formato principal. Incluye plantillas de código, reglas específicas como el manejo de estados de eventos (cancelado, aplazado, reprogramado), y referencias a herramientas de validación como el Rich Results Test de Google. Es ideal para sitios web coreanos que buscan optimizar su presencia en buscadores con datos estructurados precisos y compatibles con las políticas de Google y Naver.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shaul1991/seo-skills/tree/HEAD/skills/structured-data

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Datos estructurados (JSON-LD)

Fundamento: Documentación de Google Search Central sobre datos estructurados y la guía de datos estructurados de Naver Search Advisor (verificado el 2026-11-04). Si se requiere un juicio crítico, se vuelve a consultar el texto original.

Principios comunes

  • Incluir solo valores que coincidan con el texto visible. Los precios, horarios, stock o valoraciones desconocidos se dejan vacíos y no se inventan (los documentos de funciones de IA de Google también recomiendan "los datos estructurados deben coincidir con el texto visible").
  • El marcado no garantiza resultados enriquecidos ni visibilidad (tanto Google como Naver lo especifican).
  • El formato predeterminado es JSON-LD (compatible con Google; Naver recomienda Microdata o JSON-LD). Se coloca en <head> o <body> dentro de <script type="application/ld+json">.
  • Validación: Rich Results Test de Google, Schema Markup Validator (la guía de Naver indica el uso de herramientas de schema.org), y el script scripts/seo-check.mjs de la skill seo-orchestrator (solo verifica análisis JSON y propiedades obligatorias).

Diferencias de soporte (2026-11-04)

TipoGoogleNaver
EventExiste documentación para el entorno de búsqueda de eventos. ⚠️ Corea del Sur no está en la lista de regiones compatibles (Australia, Brasil, Canadá, Alemania, India, América Latina, España, Reino Unido, EE. UU.)Sin guía
Organization/Person + sameAsInformación de la organizaciónCanales relacionados del sitio (página raíz; se requieren name, url, sameAs)
WebSiteNombre del sitio (página de inicio)—
BreadcrumbListCompatibleCompatible (se requiere name, position opcional)
ItemList (carrusel)Solo algunos tiposGuía de carrusel (ListItem) disponible

Para sitios de eventos dirigidos a Corea del Sur: el marcado de Event puede mantenerse para organizar datos precisos y para una posible expansión futura a otras regiones, pero no se debe asumir que actualmente aparecerán resultados enriquecidos de eventos en la búsqueda de Google en Corea del Sur. El rendimiento se evalúa mediante los resultados de búsqueda general (título, fragmento) y Search Console.

Event (según Google)

Reglas (según Datos estructurados de eventos de Google):

  • Marcar cada evento en su URL única (página de detalle). No en páginas de listado o calendario que enumeren varios eventos.
  • Obligatorio: name (nombre del evento; prohibido incluir nombre del lugar, precio o frases promocionales como "reserva ahora"), startDate (ISO-8601), location (Place + name + address).
  • Recomendado: endDate, eventStatus, description (contenido del evento, sin repetir fecha y lugar), image (ancho recomendado 1920px, mínimo 720px; formatos 16:9, 4:3, 1:1; varias imágenes), offers, organizer, performer, previousStartDate.
  • Fechas: si se desconoce la hora, solo la fecha ("2026-12-04"). No rellenar con T00:00:00. Si se conoce la hora, incluir la diferencia UTC (2026-12-04T10:00:00+09:00).
  • Para eventos de varios días, incluir tanto startDate como endDate. Si se requieren entradas separadas por día, crear un Event por día.
  • Para eventos simultáneos en varios lugares, crear un Event por lugar.
  • Solo si la entrada gratuita está oficialmente confirmada, usar offers.price: 0. Si la venta aún no ha comenzado, se puede omitir availability; validFrom indica el inicio de la venta.
  • Al cambiar el estado, mantener los demás valores y solo modificar eventStatus:
    • Cancelado: EventCancelled (no eliminar startDate ni location)
    • Aplazado/fecha sin definir: EventPostponed (mantener el startDate original)
    • Nueva fecha confirmada: EventRescheduled + nuevo startDate/endDate + opcional previousStartDate
  • No marcar como Event lo que no lo es (cupones, horario comercial, descuentos). Los eventos exclusivos para miembros o por invitación no son aptos para el entorno de eventos.
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "<Nombre oficial del evento con edición>",
  "startDate": "<YYYY-MM-DD o YYYY-MM-DDThh:mm:ss+09:00>",
  "endDate": "<YYYY-MM-DD>",
  "eventStatus": "https://schema.org/EventScheduled",
  "location": {
    "@type": "Place",
    "name": "<Nombre del recinto>",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "<Dirección>",
      "addressLocality": "<Ciudad/Distrito>",
      "addressRegion": "<Provincia>",
      "postalCode": "<Código postal>",
      "addressCountry": "KR"
    }
  },
  "image": ["<https://.../16x9.jpg>", "<https://.../4x3.jpg>", "<https://.../1x1.jpg>"],
  "description": "<Resumen del contenido del evento. No repetir fecha ni lugar>",
  "organizer": { "@type": "Organization", "name": "<Organizador>", "url": "<URL oficial del organizador>" }
}
</script>

offers solo se añade si el precio y la información de venta están oficialmente confirmados.

Páginas de listado

  • Las páginas de listado por región o mes no deben incluir múltiples eventos (Google solo admite páginas de eventos individuales). En su lugar, usar BreadcrumbList y, si es necesario, un ItemList con las URL de detalle.
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "url": "https://example.com/events/<id-1>" },
    { "@type": "ListItem", "position": 2, "url": "https://example.com/events/<id-2>" }
  ]
}
</script>

WebSite (nombre del sitio Google, solo página de inicio)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "<Nombre del sitio>",
  "alternateName": ["<Abreviatura>"],
  "url": "https://example.com/"
}
</script>

Usar el mismo nombre que og:site_name y el <title> de la página de inicio. Fuente: Nombres de sitio

Organization + sameAs (canales relacionados del sitio Naver, página raíz)

Dominios de canales relacionados que Naver utiliza para el análisis (2026-11-04): Naver Blog, SmartStore, Knowledge iN, ChzzK, Clip, Daangn, Threads, Instagram, YouTube, KakaoStory, KakaoTalk Channel, Tistory, TikTok, Facebook, X (Twitter). No se garantiza la visibilidad.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "<Nombre del sitio>",
  "url": "https://example.com/",
  "sameAs": [
    "https://cafe.naver.com/<cafe>",
    "https://pf.kakao.com/<canal>",
    "https://x.com/<cuenta>"
  ]
}
</script>
  • Incluir solo canales que estén realmente operativos. No añadir URL de canales antes de su apertura.
  • Daum también usa el mismo formato (Person/Organization + sameAs) con dominios compatibles diferentes: YouTube, Facebook, X, Instagram, Google Play, Apple Store, KakaoStory, Daum Cafe, KakaoTV, Tistory, Brunch (daum-search). Se pueden incluir canales reales de ambos motores de búsqueda en un solo bloque.
  • Naver Cafe no aparece explícitamente en la lista de canales relacionados anterior (2026-11-04). Se puede incluir, pero no se debe asumir que Naver lo usará como canal relacionado.
  • Fuente: Canales relacionados del sitio

BreadcrumbList (común a Google y Naver)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "<Nombre de categoría superior>", "item": "https://example.com/<superior>" },
    { "@type": "ListItem", "position": 2, "name": "<Nombre de categoría inferior>", "item": "https://example.com/<superior>/<inferior>" }
  ]
}
</script>
  • Naver: usar nombres descriptivos de la página en lugar de términos genéricos como "Inicio" o "top"; orden de lo general a lo específico; evitar nombres demasiado largos o compuestos solo por números y caracteres especiales.
  • Fuentes: Naver BreadcrumbList, Ruta de exploración de Google

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills relacionados