web-dev-qa-db-ja.com

外部のJSON-LDスキーマのリンク(Schema.orgから)

Schema.orgに従ってJSON-LDにスキーマがあります。インライン(<script>タグ内)の場合、 Google構造化データテストツール はスキーマを正常に認識しました。

外部にリンクすると、たとえば:<script src="json/main-schema.json" type="application/ld+json"></script>構造化データテストツール は認識しません。

これは私が心配すべきことですか?


作業スキーマ(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>

main-schema.jsonにリンクされた<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

script element は、次の2つの目的に使用できます。

  • ダイナミック/クラシックscripts
  • data

また、データについては、仕様では以下を定義しています。

データブロックを含めるために使用する場合、データをインラインで埋め込む必要があります[…]

したがって、src属性は、データではなくスクリプトにのみ使用できます。

→JSON-LDはデータであるため、インライン化する必要があります。

JSON-LDファイルのリンクは可能ですlink要素を使用していますが、Schema.orgのスポンサーである検索エンジンはそれをサポートしていないようです。

9
unor

ドキュメント によると:

[…]また、GoogleはJSONコードを読み込むことができます、JavaScriptコードや埋め込みウィジェットによって、ページのコンテンツに動的に挿入されますコンテンツ管理システム。

これは、外部のjson-ldデータをリンクすることはできませんが、それでも動的にロードしてDOMに注入できることを示唆しています。 JSON-LDをDOMに挿入する静的JavaScriptをページにロードできるため、これはユースケースに十分な場合があります。

3
Attila O.

これはmay、またはnotnotかもしれませんが、どのように見てください Trevor Foxがやった

<script>

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

</script>

これが最良の選択肢かもしれません。彼はこのソリューションに jQueryバージョン3.1.1 を使用しました。

2

nor's answer 要約しますが、私も追加したい:

仕様から:

[type]属性を他の値[JavaScript MIMEタイプ以外]に設定すると、スクリプトはデータであることを意味しますblock、処理されません。 <script>属性(type自体を除く)は、データブロックに影響しません。作成者は、JavaScript MIMEタイプではない有効なMIMEタイプを使用して、データブロックを示す必要があります。

つまり、<script>(または同等の JavaScript MIMEタイプ )以外に設定されたtype属性を持つtext/javascriptがある場合、 srcを含むすべての属性は効果がありません。

1
chharvey