はじめに
WordPressサイトで構造化データ(JSON-LD)を実装していますか?
Googleに対して「このページは何のページか」「誰が書いたのか」「いつ更新されたのか」などを正しく伝えるために、構造化データは非常に重要です。
しかし、ただ固定の構造化データをすべてのページに書くだけでは意味がありません。
大切なのは、ページの種類ごとに内容を動的に変えて出力することです。
本記事では、WordPressで構造化データをページの種類に応じて動的に出力し、
実際にページごとにどのように変わっているのかを検証してみます。
実装例:functions.phpに追加したコード
function add_post_type_jsonld() {
if ( is_singular() ) {
global $post;
$post_type = get_post_type( $post );
$title = get_the_title( $post );
$url = get_permalink( $post );
$author_name = get_the_author_meta( 'display_name', $post->post_author );
$date_pub = get_the_date( 'c', $post );
$date_mod = get_the_modified_date( 'c', $post );
$excerpt = wp_strip_all_tags( get_the_excerpt( $post ) );
$image_url = get_the_post_thumbnail_url( $post, 'full' ) ?: 'https://example.com/default-image.png';
// 投稿タイプに応じてスキーマの種類を切り替え
if ( $post_type === 'post' ) {
$schema_type = 'BlogPosting';
} elseif ( $post_type === 'page' ) {
$schema_type = 'WebPage';
} else {
$schema_type = 'Article';
}
$jsonld = [
'@context' => 'https://schema.org',
'@type' => $schema_type,
'mainEntityOfPage' => [
'@type' => 'WebPage',
'@id' => $url,
],
'headline' => $title,
'author' => [
'@type' => 'Person',
'name' => $author_name,
'url' => get_author_posts_url( $post->post_author ),
],
'publisher' => [
'@type' => 'Organization',
'name' => get_bloginfo( 'name' ),
'logo' => [
'@type' => 'ImageObject',
'url' => 'https://example.com/logo-square.png',
],
],
'datePublished' => $date_pub,
'dateModified' => $date_mod,
'description' => $excerpt,
'url' => $url,
'image' => $image_url,
];
echo '<script type="application/ld+json">' .
wp_json_encode( $jsonld, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT ) .
'</script>';
}
}
add_action( 'wp_head', 'add_post_type_jsonld' );
ポイント解説:「@type」と「mainEntityOfPage」
@type
はページ種別に応じて切り替えています。- 投稿は
BlogPosting
- 固定ページは
WebPage
- その他の投稿タイプは汎用的に
Article
を指定
- 投稿は
mainEntityOfPage
は、この記事が属するページ情報として、WebPage
タイプとページのURLを指定しています。
これによりGoogleに記事とページの関係が正しく伝わります。
実際の出力例
投稿ページ
{
"@type": "BlogPosting",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/sample-post/"
},
...
}
固定ページ
{
"@type": "WebPage",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/about/"
},
...
}
出力の確認方法
- ブラウザのソースコード(view-source:)で
<script type="application/ld+json">
を探す - GoogleのリッチリザルトテストにURLを入れて検証
- ページごとに
@type
や@id
が変わっていれば問題ありません
まとめ:構造化データは「動的に」「適切に」
構造化データはただ書くだけでなく、ページの種類に合わせて動的に変える設計が重要です。
WordPressの条件分岐を使い、適切なスキーマタイプを出力しましょう。
この設計によって、Googleへの正確な情報伝達とリッチリザルト獲得に繋がります。
ぜひご自身のサイトで検証してみてください。