web-dev-qa-db-ja.com

Schema @idとは何ですか?また、その中のアクセスできないURLは重要ですか?

友達の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のリッチスニペットテストツールを使用 次の結果が得られます:

serviceType House Clearance

ご覧のとおり、@ idは要素からIDを取得し、HASHTAGなしでページのパスに追加します。つまり、URLは実際には存在せず、404ステータスを返します。

質問:

  • Schema @idの目的は何ですか?
  • そのURLにアクセスできるかどうかは重要ですか?
  • id="post-<?php the_ID(); ?>"の名前をclass="post-<?php the_ID(); ?>"に変更するか、serviceTypeで新しい行を追加する必要がありますか?
4
Simon Hayter

これは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を提供します。

5
unor