Pourquoi JSON-LD plutôt que Microdata ?

PrestaShop 1.6 et les vieux thèmes 1.7 utilisaient du Microdata intégré directement dans le HTML. C'est une approche obsolète que Google a progressivement dépréciée. JSON-LD est aujourd'hui le format recommandé par Google pour plusieurs raisons :

⚠ Erreur fréquente

Si vous avez migré de PS 1.6 vers 1.7 sans nettoyer le thème, vous avez probablement encore du Microdata dans vos templates Smarty ET un module JSON-LD actif. Google détecte ce conflit et signale des erreurs dans la Search Console. Auditez avant d'ajouter du JSON-LD.

Les types Schema.org essentiels pour PrestaShop

Product — fiche produit

C'est le plus important. Un bon balisage Product peut générer des rich snippets avec prix, disponibilité et notes dans les SERP — ce qui améliore le CTR de 20 à 35% selon les études.

{ "@context": "https://schema.org", "@type": "Product", "name": "{$product.name}", "description": "{$product.description_short|strip_tags}", "sku": "{$product.reference}", "image": "{$product.cover.large.url}", "brand": { "@type": "Brand", "name": "{$product.manufacturer_name}" }, "offers": { "@type": "Offer", "url": "{$product.url}", "priceCurrency": "EUR", "price": "{$product.price_amount}", "availability": "{if $product.availability == 'available'} https://schema.org/InStock {else} https://schema.org/OutOfStock {/if}", "seller": { "@type": "Organization", "name": "{$shop.name}" } } }

Ce template Smarty est à intégrer dans un <script type="application/ld+json"> dans le fichier product.tpl de votre thème, ou via un hook PrestaShop dédié.

AggregateRating — avis clients

Si votre boutique a des avis clients, ajoutez le bloc AggregateRating à votre Product. C'est ce qui génère les étoiles dans les résultats Google :

"aggregateRating": { "@type": "AggregateRating", "ratingValue": "{$product.average_grade}", "reviewCount": "{$product.nb_reviews}", "bestRating": "5", "worstRating": "1" }

BreadcrumbList — fil d'Ariane

Chaque page produit et catégorie doit avoir son BreadcrumbList. C'est un signal fort pour la compréhension de la structure du site par Google, et ça génère les breadcrumbs dans les SERP :

{ "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Accueil", "item": "{$urls.base_url}" }, { "@type": "ListItem", "position": 2, "name": "{$category.name}", "item": "{$category.url}" }, { "@type": "ListItem", "position": 3, "name": "{$product.name}", "item": "{$product.url}" } ] }

Organization — page d'accueil

Sur la homepage, un bloc Organization ou LocalBusiness avec les informations de contact renforce votre présence dans le Knowledge Graph Google :

{ "@context": "https://schema.org", "@type": "Organization", "name": "{$shop.name}", "url": "{$urls.base_url}", "logo": "{$shop.logo}", "contactPoint": { "@type": "ContactPoint", "telephone": "{$shop.phone}", "contactType": "customer service", "areaServed": "FR", "availableLanguage": "French" }, "address": { "@type": "PostalAddress", "streetAddress": "{$shop.address.address1}", "addressLocality": "{$shop.address.city}", "postalCode": "{$shop.address.postcode}", "addressCountry": "FR" } }

Intégration dans PrestaShop : les 3 méthodes

Méthode 1 : Directement dans les templates Smarty

La plus propre et la plus maintenable. Vous créez un fichier product-jsonld.tpl et l'incluez via {include file='product-jsonld.tpl'} dans product.tpl. Avantage : le balisage survit aux mises à jour du thème si vous utilisez un thème child.

Méthode 2 : Via un module PrestaShop dédié

Des modules comme SEO Expert ou Pretty URLs proposent la génération JSON-LD. Avantage : plus facile à configurer sans coder. Inconvénient : les modules tiers ont tendance à générer du JSON-LD générique qui ne profite pas de toutes les données disponibles dans PrestaShop.

Méthode 3 : Module custom

La solution que je recommande pour les boutiques sérieuses. Un module PS custom qui hook sur displayHeader et génère le JSON-LD approprié selon le type de page courante. Cela donne un contrôle total sur le balisage, sans modifier les templates du thème.

// Dans votre module custom, méthode hookDisplayHeader() public function hookDisplayHeader($params) { $controller = $this->context->controller; if ($controller instanceof ProductController) { $product = $controller->getTemplateVarProduct(); $jsonld = $this->generateProductSchema($product); return '<script type="application/ld+json">' . json_encode($jsonld, JSON_UNESCAPED_UNICODE) . '</script>'; } }

Valider et monitorer votre JSON-LD

Une fois implémenté, validez systématiquement avec ces outils :

✓ Résultat attendu

Après une implémentation correcte du JSON-LD Product sur une boutique de 800 références, on observe généralement l'apparition des rich snippets dans les SERP en 4 à 8 semaines, avec une augmentation du CTR organique de 15 à 30% sur les pages produits concernées.

Erreurs JSON-LD les plus fréquentes sur PrestaShop