昨日、 Google ウェブマスターツールでタイトルタグの重複が大量にあった件の対処をした。
重複の原因は大きく分けると 2 つのパターン。
- 「 ?view=com 」「 ?view=wrt 」など URL のあとにパラメータがつく
- 月別アーカイブやカテゴリ、タグページなどで、記事数が多く複数のページにわたっているとき、同じ <title> タグがついてしまっている
- カテゴリとタグで同じ文字列があるとき、 <title> タグが重複
これは、携帯表示プラグイン MobileEye+ のコメントページ、コメント書き込みページの URL 。実験的に入れているツールがモバイルページもパソコンのページと認識させているため起こっているみたい。「 link rel= ” canonical ”」を入れてとりあえずの対策をしたけれど、根本的な対策が必要っぽい。要相談。
今回は 2) と 3) に対して対策を行った。
まずは、 <title> 要素をカスタマイズできるプラグインがないか調査。 All in One SEO Pack というプラグインが、 <title> タグを気軽に変更できるもので利用したみました。しかし、問題発生。 <title> タグを強制的に書き換えるため、携帯サイトの <title> タグも書き換わり、文字コードの不一致(本体は UTF8 、携帯サイトは Shift-JIS )から文字化けが起こってしまった。なので、テンプレート単位での対応に切り替える。
下記サイトを参考にテンプレートの <title> タグ内の出力を改変。
→東京税理士ブログ: WordPress で全てのページを違うタイトルにする
具体的には以下の変更を行った。
- タグページはタグ語句の後に [tag] と追加(カテゴリとの差別化)
- 複数にわたるページには「 Part ○」と追加
- ついでに検索結果のページも「[ 検索文字列 ]の検索結果」に変更
- 月別ページも「 2008 5 月」から「 2008 年 5 月」と「年」が入るよう変更(これは好み)
複数ページにわたるときは、「 $paged 」という関数が 2 ページ目以降のページ番号を出力しているらしい。
また、各ページで条件分岐をして対処。
→ WordPress. 日本語:条件分岐タグ
書いたコードは以下の通り。ちなみにアーカイブページには「/ぼやき」と入るようになっているので、参考にされる場合は注意してください。
<title><?php
if(is_home()) {bloginfo('name'); if($paged){echo ' Part '.$paged; }}
if(is_month()){echo get_the_time('Y 年 n 月');} else{wp_title('');}
if(is_search()){echo '['.$s.'] の検索結果'; if($paged){echo ' Part '.$paged;} echo ':'; bloginfo('name');}
if(wp_title('', false)){if(is_tag()){echo ' [tag]';} if($paged){ echo ' Part '.$paged;} echo ':'; bloginfo('name'); echo '/ぼやき';}
?></title>
一応めでたく対処できたとおもうけど、おかしなところがあったら教えてください。