【ha-Basic】構造化データがきちんと出力されるようにしました

【ha-Basic】構造化データがきちんと出力されるようにしました

どんどんいろいろな要素を入れている感じで、一歩ずつ使えるテーマになってきていると自負している【ha-Basic】テーマ。

今回は見た目には何も変わらない「構造化データ」についての変更です。

構造化データとは「検索エンジンや その他のクローラーに理解できるような形でいろいろな部分にタグ付けしたもの」らしい(実は私よくわかっていません・・)です。検索エンジンから理解されやすいページということはSEO対策になる?と判断してソースに表示され、認識されるようにしました。

構造化データについて詳しくは構造化データの仕組みについてを参照ください。

私が勝手に師と仰ぐ「Simplicity2」テーマでは共通の部分は各phpファイルに、個別の処理が必要なものはそのように?コードが書かれていたのですが、私の頭では爆発!!な中、footer.phpへ挿入してきちんと出力されるものが掲載されていたので利用させていただくことにしました。完全に検索頼み、コピペもいい加減にしないと・・・(笑)。

一応【ha-Basic】テーマに合うようにと書いている通り、コードの内容は理解して使わせていただいておりますのでご安心を!!

footer.phpへ挿入したコードとちょこっと解説

実際に追加したコードは以下になります。要はhtmlタグの中にそれぞれ記述するのではなく、一括して「ここが構造化の内容でっせ!」というものをページ末尾に書いているということになります。

これを実装するにあたっては、今まで何もわからず設定していた構造化に関する記述をすべて削除しました。

<?php if ( is_single() || is_page()) : //投稿と固定ページで構造化データを出力?>
<?php
$thumbnail_id = get_post_thumbnail_id($post);
$imageobject = wp_get_attachment_image_src( $thumbnail_id, 'full' ); //サムネイルを取得?>
<?php //ここから構造化データの記述 ?>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BlogPosting",
"mainEntityOfPage":{
"@type":"WebPage",
"@id":"<?php the_permalink(); ?>"
},
"headline":"<?php the_title(); ?>|<?php bloginfo( 'title' ); ?>",
"image": [
"<?php echo $imageobject[0]; ?>"
],
"datePublished": "<?php echo get_post_time( 'c', true ); ?>",
"dateModified": "<?php echo get_post_modified_time('c',true);?>",
"author": {
"@type": "Person", //組織の場合は"Organization"と記入
"name": "<?php the_author(); ?>" //毎回同じ著者の場合は直接記入してもOK
},
"publisher": {
"@type": "Organization", //個人の場合は"Person"と記入
"name": "<?php the_author(); ?>", //ここに社名や個人名を記入
"logo": {
"@type": "ImageObject",
"url": "<?php echo $imageobject[0]; ?>" //ここにロゴのURLを記入
}
},
"description": "<?php echo get_the_excerpt(); ?>"
}
</script>
<?php endif; ?>
<?php if ( is_single() || is_page() || is_tag() || is_date() || is_search()) : //投稿と固定ページ、アーカイブページのタイトル?>
<?php //ここから構造化データの記述 ?>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BlogPosting",
"mainEntityOfPage":{
"@type":"WebPage",
"@id":"<?php the_permalink(); ?>"
},
"headline":"<?php bloginfo( 'title' ); ?>",
"image": [
"<?php echo get_template_directory_uri() ?>/images/webclipicon.png"
],
"datePublished": "<?php echo get_post_time( 'c', true ); ?>",
"dateModified": "<?php echo get_post_modified_time('c',true);?>",
"author": {
"@type": "Person", //組織の場合は"Organization"と記入
"name": "<?php the_author(); ?>" //毎回同じ著者の場合は直接記入してもOK
},
"publisher": {
"@type": "Organization", //個人の場合は"Person"と記入
"name": "<?php the_author(); ?>", //ここに社名や個人名を記入
"logo": {
"@type": "ImageObject",
"url": "<?php echo get_template_directory_uri() ?>/images/webclipicon.png" //ここにロゴのURLを記入
}
},
"description": "<?php bloginfo( 'description' ) ?>"
}
</script>
<?php endif; ?>

・・・ん?前半と後半って同じ?と思った方、甘いですね(笑)。

前半は「投稿」と「固定ページ」用のもの、後半はトップページが固定ページでない場合(ブログ一覧の場合)用のものです(条件分岐させています)。1つのコードの中で複雑にしてもよかったのですが個人的に後から見やすいように別々にしました。

違いは2つに割ったものを並べていただければわかると思います。

一応このサイトの固定ページ、投稿、トップページでは構造化エラーなどは出ませんでしたので大丈夫だと思います。

Google提供の構造化チェックツールはこちら

おまけ 条件分岐の「&&」「||」の意味がやっと分かりました

実は後半部分のトップページが固定ページでない場合という条件の書き方、恥ずかしながら知らなかったんです。↑の参考ページにもこのことは載ってなくて(WordPressは環境によるのでコピペしてね!はよく確認することが必要ですよ)、独自に調べました。

テーマ作ってるのにそんなことも知らないの??と怒られそうですが、そんな人でもテーマは作れます(笑)。恐らくこのテーマにもまだまだ抜けているところがいっぱいあることでしょう(笑)。

ただこういうことは自身の狭い世界でごちゃごちゃ考えるよりも、多くの人に使ってもらって指摘していただいた方がよっぽど勉強になるし、よっぽど完成が速いんです。

脱線しかけた・・・

後半の条件分岐の条件にある

<?php if ( is_front_page() && !is_page()) : //トップページの構造化データを出力?>

の行。

is_front_page(サイトのトップページだったら)と!is_page(固定ページじゃなかったら)という条件の間に「&&」というのが入ってますよね?

これは「かつ」を意味するそうで、↑の条件だと
サイトのトップページであり、固定ページでないとき
という意味になるんですね。(is_〇〇に!を付けると反対の意味になります。↑の場合は固定ページでないという意味になります)

もう1つの「||」はorの意味で「または」ということになります。↑の条件で&&の代わりに||を使うと
サイトのトップページまたは固定ページでないもの
となってしまいますから全然意味が変わってきますね。

もともと固定ページと投稿については冒頭で「is_sinle()||is_page()」として
固定ページまたは個別投稿
としていますから、トップページか否かに関係なく固定ページは構造化データが出力されるわけなので、残るは固定ページにしていない場合のトップページをどうするか?ということだけになるのです。

この複合条件、例えば
is_sinle()||is_page()&&is_frontpage()にしたらどうなるんだろう・・・それはまた研究することとします(笑)

現段階での謎??

本当によくわかってなくて申し訳ない限りなのですが、カテゴリーやタグ一覧、ブログ一覧などにこのデータって必要なの?必要ないの?という素朴な疑問が・・。

これについていろいろ調べてみましたが「必要!」とも「不要!」ともはっきり書かれているものがありませんでしたので、ひとまずこれらについては余分なものが悪影響を与えることを避けるため「不要!」と勝手に判断してます。

今後の研究でもしも「必要!」となったらまた変更しようと思っています。

根本的な意見として、このデータってそもそも必要なのでしょうか?SEO対策になるのでしょうか?

この方法では不具合が発生する場合があります

【ha-Basic】をお使いの方は既にこの機能が実装されていますが、サイトの内容によっては不具合が発生する場合があることが発覚しました。新たに

で構造化データについてと、新しいコードについて紹介していますので、チェックしてみてください。

  • 世界一やさしいプラス WordPress 5.x 対応 (インプレスムック)
  • 世界一やさしいプラス WordPress 5.x 対応 (インプレスムック)

    インプレス

    専門的な難しい知識が無くても、カッコイイWebサイトが作れる「WordPress」を、大きな文字と画面でわかりやすく解説する「世界一やさしい」シリーズから発売! レンタルサーバーや独自ドメインの取得、WordPressのインストールから、手順の通りに進めるだけで、映えるWebサイトが作れてしまう♪ お店や会社の宣伝や集客に当たり前になっていますが、まだ無い人は今こそチャレンジするのも良いのでは? 基本が学べる本誌は入門書として最適です!

作者:

☆Wordpressでサイトをカスタマイズしていく上で有用な情報を配信しつつ、このサイトでも使用している【HABONE】テーマの制作と配布を行っています。
☆「ココナラ」でサイトカスタマイズのお手伝い、不具合の修復、サイト引っ越し代行なども行っています。

年齢:40代 趣味/園芸・ペット・卓球