SEOを考えるならCanonical URLも必要な要素の一つですね。
WordPressの場合、いくつか方法があります。
All in One SEO Packを使う方法だったり、header.phpに直接書き込む方法だったりがよく使われると思います。
ここでは、さらにもう一つよく使われるfunctions.phpに記述する方法を説明します。
必要な動作とPHPコード
PHPコードから行う動作は2つです。
- デフォルトのcanonicalを削除
- 適切なcanonicalを追加
まず「デフォルトのcanonicalを削除」ですが、以下のようにremove_actionを追加します。
remove_action('wp_head', 'rel_canonical');
これだけです。
次に「適切なcanonicalを追加」ですが、以下のようにadd_actionを追加します。
function add_canonical() {
echo '<link rel="canonical" href="(適切なcanonical)">';
}
add_action( 'wp_head', 'add_canonical' );
Canonical URLについてはいろいろな考え方があると思います。私は以下のようにしました。
function add_canonical() {
$canonical = null;
if( is_home() || is_front_page() ) {
$canonical = home_url();
} elseif ( is_category() ) {
$canonical = get_category_link( get_query_var('cat') );
} elseif ( is_tag() ) {
$tag = get_term_by( 'name', urldecode( get_query_var('tag') ), 'post_tag' );
$canonical = get_tag_link( $tag->term_id );
} elseif ( is_search() ) {
$canonical = get_search_link();
} elseif ( is_page() || is_single() ) {
$canonical = get_permalink();
}
if( $canonical ) {
echo '' . "\n";
}
}
考え方としては以下のようなものです。
- ホームまたはフロントページの場合はサイトトップURL
- カテゴリーの場合はカテゴリー記事一覧ページのトップ(1ページ目)URL
- タグの場合はタグ記事一覧ページのトップURL
- サイト内検索の場合はサイト内検索結果のトップURL
- 固定ページまたは投稿ページの場合はそのページURL
- その他は出力しない
最後の「その他は出力しない」の部分は、常にサイトトップURLを追加するようにしてもいいかもしれませんね。
プラグインも作ってみました
上記コードをプラグインにしてみました。
WordPressのプラグインフォルダに突っ込んで、管理画面内のプラグイン画面から「Custom Canonical」を有効にするだけです。
今後アップデートしていこうかと思っています。
と同時に、今まではしたことがなかったWordPress公式の「Plugin Directory」に登録してみようかななんていうことも考えてたりします。
近いうちにトライしようかと思ってます。