最初に、サーバー側でブレッドクラムと製品マークアップの構造化データを作成し、それらをページの<body>
にレンダリングするコードをいくつか記述しました。 Googleの構造化データテストツールによるとマークアップは正しかったものの、SERPに違いはなく、「スニペット」ではなく「URLでフェッチ」を選択した場合、ツールは指定された<head>
のみをフェッチしていました。ページのURLなので、構造化データは検出されませんでした。
Googleのドキュメントでは、構造化データをHTMLページのbody
またはhead
に挿入できると記載されているため、これは混乱を招きました。
私は自分のアプローチを切り替えて、製品の構造化データを<head>
セクションに配置し、パンくずリストの構造化データをそのままレンダリングすることにしました。 JavaScriptまたはAJAXでデータを動的に追加しても問題ないことをドキュメントで読んだので、構造化データを作成してページの<head>
に追加するスクリプトを作成しました。
「URLのフェッチ」オプションで新しいリンクをテストしたところ、Googleのツールはページ全体をフェッチしていましたが(以前はできませんでした)、製品の構造化データを表示していませんでした。ただし、今回はパンくずデータをフェッチしていました。これは以前は行われず、コードの内容を変更することもありませんでした。
<head>
のみをフェッチし、<body>
をフェッチしないのはなぜですか?<body>
パーツもフェッチするのはなぜですか?製品マークを作成して<head>
に追加するJavaScriptコードは、document.ready
で実行されます。ブレッドクラムマークアップは、実行時にHTMLと共にレンダリングされます。
単純なjson-ldをWordPress記事の本文に追加できない場合がありました。以下は機能するようですが、CDATAの開始タグと終了タグを別々の行に残す必要がありました。
<script type="application/ld+json">
//<![CDATA[
{
"@context": "https://schema.org",
...
}
//]]>
</script>
WordPressはスクリプトを圧縮して破壊していました(CDATAタグがJSコメントで始まっているため)と思います。json部分のみを圧縮するとWPスクリプトはそのままにしておきます。
<script type="application/ld+json">
//<![CDATA[
{"@context": "https://schema.org", ...}
//]]>
</script>
これは機能しません
<script type="application/ld+json">//<![CDATA[{"@context": "https://schema.org", ...}//]]></script>
SDTTがhead
のみをフェッチするケースに遭遇したことはありません。私の推測では、サーバー(ユーザーまたはGoogleのサーバー)の1つに問題が発生しています。
Google検索 supports JSON-LDがJavaScriptを介して追加されましたが、必ずしもGoogleのSDTTがこれをサポートしているとは限りません。 SDTTがJavaScriptを実行しない多くのケースに遭遇しましたが、JavaScriptを実行するケースはありませんでした(ただし、クライアント側でJSON-LDを追加することはないので、それほど意味がある必要はありません)。
プロジェクトで許可されている場合、最適なケースは、サーバー側に構造化データを追加することです。これにより、すべてのユーザーが構造化データを利用できるようになります(ほとんどのユーザーはJavaScriptをサポートしていないため)。
SDTTがhead
のみを再度フェッチする場合は、この問題を調査することをお勧めします。