web-dev-qa-db-fra.com

Liaison de schéma JSON-LD externe (à partir de Schema.org)

J'ai des schémas dans JSON-LD selon Schema.org. Lorsqu'il était en ligne (dans les balises <script>]), le outil de test des données structurées de Google a reconnu le schéma avec succès.

Si je le lie de manière externe, par exemple: <script src="json/main-schema.json" type="application/ld+json"></script> le outil de test de données structurées ne le reconnaît pas.

Est-ce quelque chose qui devrait m'inquiéter?


Comment j'ai eu le schéma de travail (exemple de Schema.org):

<script type="application/ld+json">
{ "@context" : "http://schema.org",
  "@type" : "Organization",
  "url" : "http://www.your-company-site.com",
  "contactPoint" : [
    { "@type" : "ContactPoint",
      "telephone" : "+1-401-555-1212",
  "contactType" : "customer service"
    } ] }
</script>

Schéma externe présenté dans main-schema.json, lié à <script src="json/main-schema.json" type="application/ld+json"></script>:

{ "@context" : "http://schema.org",
  "@type" : "Organization",
  "url" : "http://www.your-company-site.com",
  "contactPoint" : [
    { "@type" : "ContactPoint",
      "telephone" : "+1-401-555-1212",
  "contactType" : "customer service"
    } ] }
7
marcellothearcane

Le script element peut être utilisé pour deux choses:

  • scripts dynamiques/classiques
  • data

Et pour les données, la spécification définit:

Lorsqu'elles sont utilisées pour inclure des blocs de données, les données doivent être incorporées en ligne […]

Vous pouvez donc utiliser l'attribut src uniquement pour les scripts, pas pour les données.

→ JSON-LD étant des données, vous devez les intégrer.

Bien que la liaison d’un fichier JSON-LD soit possible avec l’élément link, les moteurs de recherche qui parrainent Schema.org ne semblent pas l’appuyer.

9
unor

Selon la documentation :

[…] En outre, Google peut lire les données JSON-LD quand elles sont injectées dynamiquement dans le contenu de la page , par exemple à l'aide de code JavaScript ou de widgets intégrés dans votre ordinateur. système de gestion de contenu.

Ce qui suggère que, même si vous ne pouvez pas lier de données json-ld externes, vous pouvez toujours les charger dynamiquement et les injecter dans le DOM. Cela peut suffire à votre cas d'utilisation, car vous pouvez charger du code JavaScript statique sur votre page qui injectera ensuite le fichier JSON-LD dans le DOM.

3
Attila O.

Ceci peut , ou ne peut pas aider, mais regardez comment Trevor Fox l'a fait :

<script>

$.getJSON( "/your-schema-file.jsonld", function( data ) {
$( "<script/>", {
"type": "application/ld+json",
"html": JSON.stringify(data)
}).appendTo( "head" );
});

</script>

Cela peut être votre meilleure option. Il a utilisé version jQuery 3.1.1 pour cette solution.

2
James Anderson Jr.

réponse de l’unor le résume, mais j’aimerais aussi ajouter:

De la spec:

Définir l'attribut [type] sur une autre valeur [autre qu'un type MIME JavaScript] signifie que le script est une donnée block , qui n'est pas traité. Aucun des attributs <script> (à l'exception de type lui-même) n'a d'effet sur les blocs de données. Les auteurs doivent utiliser un type MIME valide, qui n'est pas un type MIME JavaScript, pour désigner les blocs de données.

Donc, en d'autres termes, si vous avez un <script> avec un attribut type défini sur autre chose que text/javascript (ou un équivalent type MIME JavaScript ), alors tous les attributs, y compris src, n'auront aucun effet.

1
chharvey