Utilisation de Google Tag Manager pour générer dynamiquement du code de schéma

[Estimated read time: 7 minutes]

L’un des principaux enseignements du SearchFest à Portland au début de cette année a été l’importance croissante de la recherche sémantique et des données structurées, en particulier Schema.org. Et tandis que la mise en œuvre de Schema nécessitait de nombreuses modifications du balisage de votre site, le format JSON-LD a créé une excellente alternative à l’ajout de microdonnées à une page avec un code minimal.

Découvrez le jeu de Mike Arnesen de son discours SearchFest, “Comprendre et faciliter la recherche sémantique”, pour un excellent aperçu de l’utilisation des données structurées.

Ce qui était encore plus excitant était l’idée que vous pouviez utiliser Google Tag Manager pour insérer JSON-LD dans une page, vous permettant d’ajouter un balisage Schema à votre site sans avoir à toucher directement le code du site (en d’autres termes, pas de va-et-vient avec le service informatique).

Le problème est que, alors qu’il semblait que Tag Manager vous permettrait d’insérer un extrait JSON-LD sur la page sans problème, il ne semblait pas possible d’utiliser d’autres fonctionnalités de Tag Manager pour générer dynamiquement cet extrait. Tag Manager vous permet de créer des variables en extrayant le contenu de la page à l’aide de sélecteurs CSS ou de JavaScript de base. Ces variables peuvent ensuite être utilisées dynamiquement dans vos balises (consultez le post de Mike sur l’analyse sémantique pour un bon exemple).

Donc, si nous voulions récupérer l’URL de cette page et la transmettre dynamiquement à l’extrait de code JSON-LD, nous aurions peut-être essayé quelque chose comme ceci :

Mais cela ne fonctionne pas. Dommage.

Cela signifie que si vous souhaitez utiliser GTM pour ajouter le type de schéma BlogPosting à chacun de vos articles de blog, vous devrez créer une balise et un déclencheur différents (basés sur l’URL) pour chaque article. Pas exactement évolutif.

Mais, avec un peu d’expérimentation, j’ai trouvé un peu de magie JavaScript qui permet d’extraire des données du contenu existant sur la page et de créer dynamiquement un extrait JSON-LD valide.

Génération dynamique de JSON-LD

La raison pour laquelle notre premier exemple ne fonctionne pas est que Tag Manager remplace chaque variable par un petit morceau de JavaScript qui appelle une fonction, renvoyant la valeur de la variable appelée.

Nous pouvons voir cette erreur dans l’outil de test des données structurées de Google :

L’erreur est le résultat de l’insertion de JavaScript dans Tag Manager dans ce qui devrait être une balise JSON — ceci n’est pas valide, et donc la balise échoue.

Cependant, nous pouvons utiliser Tag Manager pour insérer une balise JavaScript et faire en sorte que cette balise JavaScript insère notre balise JSON-LD.

Si vous n’êtes pas très familier avec JavaScript, cela peut sembler assez compliqué, mais cela fonctionne exactement de la même manière que de nombreuses autres balises que vous utilisez probablement déjà (comme Google Analytics ou Tag Manager lui-même).

Ici, nos données Schema sont contenues dans l’objet “data” JavaScript, que nous pouvons remplir dynamiquement avec des variables de Tag Manager. L’extrait de code crée ensuite une balise de script sur la page avec le bon type (application/ld+json) et remplit la balise avec nos données, que nous convertissons en JSON à l’aide de la fonction JSON.stringify.

Le but de cet exemple est simplement de montrer comment le script fonctionne (l’échange dynamique de l’URL pour le type de schéma d’organisation n’aurait en fait pas beaucoup de sens). Voyons donc comment il pourrait être utilisé dans le monde réel.

Génération dynamique de balises Schema.org pour les articles de blog

Commencez avec un modèle de schéma valide

Tout d’abord, créez un extrait de schéma JSON/LD complet pour un seul article basé sur la spécification schema.org/BlogPosting.

Identifier les variables dynamiques nécessaires

Il existe un certain nombre de variables qui seront les mêmes entre les articles ; par exemple, les informations sur l’éditeur. De même, l’image principale de chaque article a une taille spécifique générée par WordPress qui sera toujours la même entre les publications, nous pouvons donc garder constantes les variables de hauteur et de largeur.

Dans notre cas, nous avons identifié 7 variables qui changent entre les publications que nous voudrons remplir dynamiquement :

Créer les variables dans Google Tag Manager

  • ID de l’entité principale : L’URL de la page.
  • Gros titre: Nous allons garder cela simple et utiliser le titre de la page.
  • Date de publication et Modifié: Notre blog est sur WordPress, nous avons donc déjà des balises méta pour “article:published_time” et “article:modified_time”. Le modified_time n’est pas toujours inclus (sauf si la publication est modifiée après la publication), mais la spécification Schema recommande de l’inclure, nous devons donc définir dateModified sur la date publiée s’il n’y a pas déjà de date modifiée. Dans certaines circonstances, nous devrons peut-être reformater la date – heureusement, dans ce cas, elle est déjà au format ISO 860, donc tout va bien.
  • Nom de l’auteur : JeDans certains cas, nous devrons extraire le contenu de la page. Notre blog répertorie l’auteur et la date de publication dans la signature. Nous devrons extraire le nom, mais omettre l’horodatage, le tuyau de fin et les espaces.
  • Image de l’article : Notre blog a installé Yoast, qui a spécifié des balises d’image pour Twitter et Open Graph. Noter: J’utilise la méta twitter:image au lieu de la valeur de la balise og:image en raison d’un petit bogue qui existait avec l’image graphique ouverte sur notre blog lorsque j’ai écrit ceci.
  • Description d’article: Nous utiliserons la méta description.

Voici à nouveau notre script d’insertion que nous utiliserons dans notre balise, cette fois avec les propriétés échangées pour les variables que nous devrons créer :

Je laisse de côté dateModified pour le moment – nous couvrirons que dans une minute.

Extraction des méta-valeurs

Heureusement, Tag Manager facilite l’extraction des valeurs des éléments DOM, notamment parce que, comme c’est le cas avec les méta-propriétés, la valeur exacte dont nous avons besoin se trouvera dans l’un des attributs de l’élément. Pour extraire le titre de la page, on peut récupérer la valeur de la balise

. Nous n’avons pas besoin de spécifier un nom d’attribut pour celui-ci : <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/576794184cca31.23853501.png" width="738" alt="configuration d'une balise google tag manager pour extraire la valeur du titre" height="925" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjkyNSIgd2lkdGg9IjczOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/576794184cca31.23853501.png" width="738" alt="configuration d'une balise google tag manager pour extraire la valeur du titre" height="925"></noscript></amp-img> </p> <p>Pour les méta-propriétés, nous pouvons extraire la valeur de l’attribut content : </p> <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941901fcb8.76439638.png" width="738" alt="configuration d'une balise google tag manager pour extraire la valeur du titre" height="893" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijg5MyIgd2lkdGg9IjczOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941901fcb8.76439638.png" width="738" alt="configuration d'une balise google tag manager pour extraire la valeur du titre" height="893"></noscript></amp-img> </p> <p>Tag Manager contient également des variables intégrées utiles que nous pouvons exploiter : dans ce cas, l’URL de la page : </p> <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/57679419854306.38513113.png" width="618" alt="Variable intégrée de l'URL de la page du gestionnaire de balises" height="750" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijc1MCIgd2lkdGg9IjYxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/57679419854306.38513113.png" width="618" alt="Variable intégrée de l'URL de la page du gestionnaire de balises" height="750"></noscript></amp-img> </p> <h3><span class="ez-toc-section" id="traitement-des-elements-de-la-page"></span>Traitement des éléments de la page<span class="ez-toc-section-end"></span></h3> <p>Pour extraire le nom de l’auteur, le balisage de notre site fait en sorte qu’un simple sélecteur direct ne fonctionnera pas, ce qui signifie que nous devrons utiliser du JavaScript personnalisé pour saisir uniquement le texte que nous voulons (le texte de l’élément span, pas l’élément de temps), et supprimez les 3 derniers caractères (” | “) pour obtenir uniquement le nom de l’auteur. </p> <p>En cas de problème avec ce sélecteur, j’ai également mis en place une solution de secours (juste le nom de notre société), pour m’assurer que si notre sélecteur échoue, une valeur est renvoyée. </p> <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941a0600f1.80330070.png" width="738" alt="variable de gestionnaire de balises Google JavaScript personnalisée pour extraire et traiter la copie" height="508" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUwOCIgd2lkdGg9IjczOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941a0600f1.80330070.png" width="738" alt="variable de gestionnaire de balises Google JavaScript personnalisée pour extraire et traiter la copie" height="508"></noscript></amp-img> </p> <h2><span class="ez-toc-section" id="essai"></span>Essai<span class="ez-toc-section-end"></span></h2> <p>Tag Manager dispose d’une fonctionnalité intéressante qui vous permet de préparer et de tester les balises avant de les déployer. </p> <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941b683f03.05409682.png" width="400" alt="mode de débogage du gestionnaire de balises google" height="292" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI5MiIgd2lkdGg9IjQwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941b683f03.05409682.png" width="400" alt="mode de débogage du gestionnaire de balises google" height="292"></noscript></amp-img> </p> <p>Une fois nos variables en place, nous pouvons passer en mode Aperçu et accéder à l’un de nos articles de blog : </p> <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941bd03e11.38700283.png" width="738" alt="test des variables de schéma du gestionnaire de balises" height="287" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI4NyIgd2lkdGg9IjczOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941bd03e11.38700283.png" width="738" alt="test des variables de schéma du gestionnaire de balises" height="287"></noscript></amp-img> </p> <p>Ici, nous pouvons vérifier les valeurs de toutes nos variables pour nous assurer que les valeurs correctes passent. </p> <p>Enfin, nous configurons notre balise et la configurons pour qu’elle se déclenche où nous voulons. Dans ce cas, nous allons simplement déclencher ces balises sur les articles de blog : </p> <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941c50bfd3.27970223.png" alt="configuration du déclencheur du gestionnaire de balises" width="474" height="493" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ5MyIgd2lkdGg9IjQ3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941c50bfd3.27970223.png" alt="configuration du déclencheur du gestionnaire de balises" width="474" height="493"></noscript></amp-img> </p> <p>Et voici la version finale de notre tag. </p> <p>Pour notre paramètre dateModified, nous avons ajouté quelques lignes de code qui vérifient si notre variable modifiée est définie, et si ce n’est pas le cas, définit la variable JSON-LD “dateModified” à la date publiée. Vous pouvez trouver le code brut ici. </p> <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941cc21524.15034477.png" width="738" alt="balise json-ld de schéma dynamique" height="968" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijk2OCIgd2lkdGg9IjczOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941cc21524.15034477.png" width="738" alt="balise json-ld de schéma dynamique" height="968"></noscript></amp-img> </p> <p>Nous pouvons maintenant enregistrer la balise, déployer la version actuelle, puis utiliser l’outil de test des données structurées de Google pour valider notre travail : </p> <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941d8ff161.37948276.png" width="738" alt="l'outil de test de données structurées de google valide le JSON-LD généré dynamiquement" height="439" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzOSIgd2lkdGg9IjczOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941d8ff161.37948276.png" width="738" alt="l'outil de test de données structurées de google valide le JSON-LD généré dynamiquement" height="439"></noscript></amp-img> </p> <p>Succès!! </p> <hr> <p>Ceci n’est qu’une première version de ce code, qui sert à tester l’idée que nous pouvons utiliser Google Tag Manager pour insérer dynamiquement des balises JSON-LD/Schema.org. Cependant, après seulement quelques jours, nous nous sommes enregistrés avec Google Search Console et cela a confirmé que le schéma BlogPosting avait été trouvé avec succès sur tous nos articles de blog sans erreur, donc je pense que c’est une méthode viable pour mettre en œuvre des données structurées. </p> <p><amp-img src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941e2bb207.78142880.png" width="738" alt="données structurées valides trouvées dans Google Search Console" height="474" class="amp-wp-enforced-sizes i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" layout="intrinsic" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt="" aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ3NCIgd2lkdGg9IjczOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer><noscript><img decoding="async" src="https://moz-static.moz.com/youmoz_uploads/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags/5767941e2bb207.78142880.png" width="738" alt="données structurées valides trouvées dans Google Search Console" height="474"></noscript></amp-img> </p> <p>Les données structurées deviennent une partie de plus en plus importante du travail d’un référencement, et avec des techniques comme celle-ci, nous pouvons considérablement améliorer notre capacité à mettre en œuvre des données structurées efficacement et avec un minimum de frais techniques. </p> <p>J’aimerais connaître l’expérience de la communauté concernant l’utilisation de Tag Manager avec JSON-LD, et j’aimerais savoir si les utilisateurs utilisent cette méthode avec succès ! </p> <p>Bon marquage ! </p>
(Article traduit de moz.com)
Quitter la version mobile