J'injecte du JSON-LD dans une page dynamiquement via Javascript, lorsque je teste la page à l'aide de l'outil de test de données structurées de Google, la sortie attendue apparaît et je peux voir que l'élément produit est rendu.
Cependant, si je diffère le chargement du script chargé de récupérer le contenu JSON-LD et que j'appelle ensuite la fonction pour l'injecter dans un écouteur d'événement de "chargement" de fenêtre, le contenu n'apparaît plus dans l'outil de test des données structurées.
En bref, l'outil de test montre mon balisage lorsque je fais cela ...
<script src="https://example.site.com/rich-snippet/dist.js"></script>
<script>
richSnippet();
</script>
Mais pas quand je fais ça.
<script src="https://example.site.com/rich-snippet/dist.js" defer=""></script>
<script>
window.addEventListener('load', (event) => {
richSnippet();
});
</script>
Je suppose que je demande s'il s'agit d'une lacune dans l'outil de test ou si l'approche différée/onload est un pas trop loin en termes de Google étant en mesure d'indexer le contenu.
<script src="https://example.site.com/rich-snippet/dist.js" defer=""></script>
<script>
window.addEventListener('load', function() {
richSnippet();
});
</script>
La suppression de la syntaxe ES6 semble résoudre le problème, je pense en raison du contexte de l'événement qui serait passé.
Pourquoi voudriez-vous ajouter ce balisage via JavaScript? Il semble que l'avoir dans le code HTML serait le moyen le plus simple et le plus susceptible d'être détecté par les moteurs de recherche.
Pourquoi n'utiliseriez-vous pas JavaScript ou toute autre langue? Le HTML codé en dur est contre-intuitif dans tous les cas qui viennent à l'esprit.
L'outil de test de données structurées a une capacité très limitée de gérer JavaScript.
Cependant, Googlebot et leurs autres outils de test (inspection d'URL, outil de test de résultats riches, testeur mobile convivial) affichent tous des pages à l'aide d'une version récente de Chrome, alors traitez très bien JavaScript.
Si l'outil de test des résultats riches ne rend pas directement compte des données structurées que vous utilisez, copiez son code HTML rendu dans le SDTT.