
1月22日〜23日にGoogle Search Consoleから「パンくずリストhttps://www.○○○○.com/で問題が検出されました」というメールが届きました。
当サイトのドメイン以外にも私が管理するその他のWordpressサイトから同じメールが届いたので、Googleの仕様変更だろうと予測出来ました。
このような仕様変更の対応スピードでテーマの善し悪しが分かります。
パンくずの構造化データ表記が古い
2020年4月6日以降、data-vocabulary.orgをリッチリザルト検索結果の対象外とすることが、Googleから発表されました。
パンくずリストの警告は比較的古いWordpressテーマを使っていた場合に起こるというわけです。
当方の管理しているWordPressテーマでも複数のサイトが警告されています。
WordPressテーマTCD「UNIQUE」やisotypeの「MYSTIC BLUE」、「Simplicity2」が警告対象でした。
このブログテーマ「WING(AFFINGER5)」や「LIQUID PRESS」は警告されていません。
新しいschema.orgを既に使っていたからです。
「Simplicity2」については、その日のうちに対応バージョン2.8.5が公開されました。
WordPressテーマTCD「UNIQUE」のパンくずをdata-vocabulary.orgからschema.orgに変更する
仕様変更ですので、リミットの4月までには全てのテーマで対応版が出てくると予想されます。
しかし、「Simplicity2」の対応の速さを見てしまうと、弊社の公式サイトで使用しているWordPressテーマTCD「UNIQUE」の対応速度が不安になりました。
そこで、自分で修正することに。
修正に当たっては以下のサイトを参考にさせて頂きました。
参照 data-vocabulary.org schema deprecated の警告が出た!パンくずリストの構造化データを修正しましょう(marie-web.design)
しかし、パンくずの正しい使用としては現在表示中のURLも表記する必要があるはずです。
参照 パンくずリストを構造化データでリッチスニペット対応する方法(webliker.info)
それも考慮して修正します。
breadcrumb.phpの修正
WordPressテーマTCD「UNIQUE」の修正箇所は「breadcrumb.php」です。
これを以下のように修正します。
<?php $options = get_desing_plus_option(); $pcount = 0; $http = is_ssl() ? 'https://' : 'http://'; $url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?> <div id="bread_crumb"> <ul itemscope itemtype="http://schema.org/BreadcrumbList" class="clearfix"> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="home" ><a itemprop="item" href="<?php echo esc_url(home_url('/')); ?>"><span itemprop="name"><?php _e('Home', 'tcd-w'); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php if(is_post_type_archive('work') || is_tax('work-cat')) { $archive_name = $options['work_breadcrumb']; ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php echo esc_html($archive_name); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_post_type_archive('news')) { $archive_name = $options['news_breadcrumb']; ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php echo esc_html($archive_name); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif (is_category()) { $archive_name = $options['blog_breadcrumb']; ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="<?php echo esc_url(get_permalink( get_option('page_for_posts') )); ?>"><span itemprop="name"><?php echo esc_html($archive_name); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php $cat = get_queried_object(); ?> <?php if($cat -> parent != 0): ?> <?php $ancestors = array_reverse(get_ancestors( $cat -> cat_ID, 'category' )); ?> <?php foreach($ancestors as $ancestor): ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="<?php echo get_category_link($ancestor); ?>"><span itemprop="name"><?php echo get_cat_name($ancestor); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php endforeach; ?> <?php endif; ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php echo $cat -> cat_name; ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_tag()) { ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php echo single_tag_title('', false); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_day()) { ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php echo esc_html(get_the_time(__('F jS, Y', 'tcd-w'))); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_month()) { ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php echo esc_html(get_the_time(__('F, Y', 'tcd-w'))); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_year()) { ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php echo esc_html(get_the_time(__('Y', 'tcd-w'))); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_author()) { global $wp_query; $curauth = $wp_query->get_queried_object(); //get the author info ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php echo esc_html($curauth->display_name); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_home()) { $archive_name = $options['blog_breadcrumb']; ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php echo esc_html($archive_name); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_search()) { ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php _e("Search Result","tcd-w"); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_404()) { ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php _e("Sorry, but you are looking for something that isn't here.","tcd-w"); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_singular('work')) { $archive_name = $options['work_breadcrumb']; ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="<?php echo esc_url(get_post_type_archive_link('work')); ?>"><span itemprop="name"><?php echo esc_html($archive_name); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php trim_title(28); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_singular('news')) { $archive_name = $options['news_breadcrumb']; ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="<?php echo esc_url(get_post_type_archive_link('news')); ?>"><span itemprop="name"><?php echo esc_html($archive_name); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php trim_title(28); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_single()) { $archive_name = $options['blog_breadcrumb']; ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="<?php echo esc_url(get_permalink( get_option('page_for_posts') )); ?>"><span itemprop="name"><?php echo esc_html($archive_name); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <?php $categories=get_the_category(); $count=1; foreach ($categories as $category) { ?> <a itemprop="item" href="<?php echo get_category_link($category->term_id) ?>"><span itemprop="title"><?php echo $category->name ?></span><?php if($count!=count($categories)) echo ',' ?></a> <?php $count++; ?> <?php } ?> <meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php trim_title(28); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php } elseif(is_page()) { ?> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="last"><a itemprop="item" href="<?php echo $url; ?>"><span itemprop="name"><?php the_title(); ?></span></a><meta itemprop="position" content="<?php echo $pcount += 1; ?>"></li> <?php }; ?> </ul> </div>
簡単に解説すると「breadcrumb.php」の修正は以下のステップです。
- <ul class=”clearfix”>を<ul itemscope itemtype=”http://schema.org/BreadcrumbList” class=”clearfix”>に変更
- <li itemscope=”itemscope” itemtype=”http://data-vocabulary.org/Breadcrumb”>を<li itemprop=”itemListElement” itemscope itemtype=”http://schema.org/ListItem”>に変更
- URLに itemprop=”item”を追加
- ページ名称を<span itemprop=”name”>でくくる
- ページ階層を示す<meta itemprop=”position>を追加
- 現ページのURLを追加
<meta itemprop=”position” content=”<?php echo $pcount += 1; ?>”>がパンくずの階層を表します。
$pcountを一つずつカウントアップし、HOMEから表示ページまでのitemprop=”position”を決定します。
class=”last”を指定してあるところが現在のページですので、<a itemprop=”item” href=”<?php echo $url; ?>”>を追加しています。
現在のページのパンくずはリンクアクションを起こしたくないので、CSSに以下を追加します。
#bread_crumb li.last a { pointer-events: none; }
修正後にリッチリザルトテストを行ってみました。
参照 リッチリザルト テスト(search.google.com)
リッチリザルトと判定されましたので、問題なさそうです。
その後、Google Search Consoleの警告も消えました。
かなり面倒くさい修正でしたね。
やっぱり、アップデートを待った方が良かったかも。
by T.Y.