web-dev-qa-db-ja.com

Google SDTTは構造化データをURLでフェッチしません

最初に、サーバー側でブレッドクラムと製品マークアップの構造化データを作成し、それらをページの<body>にレンダリングするコードをいくつか記述しました。 Googleの構造化データテストツールによるとマークアップは正しかったものの、SERPに違いはなく、「スニペット」ではなく「URLでフェッチ」を選択した場合、ツールは指定された<head>のみをフェッチしていました。ページのURLなので、構造化データは検出されませんでした。

Googleのドキュメントでは、構造化データをHTMLページのbodyまたはheadに挿入できると記載されているため、これは混乱を招きました。

私は自分のアプローチを切り替えて、製品の構造化データを<head>セクションに配置し、パンくずリストの構造化データをそのままレンダリングすることにしました。 JavaScriptまたはAJAXでデータを動的に追加しても問題ないことをドキュメントで読んだので、構造化データを作成してページの<head>に追加するスクリプトを作成しました。

「URLのフェッチ」オプションで新しいリンクをテストしたところ、Googleのツールはページ全体をフェッチしていましたが(以前はできませんでした)、製品の構造化データを表示していませんでした。ただし、今回はパンくずデータをフェッチしていました。これは以前は行われず、コードの内容を変更することもありませんでした。

  1. ツールが最初に<head>のみをフェッチし、<body>をフェッチしないのはなぜですか?
  2. 後でツールが<body>パーツもフェッチするのはなぜですか?
  3. URLでフェッチした場合、ページに製品マークアップが表示されないのはなぜですか?ドキュメントとは異なり、JavaScriptによって追加されたときに構造化マークアップが検出されないのでしょうか?

製品マークを作成して<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>
1

SDTTがheadのみをフェッチするケースに遭遇したことはありません。私の推測では、サーバー(ユーザーまたはGoogleのサーバー)の1つに問題が発生しています。

Google検索 supports JSON-LDがJavaScriptを介して追加されましたが、必ずしもGoogleのSDTTがこれをサポートしているとは限りません。 SDTTがJavaScriptを実行しない多くのケースに遭遇しましたが、JavaScriptを実行するケースはありませんでした(ただし、クライアント側でJSON-LDを追加することはないので、それほど意味がある必要はありません)。

プロジェクトで許可されている場合、最適なケースは、サーバー側に構造化データを追加することです。これにより、すべてのユーザーが構造化データを利用できるようになります(ほとんどのユーザーはJavaScriptをサポートしていないため)。

SDTTがheadのみを再度フェッチする場合は、この問題を調査することをお勧めします。

1
unor