Simplicityで独自に変更したSEO施策

当ブログの記事に共感していただけたら、また読みに来ていただけると嬉しいです。読んでくれる方の数が多くなると、更新するヤル気に繋がります(^^)

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

Simplicityにテーマを変更しました。

HTMLコードを眺めていると、SEO的に私の好みと合わない部分がいくつかあったので、独自に変更しました。

スポンサーリンク

分割ページ(ページネーション)の取り扱い

カテゴリーページなど、分割されたページは、rel=”next”、rel=”prev”タグでつなげて、関連性を明示することを、Googleは推奨しています。分割されたページを一つのページと見なしてくれます。

【参考】ページ送りに対するSEO施工方法(「prev/next」とcanonicalを併用)

ところが、Simplicityでは、分割ページにrel=”next”、rel=”prev”タグはついていません。代わりに、分割ページの2ページ目以降にはnoindexがついています。重複ページと低品質ページの防止のためです。

【参考】Simplicityが内部SEO施策で行っている7つのこと

この方法だと、2ページ目以降はインデックスされず、検索結果に出ることはありません。そもそもGoogleは推奨していません。

当ブログでは、Googleが推奨する方法を採用しました。分割されたページに、rel=”next”、とrel=”prev”タグを実装することで、一つのページとしてみなしてもらうようにしました。

個別記事のrel=”next”、rel=”prev”

WordPressはデフォルトで、個別記事ページ上(single.php)で前後の記事をrel=”next”、rel=”prev”タグで表示してしまいます。これはGoogleが推奨するrel=”next”、rel=”prev”タグの本来の使い方(分割ページに使う)とは異なります。

Simlpicityもデフォルトと同様に、個別記事にrel=”next”、rel=”prev”タグを出力しています。当ブログでは、表示をキャンセルしました。

【参考コード】
子テーマのfunctions.phpに追記すると、前述2つの施策が実装できます。

remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );//デフォルトのnext/prevを消す
function link_rel_next_prev(){
global $paged;
if ( get_previous_posts_link() ){ ?>
<link rel="prev" href="<?php echo get_pagenum_link( $paged - 1 ) ?>" />
<?php }
if ( get_next_posts_link() ){ ?>
<link rel="next" href="<?php echo get_pagenum_link( $paged +1 ) ?>" />
<?php }
}
add_action( 'wp_head', 'link_rel_next_prev' );//分割ページのみnext/prevを表示

トップページのページネーション

トップページもページネーションで分割しています。1ページ2ページ3ページのように、過去の記事を読むのに便利です。しかし、適切な対処をしないと、重複コンテンツの危険があります。

有名ブログトップページをいくつか調査したところ、分割ページの2ページ目以降にnoindexが付いているところはありませんでした。Simplicityは2ページ目以降にnoindexがついてます。

rel=”next”、rel=”prev”タグは、付いているところもあれば、ないところもありました。どれが正しいとは言い切れず、どれでも良いと思います。

当ブログでは、トップページの2ページ目以降のnoindexは廃止して、rel=”next”、rel=”prev”タグをつけることにしました。つけておけば、少なくとも重複コンテンツ扱いにはならないと考えました。

【参考コード】
子テーマheader-seo.phpを作り、 is_paged()をコメントアウトする

<?php if( (is_archive() && !is_category()) || //アーカイブページはインデックスに含めない
is_tag() || //タグページをインデックスしたい場合はこの行を削除
//  is_paged()  || //ページの2ページ目以降はインデックスに含めない(似たような内容の薄いコンテンツの除外)
is_search() ): //検索結果ページはインデックスに含めない
?>

canonicalタグ

canonicalタグは、WordPressのデフォルトだと、個別ページ(single.php)にしか出力されません。Simlpicityも個別記事にしか出力しません。

トップページやカテゴリーページにも表示させたいので、デフォルト表示をキャンセルして、独自に表示させました。

【参考コード】
子テーマのfunctions.phpに追記する

function myurl(){
global $paged,$page,$post;
if (is_home()) {
$canonical_url  = get_bloginfo('url');
} elseif (is_category()) {
$canonical_url=get_category_link(get_query_var('cat'));
} elseif (is_page() || is_single()) { 
$canonical_url = get_permalink();
} elseif(is_404()) {
$canonical_url =  get_bloginfo('url')."/404";
}
if ($canonical_url && ( $paged >= 2 || $page >= 2)) {
$canonical_url = $canonical_url.'/page/'.max( $paged, $page ).'';
}
return $canonical_url;
}
remove_action('wp_head', 'rel_canonical');//デフォルトのcanonicalタグ削除
function cano(){
if($canonical_url = myurl()){
?>
<link rel="canonical" href="<?php echo $canonical_url; ?>">
<?php
}
}
add_action( 'wp_head', 'cano' );

OGPタグ

SEOとは直接関係ないのですが、OGPタグも変更しています。

Simplicityの機能でOGPタグを表示させると、カテゴリーページのタイトルとURLが、トップページになってしまいます。canonicalタグの表示と同じコードを利用して、個別のURLとタイトルを表示するようにしました。

【参考コード】
子テーマのfunctions.phpに追記する

function mydescription(){
global $post;
if (is_home()) {
$desc  = get_bloginfo('description');
} elseif (is_category()) {
$desc  = mb_substr(strip_tags(category_description()), 0, 60). "……";
} elseif (is_page() || is_single()) { 
$description = get_post_meta($post->ID, 'description', true);
if ($description){
$desc  = $description;
}else{
$desc = strip_tags($post->post_content);
$desc = str_replace("n", "", $desc);
$desc = mb_substr($desc, 0, 60). "……";
}
} elseif(is_404()) {
$desc  = '';
}
return $desc;
}

header-ogp.phpの子テーマを編集し、mydescription()、myurl()に書き換える。

} else {//単一記事ページページ以外の場合(アーカイブページやホームなど)
echo '<meta property="og:description" content="'; echo mydescription(); echo '">';echo "n";//「一般設定」管理画面で指定したブログの説明文を表示
echo '<meta property="og:title" content="'; wp_title('','true','right'); echo '">';echo "n";//「一般設定」管理画面で指定したブログのタイトルを表示
echo '<meta property="og:url" content="'; echo myurl(); echo '">';echo "n";//「一般設定」管理画面で指定したブログのURLを表示取る
}

header-twitter-card.phpの子テーマを編集し、mydescription()、myurl()に書き換える。

} else {//単一記事ページページ以外の場合(アーカイブページやホームなど)
echo '<meta name="twitter:description" content="'; echo mydescription(); echo '">';echo "n";//「一般設定」管理画面で指定したブログの説明文を表示
echo '<meta name="twitter:title" content="'; wp_title('','true','right'); echo '">';echo "n";//「一般設定」管理画面で指定したブログのタイトルを表示
echo '<meta name="twitter:url" content="'; echo myurl(); echo '">';echo "n";//「一般設定」管理画面で指定したブログのURLを表示
}

一覧リストのスタイルを「本文表示」の時のH1タグ問題

当ブログでは、一覧リストのスタイルを「本文表示」にしています。ところが、記事タイトルのすべてにH1タグがついてしまいます。HTML5からH1タグは複数あっても問題なくなりましたが、SEO的には気持ちが悪いです。

投稿の本文部分を、そのまま一覧に表示させている後付け機能であるため、テーマ側での対応は難しいということで、独自にカスタマイズしました。

entry-body.php

<?php  if ( is_single() ) : ?>
<h1 class="entry-title">
<?php else: ?>
<h2 class="entry-title entry-title-list">
<?php endif; ?>
<?php if ( !is_single() ) echo '<a href="'.get_permalink().'">'; //投稿ページ以外ではタイトルにリンクを貼る?>
<?php the_title(); //投稿のタイトル?>
<?php if ( !is_single() ) echo '</a>'; //投稿ページ以外ではタイトルにリンクを貼る?>
<?php  if ( is_single() ) : ?>
</h1>
<?php else: ?>
</h2>
<?php endif; ?>

style.css

.article h2.entry-title-list{
margin-top:30px;
margin-bottom:20px;
font-size: 30px;
line-height:117%;
border-left:0px solid #000;
padding:0 30px;
}

mobile.css

.article h2.entry-title-list{
padding:0;
font-size: 20px;
margin:30px 0 0 !important;
}

参考:カテゴリーページにH1タグがずらり

▼▼▼▼

以上です。参考にしてみてください。

今日のわかった

私の知識の範囲内で考えたことであり、正しいかどうかは保証できません。ご意見があれば、ぜひ@kankichiまでお聞かせ下さい!

関連記事

関連記事

スポンサーリンク

当ブログの記事に共感していただけたら、また読みに来ていただけると嬉しいです。読んでくれる方の数が多くなると、更新するヤル気に繋がります(^^)

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

フォローしていただけると、ブログ更新を見逃しません

push7 feedly
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です