Verknüpfen eines externen JSON-LD-Schemas (von Schema.org)

11

Ich habe Schemas in JSON-LD gemäß Schema.org. Wenn es inline war (innerhalb von <script>Tags), hat das Google-Tool zum Testen strukturierter Daten das Schema erfolgreich erkannt.

Wenn ich es extern verlinke, zum Beispiel: <script src="json/main-schema.json" type="application/ld+json"></script>Das Tool zum Testen strukturierter Daten erkennt es nicht.

Sollte ich mir darüber Sorgen machen?


Wie ich das Arbeitsschema hatte (Beispiel von 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>

Externes Schema angelegt in main-schema.json, verknüpft mit <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"
    } ] }
marcellothearcane
quelle
Haben Sie versucht, eine absolute URL anstelle einer relativen zu verwenden? Obwohl ich die Antwort darauf nicht kenne, besteht eine schnelle Lösung, wenn Sie möchten, dass sich die Daten in einer externen Datei befinden, darin, den Inhalt einfach in eine PHP-Datei zu kopieren. Dann rufen Sie einfach die Datei in der Fußzeile auf <?php include 'json.php';?>. nur ein Vorschlag Geist.
Simon Hayter
1
@Unor sagte hier stackoverflow.com/a/30880613/1892635 Sie müssen <link>nicht verwenden, <script> da src=""nicht gültig ist. Aber Google unterstützt nur Skripte. Es sieht also so aus, als müsste es inline sein.
Simon Hayter
@ SimonHayter - Ja, normalerweise habe ich es für das Beispiel entfernt. Danke für den anderen Link - sorry, ich habe ihn nicht gesehen!
Marcellothearcane

Antworten:

11

Das scriptElement kann für zwei Dinge verwendet werden:

  • dynamische / klassische Skripte
  • Daten

Und für Daten definiert die Spezifikation:

Bei Verwendung zum Einschließen von Datenblöcken müssen die Daten inline eingebettet werden […]

Sie können das srcAttribut daher nur für Skripte verwenden, nicht für Daten.

→ Da es sich bei JSON-LD um Daten handelt, müssen Sie diese einbinden.

Während das Verknüpfen einer JSON-LD-Datei mit dem linkElement möglich ist, scheinen die Sponsoring-Suchmaschinen von Schema.org dies nicht zu unterstützen.

unor
quelle
3

Laut Dokumentation :

[…] Google kann auch JSON-LD-Daten lesen, wenn diese dynamisch in den Inhalt der Seite eingefügt werden , z. B. durch JavaScript-Code oder eingebettete Widgets in Ihrem Content-Management-System.

Dies deutet darauf hin, dass Sie zwar keine externen json-ld-Daten verknüpfen können, diese jedoch dynamisch laden und in das DOM einfügen können. Dies ist möglicherweise gut genug für Ihren Anwendungsfall, da Sie statisches JavaScript auf Ihre Seite laden können, das dann JSON-LD in das DOM einfügt.

Attila O.
quelle
3

Dies kann helfen oder auch nicht , aber sehen Sie sich an, wie Trevor Fox es getan hat :

<script>

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

</script>

Dies kann Ihre beste Option sein. Für diese Lösung verwendete er jQuery Version 3.1.1 .

James Anderson Jr.
quelle
1

Die Antwort von unor fasst es zusammen, aber ich möchte auch hinzufügen:

Aus der Spezifikation:

Das Setzen des typeAttributs [ ] auf einen anderen Wert [außer einem JavaScript-MIME-Typ] bedeutet, dass das Skript ein Datenblock ist , der nicht verarbeitet wird. Keines der <script>Attribute (außer sich typeselbst) hat Auswirkungen auf Datenblöcke. Autoren müssen einen gültigen MIME-Typ verwenden, der kein JavaScript-MIME-Typ ist, um Datenblöcke zu kennzeichnen.

Mit anderen Worten, wenn Sie <script>ein typeAttribut haben, das auf etwas anderes als text/javascript(oder einen äquivalenten JavaScript-MIME-Typ ) festgelegt ist, haben alle Attribute, einschließlich src, keine Auswirkung.

chharvey
quelle