友達のWebサイトにSchemaをインストールしています。私は ServiceType を彼の House Clearance ページに加え、彼が彼のローカルエリアに提供する他のすべてのサービスを追加していますまだ開発中のareaServed > GeoShape > circle
を使用するボーンマス。
ウェブサイトはWordPressで動作するため、ループ内のコードは次のようになります:
<?php ?>
<?php while (have_posts()) : the_post(); ?>
<article id="post-<?php the_ID(); ?>" itemscope itemtype="http://schema.org/Service">
<?php the_title( '<h1>', '</h1>' ); ?>
<?php the_content(); ?>
</article>
<?php endwhile; ?>
<?php get_footer(); ?>
WordPress the_ID
WordPress id="post-<?php the_ID(); ?>"
に慣れていない場合は、一意のページIDを要素に追加します。上記のコードからわかるように、id="post-X"
とitemscope itemtype="http://schema.org/Service"
の両方が要素コンテナ<article>
に接続されています。
Googleのリッチスニペットテストツールを使用 次の結果が得られます:
ご覧のとおり、@ idは要素からIDを取得し、HASHTAGなしでページのパスに追加します。つまり、URLは実際には存在せず、404ステータスを返します。
質問:
id="post-<?php the_ID(); ?>"
の名前をclass="post-<?php the_ID(); ?>"
に変更するか、serviceTypeで新しい行を追加する必要がありますか?これはGoogleのSDTTの(長年の)バグだと思います。
関連するスタックオーバーフローの質問:
Googleテストツールが「id」属性を使用してMicrodataアイテムのURLを生成するのはなぜですか?
Microdataでは、itemid
属性のみがアイテムのURIを提供でき、id
attributeは、同じページ(itemref
属性を持つ)上の要素の参照にのみ使用され、URIの提供には使用されません。そのため、SDTTは、すべてのid
参照を実行した後、itemref
値で何も実行しないでください。
itemid
属性の値を指定すると、SDTTがid
属性から抽出した値が上書きされます。それが私たちの側からこの問題を解決する唯一の方法でしょう。
<article id="post-29" itemscope itemtype="http://schema.org/Service" itemid="/acme-service#this">
itemid
属性は、値としてURIを取ります。関連するドキュメントをこのURIで提供することをお勧めしますが、Microdataでは必須ではありません。 itemid
は、 JSON-LDの@id
と同じ目的 およびRDFa Liteのresource
を提供します。