CommunityRédaction et éditiongithub.com

shaul1991/structured-data

Création et vérification de données structurées JSON-LD : Event, Organization + sameAs, WebSite, BreadcrumbList, ItemList. Inclut les différences de prise en charge entre Google et Naver.

Qu'est-ce que structured-data ?

Cette compétence permet à un agent IA de créer et de valider des données structurées au format JSON-LD pour améliorer le référencement (SEO) sur Google et Naver. Elle couvre les types principaux de schema.org : Event (avec gestion des statuts annulé, reporté, reprogrammé), Organization avec sameAs (pour les canaux associés Naver et Daum), WebSite (pour le nom du site Google), BreadcrumbList et ItemList. La compétence est basée sur les documentations officielles de Google Search Central et de Naver Search Advisor (vérifiées au 4 novembre 2026). Elle précise les différences critiques de prise en charge entre les deux moteurs, notamment le fait que Google ne prend actuellement pas en charge les résultats enrichis d'événements en Corée. Les règles incluent : n'utiliser que des valeurs visibles sur la page, ne pas inventer de données, préférer JSON-LD, et intégrer les recommandations spécifiques à chaque moteur (ex: pour les listes, Google préfère une page par événement, tandis que Naver accepte ItemList). Le skill fournit des templates prêts à l'emploi, des exemples de code et des règles de validation pour garantir la conformité.

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

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Données structurées (JSON-LD)

Sources : Documentation des données structurées de Google Search Central et guide des données structurées de Naver Search Advisor (vérifié le 4 novembre 2026). Pour les décisions importantes, rouvrir les documents originaux.

Principes communs

  • N'insérez que des valeurs correspondant au texte visible sur la page. Si vous ne connaissez pas un prix, un horaire, un stock ou une évaluation, laissez le champ vide et ne le créez pas (la documentation de Google sur les fonctionnalités IA recommande également que "les données structurées correspondent au texte visible").
  • Le marquage ne garantit pas l'obtention de résultats enrichis ou d'une exposition (Google et Naver le précisent tous deux).
  • Le format par défaut est JSON-LD (pris en charge par Google, Naver recommande Microdata ou JSON-LD). À placer dans <script type="application/ld+json"> dans <head> ou <body>.
  • Validation : Test des résultats enrichis de Google, Schema Markup Validator (le guide de Naver recommande l'outil de schema.org), et scripts/seo-check.mjs du Skill seo-orchestrator (vérifie l'analyse JSON et les propriétés obligatoires uniquement).

Différences de prise en charge (4 novembre 2026)

TypeGoogleNaver
EventDocumentation sur l'environnement de recherche d'événements disponible. ⚠️ La Corée ne figure pas dans la liste des régions couvertes (Australie, Brésil, Canada, Allemagne, Inde, Amérique latine, Espagne, Royaume-Uni, États-Unis)Pas de guide
Organization/Person + sameAsInformations sur l'organisationCanaux associés du site (page racine, name·url·sameAs obligatoires)
WebSiteNom du site (page d'accueil)—
BreadcrumbListPris en chargePris en charge (name obligatoire, position facultatif)
ItemList (carrousel)Uniquement certains typesGuide pour le carrousel (ListItem) disponible

Pour un site d'événements ciblant la Corée : le balisage Event peut être conservé pour une structuration précise des données et une future expansion vers d'autres régions, mais ne partez pas du principe que les résultats enrichis d'événements apparaissent actuellement dans la recherche Google en Corée. Évaluez les performances via les résultats de recherche classiques (titres et extraits) et la Search Console.

Event (selon Google)

Règles (données structurées d'événements Google) :

  • Marquez chaque événement sur une URL unique (page de détail). Pas sur une page de liste ou de calendrier répertoriant plusieurs événements.
  • Obligatoire : name (titre de l'événement. Interdiction des noms de lieu, prix, ou expressions promotionnelles comme "réservez maintenant"), startDate (ISO-8601), location (Place + name + address).
  • Recommandé : endDate, eventStatus, description (contenu de l'événement, sans répéter la date et le lieu), image (largeur recommandée 1 920 px, minimum 720 px, plusieurs formats 16:9·4:3·1:1), offers, organizer, performer, previousStartDate.
  • Date : si l'heure est inconnue, indiquez uniquement la date ("2026-12-04"). Ne complétez pas avec T00:00:00. Si l'heure est connue, incluez le décalage UTC (2026-12-04T10:00:00+09:00).
  • Pour un événement de plusieurs jours, incluez startDate et endDate. Si des billets séparés sont nécessaires pour chaque jour, créez un Event par date.
  • Pour un événement se déroulant simultanément dans plusieurs lieux, créez un Event par lieu.
  • Utilisez offers.price: 0 uniquement si l'entrée gratuite est officiellement confirmée. Avant la mise en vente, vous pouvez omettre availability. validFrom correspond à l'heure de début de la vente.
  • En cas de changement de statut, ne modifiez que eventStatus et conservez les autres valeurs inchangées :
    • Annulation EventCancelled (ne supprimez pas startDate·location)
    • Report sans nouvelle date EventPostponed (conservez la startDate d'origine)
    • Nouvelle date confirmée EventRescheduled + nouveau startDate/endDate + previousStartDate facultatif
  • Ne marquez pas comme Event ce qui n'en est pas un (coupons, horaires d'ouverture, soldes). Les événements réservés aux membres ou sur invitation ne sont pas éligibles à l'environnement événementiel.
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "<Nom officiel de l'événement et édition>",
  "startDate": "<YYYY-MM-DD ou YYYY-MM-DDThh:mm:ss+09:00>",
  "endDate": "<YYYY-MM-DD>",
  "eventStatus": "https://schema.org/EventScheduled",
  "location": {
    "@type": "Place",
    "name": "<Nom du lieu>",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "<Adresse postale>",
      "addressLocality": "<Ville·Arrondissement>",
      "addressRegion": "<Province·Département>",
      "postalCode": "<Code postal>",
      "addressCountry": "KR"
    }
  },
  "image": ["<https://.../16x9.jpg>", "<https://.../4x3.jpg>", "<https://.../1x1.jpg>"],
  "description": "<Résumé du contenu de l'événement. Ne répétez pas la date ou le lieu>",
  "organizer": { "@type": "Organization", "name": "<Organisateur>", "url": "<URL officielle de l'organisateur>" }
}
</script>

N'ajoutez offers que si le prix et les informations de vente sont officiellement confirmés.

Pages de liste

  • N'insérez pas plusieurs Event dans une page de liste (par région, par mois) : Google ne prend en charge que les pages d'événements uniques. Utilisez plutôt BreadcrumbList et, si nécessaire, ItemList contenant les URL de détail.
<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 (Nom du site Google, page d'accueil uniquement)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "<Nom du site>",
  "alternateName": ["<Abréviation>"],
  "url": "https://example.com/"
}
</script>

Utilisez le même nom que og:site_name et le <title> de la page d'accueil. Source : Noms de sites

Organization + sameAs (Canaux associés Naver, page racine)

Domaines des canaux associés utilisés par Naver pour l'analyse (4 novembre 2026) : Naver Blog, SmartStore, KnowledgeiN, Chzzk, Clip, Daangn, Threads, Instagram, YouTube, KakaoStory, KakaoTalk Channel, Tistory, TikTok, Facebook, X (Twitter). L'exposition n'est pas garantie.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "<Nom du site>",
  "url": "https://example.com/",
  "sameAs": [
    "https://cafe.naver.com/<Café>",
    "https://pf.kakao.com/<Chaîne>",
    "https://x.com/<Compte>"
  ]
}
</script>
  • N'incluez que les canaux réellement actifs. N'ajoutez pas d'URL de canaux non encore ouverts.
  • Daum utilise également le même format (Person/Organization + sameAs) avec des domaines de support différents : YouTube, Facebook, X, Instagram, Google Play, Apple Store, KakaoStory, Daum Cafe, KakaoTV, Tistory, Brunch (daum-search). Vous pouvez regrouper les canaux réels des deux moteurs de recherche dans un seul bloc.
  • Le café Naver n'est pas explicitement mentionné dans la liste des canaux associés ci-dessus (4 novembre 2026). Vous pouvez l'inclure, mais ne partez pas du principe que Naver l'utilisera comme canal associé.
  • Source : Canaux associés du site

BreadcrumbList (Commun Google·Naver)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "<Nom de la catégorie supérieure>", "item": "https://example.com/<supérieure>" },
    { "@type": "ListItem", "position": 2, "name": "<Nom de la catégorie inférieure>", "item": "https://example.com/<supérieure>/<inférieure>" }
  ]
}
</script>
  • Naver : utilisez des noms décrivant la page plutôt que des termes génériques comme "Accueil" ou "top", ordre large → spécifique, évitez les noms trop longs, composés uniquement de chiffres ou de caractères spéciaux.
  • Sources : Naver BreadcrumbList, Google Breadcrumb

Individual skills in this repo

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

Skills associés