Google Search valide les JSON-LD créés avec le template modifier (index.php). Il trouve bien un type Product et un sous-type Offer.
Product
- Offer
Le seul truc, c'est que le JS apparaît dans le <body> et non dans le <head> de la page.
"Markup is placed inside a script tag in the head of the HTML page."
Pour mes microdatas créés avec les champs (field), c'est plus ambiguë pour les raisons indiquées précédemment.
Google Search valide, mais identifie deux types distincts : Offer et Product (au lieu de Product < Offer) avec une microdata qui n'est ni une url, ni un identifiant : "ID: http
www.arbracam.org/content/89-boutique-terrot/flexicontent
."
Offer
Product
Avec les microdatas, j'ai créé une page événement en HTML dans un textarea. Google Search valide conformément au HTML (
www.arbracam.org/item/12296-bourse-motos...-%C3%A0-longvic.html
):
Event
- Location
- Offers
Pour la mise en page en revanche, c'est galère. Le modèle impose une certaine hiérarchie aux éléments qui ne correspond pas forcément à la forme que l'on veut présenter en frontend.
JSON-LD apparait préférable aux autres formats : "JavaScript notation separate from the body of the HTML itself." Même s'il a aussi ses propres limites.
Ce serait parfait si on pouvait remonter le JSON-LD généré par Flexicontent dans le <head>.
Je colle le JS pour qui veut s'en inspirer :
<script type="application/ld+json">
{
<?php
$html_img = $item->fields->display;
preg_match( '@src="([^"]+)"@' , $html_img, $match );
$src_img = array_pop($match);
?>
"@context": "
schema.org/
",
"@type": "Product",
"name": "<?php echo str_replace('"','',strip_tags($item->fields->display)); ?>",
"image": "
www.arbracam.org
",
"description": "<?php echo str_replace('"','',strip_tags($item->fields->display)); ?>",
"offers": {
"@type": "Offer",
"url": "
www.arbracam.org
"priceCurrency": "<?php echo strip_tags($item->fields->display); ?>",
"price": "<?php echo strip_tags($item->fields->display); ?>",
"availability": "<?php echo strip_tags($item->fields->display); ?>"
}
}
</script>
Collé dans le index.php du template après le code :
// SEO
$microdata_itemtype = $this->params->get( 'microdata_itemtype');
$microdata_itemtype_code = $microdata_itemtype ? 'itemscope itemtype="
schema.org/'.$microdata_itemtype
.'"' : '';
?>