Types schema.org : mapping, champs et gabarits

Mapping type de page vers types schema.org

Type de pageTypes à poserRésultat enrichi possible (2026)
Tout le site (socle)Organization ou LocalBusiness + WebSite, en @graph, une fois (home ou toutes pages)Logo, knowledge panel
Article de blog, guideArticle ou BlogPosting (+ author Person, + BreadcrumbList)Affichage enrichi (Discover, À la une)
Actualité de rédactionNewsArticleÀ la une
Fiche produitProduct + Offer (+ AggregateRating et Review si avis réels affichés)Étoiles, prix, stock : oui
Page ou bloc FAQFAQPage + Question/AnswerRéservé aux sites gouvernementaux et santé reconnus depuis 2023 ; valeur = compréhension machine
Tutoriel pas à pasHowToRich result supprimé en 2023 ; ne le poser que si la structure aide la compréhension machine, sinon Article suffit
Entreprise localeLocalBusiness (sous-type le plus précis : Restaurant, Dentist, Plumber…)Panel local
Page à propos, accueil corporateOrganization (logo, sameAs, contactPoint)Logo, knowledge panel
Page auteur, dirigeantPerson (sameAs, jobTitle, worksFor), relié aux Article via @idE-E-A-T lisible machine
Page service B2BService (provider vers l’Organization)Pas de rich result dédié ; graphe d’entités
RecetteRecipeOui, riche
ÉvénementEventOui
Offre d’emploiJobPostingOui (Google Jobs)
Page avec vidéoVideoObjectOui
Comparatif, listeItemList (+ types des éléments)Carrousels selon type
Fil d’arianeBreadcrumbList sur tout le siteChemin affiché dans les résultats

Le balisage Sitelinks SearchBox n’est plus supporté par Google depuis 2024 : ne le génère plus.

Socle @graph : Organization + WebSite

À poser une fois, les @id servent de référence à tous les autres blocs.

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://exemple.fr/#organisation",
      "name": "Exemple SAS",
      "url": "https://exemple.fr/",
      "logo": {
        "@type": "ImageObject",
        "url": "https://exemple.fr/img/logo-1200.png"
      },
      "sameAs": [
        "https://www.linkedin.com/company/exemple",
        "https://www.youtube.com/@exemple"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://exemple.fr/#site",
      "url": "https://exemple.fr/",
      "name": "Exemple",
      "publisher": {"@id": "https://exemple.fr/#organisation"}
    }
  ]
}

Pièges : logo en URL relative ; logo trop petit (viser 1200 px de large, minimum 112 x 112) ; sameAs vers des profils morts.

Article / BlogPosting

Requis en pratique : headline, image, datePublished, author. Recommandés : dateModified, publisher (@id de l’Organization), mainEntityOfPage, description.

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Comment choisir une veste imperméable : le guide 2026",
  "image": ["https://exemple.fr/img/guide-vestes-cover.jpg"],
  "datePublished": "2026-07-20T09:00:00+02:00",
  "dateModified": "2026-07-25T14:30:00+02:00",
  "author": {
    "@type": "Person",
    "name": "Claire Martin",
    "url": "https://exemple.fr/equipe/claire-martin"
  },
  "publisher": {"@id": "https://exemple.fr/#organisation"},
  "mainEntityOfPage": "https://exemple.fr/blog/choisir-veste-impermeable"
}

Pièges : headline différent du titre visible ; datePublished sans fuseau ; author en simple chaîne (préférer Person avec url ou @id, c’est le signal E-E-A-T machine) ; image plus petite que 1200 px.

Product

Requis : name + au moins un parmi offers, review, aggregateRating. Recommandés : image, description, sku, gtin/gtin13 si disponible, brand. Dans Offer : price (nombre), priceCurrency, availability (URL schema.org), url ; priceValidUntil si promo datée.

Pièges : prix en chaîne avec symbole (« 129,90 € » : non ; 129.90 + “EUR” : oui) ; availability en texte libre ; aggregateRating sans avis visibles sur la page (risque d’action manuelle) ; prix du balisage différent du prix affiché ; balisage Product sur une page catégorie (réservé aux fiches ; pour les listes, ItemList).

FAQPage

mainEntity : liste de Question, chacune avec acceptedAnswer (Answer, champ text). Les questions et réponses doivent être visibles sur la page, dans le même wording.

Pièges : FAQ balisée sur toutes les pages du site avec le même contenu (signal spam) ; réponses tronquées par rapport au visible ; promettre le rich result (réservé gouvernement/santé depuis 2023).

LocalBusiness

Requis en pratique : @type le plus précis possible, name, address (PostalAddress complète), telephone. Recommandés : geo, openingHoursSpecification, priceRange, url, image, sameAs vers la fiche Google Business Profile.

{
  "@context": "https://schema.org",
  "@type": "Dentist",
  "@id": "https://cabinet-exemple.fr/#local",
  "name": "Cabinet dentaire Exemple",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12 rue des Lilas",
    "addressLocality": "Lyon",
    "postalCode": "69003",
    "addressCountry": "FR"
  },
  "telephone": "+33478000000",
  "geo": {"@type": "GeoCoordinates", "latitude": 45.7594, "longitude": 4.8595},
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
    "opens": "09:00",
    "closes": "19:00"
  }],
  "url": "https://cabinet-exemple.fr/"
}

Pièges : rester sur LocalBusiness générique quand un sous-type précis existe ; NAP (nom, adresse, téléphone) incohérent avec la fiche Google Business Profile et le pied de page ; horaires du balisage différents des horaires affichés.

Person

Champs utiles : name, url, jobTitle, worksFor (@id de l’Organization), sameAs (LinkedIn et autres profils réels), image. À relier aux Article via author. C’est le bloc E-E-A-T : il matérialise qui écrit et sa légitimité.

itemListElement : ListItem avec position (à partir de 1), name, item (URL). Le dernier élément (page courante) peut omettre item. Piège : positions non séquentielles, ou fil d’ariane balisé différent du fil affiché.

Règles transverses (rappel)

  1. JSON-LD dans un <script type="application/ld+json">, en head ou body.
  2. Contenu visible uniquement ; jamais d’avis, prix ou FAQ fabriqués.
  3. URLs absolues ; dates ISO 8601 avec fuseau ; durées ISO 8601 ; prix en nombre + ISO 4217 ; pays en ISO 3166-1.
  4. Un @graph unique ou des blocs séparés, mais un type donné déclaré une seule fois par page (attention aux doublons avec le plugin SEO).
  5. @id stables et réutilisés sur tout le site : c’est ce qui transforme des blocs isolés en graphe d’entités.
  6. Injection dans le HTML initial de préférence ; GTM en dernier recours (dépend du rendu JS, invisible pour la plupart des crawlers IA).
  7. Test : Rich Results Test (éligibilité Google) + validator.schema.org (syntaxe et vocabulaire).

Données structurées et moteurs génératifs

Les moteurs de réponse et les assistants extraient plus fiablement les faits explicités en JSON-LD : entité, auteur, date, prix, adresse, notes. Concrètement : un Product bien balisé augmente les chances que le bon prix et la bonne dispo soient cités ; un Person relié aux articles installe l’auteur comme entité ; un LocalBusiness complet fiabilise les réponses locales. Le JSON-LD étant dans le HTML initial, il reste lisible par les crawlers IA qui ne rendent pas le JS. La suite logique de ce travail : seo-citation-optimizer.