Une bonne partie de la documentation SEO sur le balisage Schema.org tourne autour de FAQPage, Article ou Product. Le type Review reste plus rarement documenté pour WordPress, alors qu’il est directement pertinent pour un site qui publie des tests de matériel, exactement le cas de figure sur lequel je suis intervenu récemment : une page de test approfondi d’un boîtier hybride, sans aucun balisage structuré au départ.
Voici comment l’ajouter proprement, en respectant les propriétés obligatoires que Google vérifie avant d’afficher l’étoile dans les résultats.
Étape 1 : comprendre les propriétés obligatoires
Le type Review nécessite au minimum cinq propriétés pour être éligible à un rich result selon la documentation de Google : itemReviewed (l’objet noté, ici un Product), author (avec un name), reviewRating contenant lui-même ratingValue et bestRating, et enfin datePublished recommandé pour la fraîcheur.
Étape 2 : créer un champ personnalisé pour la note
Plutôt que de coder la note en dur dans le gabarit, on l’expose via un champ personnalisé attaché à l’article, modifiable depuis l’éditeur :
register_post_meta( 'post', 'note_test', array(
'type' => 'number',
'single' => true,
'show_in_rest' => true,
'auth_callback' => function() {
return current_user_can( 'edit_posts' );
},
) );
Étape 3 : générer le JSON-LD

Le balisage s’injecte sur wp_footer, uniquement sur les articles porteurs de la note, pour éviter de le dupliquer sur des contenus qui ne sont pas des tests produit :
add_action( 'wp_footer', function() {
if ( ! is_singular( 'post' ) ) {
return;
}
$note = get_post_meta( get_the_ID(), 'note_test', true );
if ( ! $note ) {
return;
}
$produit = get_post_meta( get_the_ID(), 'nom_produit', true );
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'Review',
'itemReviewed' => array(
'@type' => 'Product',
'name' => $produit,
),
'author' => array(
'@type' => 'Person',
'name' => get_the_author(),
),
'reviewRating' => array(
'@type' => 'Rating',
'ratingValue' => $note,
'bestRating' => 10,
),
'datePublished' => get_the_date( 'c' ),
);
printf(
'<script type="application/ld+json">%s</script>',
wp_json_encode( $schema )
);
} );
Le choix de bestRating à 10 plutôt qu’à 5 est volontaire ici : le barème maison de cette rédaction note sur dix, et Schema.org accepte n’importe quelle échelle tant qu’elle est déclarée explicitement dans bestRating. C’est un point qui piège souvent les développeurs venant d’autres écosystèmes habitués à un barème sur cinq par défaut.
Étape 4 : valider avant publication
L’outil de test des résultats enrichis de Google (à l’adresse officielle search.google.com/test/rich-results) doit être utilisé systématiquement avant mise en production, en collant l’URL de la page une fois publiée en préproduction. Il signale immédiatement une propriété manquante ou un type incorrect, par exemple un ratingValue transmis en chaîne de caractères plutôt qu’en nombre, une erreur fréquente quand la valeur provient directement de get_post_meta() sans conversion.
Le point de vigilance éditoriale
Un balisage Review techniquement valide mais posé sur un article qui n’est pas réellement un test rédigé par l’auteur du site viole les consignes de Google sur les données structurées, indépendamment de sa validité syntaxique.
Les consignes de Google sur le balisage Review précisent que le contenu doit correspondre à un avis authentique rédigé par l’éditeur du site sur le produit en question, pas à un agrégat d’avis clients (qui relève du type AggregateRating) ni à une simple fiche descriptive. Sur ce projet, seuls les articles de la catégorie « Tests » recevaient effectivement le balisage, à l’exclusion des fiches produits classiques et des comparatifs qui listent plusieurs références sans note individuelle.
En résumé
Le type Review est simple à mettre en œuvre techniquement une fois les cinq propriétés obligatoires identifiées, mais son intérêt réel dépend entièrement de la cohérence entre le balisage et le contenu éditorial réel de la page : un rich result Review affiché sur un contenu qui n’est pas un vrai test individuel finit tôt ou tard par être ignoré, voire sanctionné, par Google.