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"
} ] }
script
element は、次の2つの目的に使用できます。
また、データについては、仕様では以下を定義しています。
データブロックを含めるために使用する場合、データをインラインで埋め込む必要があります[…]
したがって、src
属性は、データではなくスクリプトにのみ使用できます。
→JSON-LDはデータであるため、インライン化する必要があります。
JSON-LDファイルのリンクは可能ですlink
要素を使用していますが、Schema.orgのスポンサーである検索エンジンはそれをサポートしていないようです。
ドキュメント によると:
[…]また、GoogleはJSONコードを読み込むことができます、JavaScriptコードや埋め込みウィジェットによって、ページのコンテンツに動的に挿入されますコンテンツ管理システム。
これは、外部のjson-ldデータをリンクすることはできませんが、それでも動的にロードしてDOMに注入できることを示唆しています。 JSON-LDをDOMに挿入する静的JavaScriptをページにロードできるため、これはユースケースに十分な場合があります。
これは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 を使用しました。
nor's answer 要約しますが、私も追加したい:
仕様から:
[
type
]属性を他の値[JavaScript MIMEタイプ以外]に設定すると、スクリプトはデータであることを意味しますblock、処理されません。<script>
属性(type
自体を除く)は、データブロックに影響しません。作成者は、JavaScript MIMEタイプではない有効なMIMEタイプを使用して、データブロックを示す必要があります。
つまり、<script>
(または同等の JavaScript MIMEタイプ )以外に設定されたtype
属性を持つtext/javascript
がある場合、 src
を含むすべての属性は効果がありません。