Données structurées JSON-LD : exemples prêts à l'emploi et générateur PHP
JSON-LD est le format recommandé par Google pour les données structurées. Ce guide explique ce qu'il faut baliser, montre des exemples prêts à copier pour les types schema.org les plus utiles et le petit modèle PHP que nous utilisons pour générer un balisage valide sur chaque page sans écrire manuellement du JSON.
En bref
- JSON-LD est un bloc
<script type="application/ld+json">dans la page qui le décrit aux machines, en utilisant le vocabulaire schema.org. - Marquez uniquement ce que les utilisateurs peuvent voir sur la page. Un balisage qui ne correspond pas au contenu risque une action manuelle et ne rapporte rien.
- Commencez par
Organization,BreadcrumbListetArticleouProduct; ajoutezFAQPage,ServiceouLocalBusinesslà où ils correspondent. - Générez du JSON en PHP à partir de tableaux avec
json_encode, un@graphpar page, avec des valeurs@idstables. - Validez les modèles avec le Rich Results Test et le Schema Markup Validator, et surveillez les rapports d'amélioration Search Console.
Les données structurées JSON-LD sont un moyen d'indiquer aux moteurs de recherche, sous une forme lisible par machine, ce qu'est une page : un article, un produit avec un prix, une entreprise avec ses coordonnées, une liste de questions et réponses. Il est invisible pour les visiteurs, il ne remplace pas un bon contenu et n’augmente pas à lui seul le classement. Ce qu'il fait, c'est rendre une page éligible pour des résultats riches, aider les moteurs à connecter vos pages à la bonne entité et donner à la recherche basée sur l'IA une source plus propre à lire. Nous le générons sur chaque page d'integrono.com et de nos autres sites, et ce guide est la version pratique de ce travail.
JSON-LD vs Microdata vs RDFa
Le vocabulaire Schema.org peut être intégré dans trois syntaxes. Microdata et RDFa placent des attributs dans vos balises HTML, ce qui emmêle le balisage et les modèles. JSON-LD réside dans un bloc de script, distinct de la mise en page, il est donc plus facile à générer, tester et modifier. Google déclare qu'il recommande JSON-LD et c'est ce que nous utilisons partout.
Les principes avant les exemples
- Décrivez le contenu visible. Si le prix, la note ou la FAQ ne figurent pas sur la page, ne les mettez pas dans le balisage.
- Utilisez des URL absolues et l'URL canonique de la page.
- Soyez complet pour les propriétés requises et ajoutez celles recommandées lorsque vous disposez de données réelles.
- Utilisez
@idpour lier des entités. L'auteur de l'article est l'organisation définie une fois avec un@id, et non une nouvelle copie à chaque fois. - Utilisez des dates au format ISO 8601 (
2026-10-28ou avec une heure et un fuseau). - N'inventez pas de critiques ou de notes. Les fausses données
AggregateRatingsont une cause fréquente d’actions manuelles.
Exemple 1. Organisation (et site Web)
Mettez-le sur la page d'accueil ou dans un graphique à l'échelle du site. Il définit l'entité à laquelle les autres balises font référence.
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Example Studio",
"url": "https://example.com/",
"logo": "https://example.com/images/logo.png",
"email": "[email protected]",
"sameAs": [
"https://github.com/example",
"https://www.linkedin.com/company/example"
]
}
Exemple 2. Liste de fils d'Ariane
Le balisage du fil d'Ariane permet à Google d'afficher le chemin de la page au lieu d'une URL brute dans les résultats. Il doit correspondre au fil d'Ariane visible.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/"},
{"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://example.com/blog"},
{"@type": "ListItem", "position": 3, "name": "JSON-LD guide", "item": "https://example.com/blog/json-ld-guide"}
]
}
Exemple 3. Article
Pour les articles de blog et les guides. Les propriétés qui comptent : le titre, les dates, l'auteur, l'éditeur, l'image et l'URL de la page.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "JSON-LD structured data: examples",
"description": "Short summary of the article.",
"url": "https://example.com/blog/json-ld-guide",
"mainEntityOfPage": "https://example.com/blog/json-ld-guide",
"inLanguage": "en",
"datePublished": "2026-08-23",
"dateModified": "2026-10-28",
"author": {"@id": "https://example.com/#organization"},
"publisher": {"@id": "https://example.com/#organization"},
"image": {"@type": "ImageObject", "url": "https://example.com/images/blog/json-ld.webp", "width": 1200, "height": 630}
}
Changer dateModified uniquement lorsque le contenu change réellement. Le renverser à chaque déploiement est un moyen discret de perdre confiance.
Exemple 4. Produit avec offre
Pour les pages produits avec un prix visible. Inclure la disponibilité et la devise ; ajoutez aggregateRating ou review uniquement si de vrais avis sont affichés sur la page.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Example product",
"description": "What it is and who it is for.",
"image": ["https://example.com/images/product.webp"],
"sku": "EX-001",
"brand": {"@type": "Brand", "name": "Example"},
"offers": {
"@type": "Offer",
"url": "https://example.com/product/ex-001",
"priceCurrency": "EUR",
"price": "49.00",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}
Exemple 5. Service avec offre
Pour des prestations payantes, comme un audit au forfait ou une consultation horaire. Nous utilisons ce modèle sur nos propres pages de service.
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Architecture review",
"serviceType": "Software architecture analysis",
"provider": {"@id": "https://example.com/#organization"},
"areaServed": "Worldwide",
"offers": {
"@type": "Offer",
"price": "200",
"priceCurrency": "EUR",
"url": "https://example.com/services/architecture-review"
}
}
Exemple 6. Page FAQ
Le balisage FAQ décrit une liste de questions et de réponses visibles sur la page. Sachez que depuis 2023, Google affiche des résultats riches en FAQ uniquement pour un ensemble limité de sites faisant autorité, alors ne vous attendez pas à des réponses extensibles dans les résultats. Le balisage est toujours valide, toujours lisible par d'autres moteurs de recherche et systèmes d'IA, et il maintient la FAQ structurée de manière à ce que les machines puissent la citer.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Do I need structured data to rank?",
"acceptedAnswer": {"@type": "Answer", "text": "No. It is not a ranking requirement, but it can make pages eligible for rich results."}
}
]
}
Combinez tout en un seul @graph
Une page n’a rarement qu’une seule entité. Mettez-les tous dans un seul script en utilisant @graph et faites référence aux entités partagées par @id:
{
"@context": "https://schema.org",
"@graph": [
{"@type": "Organization", "@id": "https://example.com/#organization", "name": "Example Studio"},
{"@type": "Article", "headline": "...", "author": {"@id": "https://example.com/#organization"}},
{"@type": "BreadcrumbList", "itemListElement": []},
{"@type": "FAQPage", "mainEntity": []}
]
}
Générer JSON-LD en toute sécurité en PHP
Ne concaténez pas JSON à la main. Une citation dans un titre brise tout le script et le moteur de recherche l’ignore en silence. Créez un tableau PHP et encodez-le. Deux indicateurs comptent : garder Unicode lisible et protéger le contexte HTML en évitant les barres obliques et les balises.
function jsonLdScript(array $graph): string
{
$data = ['@context' => 'https://schema.org', '@graph' => $graph];
$json = json_encode(
$data,
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP | JSON_THROW_ON_ERROR
);
return '<script type="application/ld+json">' . $json . '</script>';
}
$graph = [
['@type' => 'Organization', '@id' => $site . '/#organization', 'name' => 'Example Studio', 'url' => $site . '/'],
[
'@type' => 'Article',
'headline' => $title,
'url' => $canonical,
'datePublished' => $published,
'dateModified' => $modified,
'author' => ['@id' => $site . '/#organization'],
],
];
echo jsonLdScript($graph);
JSON_HEX_TAG transforme < et > en séquences d'échappement afin que le contenu de l'utilisateur ne puisse jamais fermer la balise de script plus tôt. Alimentez le générateur à partir des mêmes données qui restituent la page (titre, prix, dates), afin que le balisage et le contenu visible ne puissent pas s'écarter. Dans un site multilingue, traduisez les champs de texte et définissez inLanguage par langue ; c'est ainsi que sont produits les articles et le balisage de la FAQ de ce blog.
Valider et surveiller
- Rich Results Test l'éligibilité des types de résultats enrichis de Google.
- Schema Markup Validator pour la syntaxe générale schema.org de tout type.
- Rapports d'amélioration Search Console (fil d'Ariane, produits, FAQ, etc.) pour les erreurs et les avertissements à grande échelle, une fois que Google a exploré vos pages.
- Un test unitaire qui restitue chaque modèle et vérifie que le JSON-LD analyse et contient les clés requises empêche les régressions après les refactors.
Des erreurs qui vous coûtent cher
- Balisage pour le contenu qui ne figure pas sur la page (FAQ cachée, notes inventées, prix différents du prix visible).
- Plusieurs blocs en conflit provenant d'un plugin et d'un modèle, chacun avec une
Organization. - URL relatives, dates erronées ou
@idmanquant. - JSON cassé suite à la création manuelle de chaînes et aux guillemets non échappés.
- Traiter le schéma comme une astuce de classement. C'est un outil de clarté ; encore faut-il que la page mérite d'être classée.
Comment pouvons-nous vous aider
Les données structurées font partie de notre travail technique de référencement: nous concevons le schéma de vos modèles, implémentons le générateur dans votre pile et mettons en place la validation pour qu'elles restent correctes après les versions. Si vous souhaitez un aperçu de ce qui ne va pas sur votre site, commencez par notre liste de contrôle d'audit technique SEO ou réservez une consultation.
Questions fréquentes
Que sont les données structurées JSON-LD ?
JSON-LD est un bloc de script contenant des données schema.org au format JSON qui décrit le contenu d'une page aux moteurs de recherche, par exemple un article, un produit, une organisation ou une FAQ.
Les données structurées améliorent-elles les classements ?
Pas directement. Cela aide les moteurs de recherche à comprendre la page et peut la rendre éligible à des résultats riches, ce qui peut améliorer le taux de clics, mais ce n'est pas une exigence de classement.
Où dois-je placer le script JSON-LD ?
N'importe où dans l'en-tête ou le corps HTML de la page ; la plupart des sites le mettent dans la tête. Il doit être présent dans le HTML rendu que Google récupère, la génération côté serveur est donc l'approche la plus sûre.
Le balisage FAQPage vaut-il toujours la peine d’être ajouté ?
Google affiche désormais des résultats riches en FAQ uniquement pour un ensemble limité de sites, mais le balisage de FAQ valide reste lisible par d'autres moteurs de recherche et systèmes d'IA. Ajoutez-le uniquement pour les questions et réponses visibles sur la page.
Comment tester des données structurées ?
Utilisez Rich Results Test de Google pour les résultats enrichis éligibles, le Schema Markup Validator pour la syntaxe générale et les rapports d'amélioration Search Console pour suivre les erreurs sur l'ensemble du site.
Appel découverte gratuit
Apportez une pile désordonnée ou une intégration bloquée - Integrono tracera le premier pas le plus intelligent.
Vous obtenez un avis senior sur les pièges budgétaires, les dépendances et s'il faut acheter, assembler ou construire - avant le début du travail payant. Le PDG reste dans la boucle.