1. Canonical リンク要素
WordPress サイトに書いた記事と同じ内容を外部サイトに転載する場合の話です。
そのままにしておくと、Googleなどの検索ボットから、コピペ記事だと見なされかねないので、どちらか片方のページに「あちら(のURL)が正規のページですよ」という記述を追加することが望まれます。
これを行うには、HTMLのヘッダ部分に Canonical リンク要素を記述します。
こんな記述です。
<link rel="canonical" href="https://example.com/foobar">
href=
の後ろに正規なページのURLを指定します。
本記事では、WordPress のページ側で Canonicalリンク要素を書き換える方法を紹介します。
2. WordPress サイト側で Canonical リンク要素を書き換える
WordPress では標準で Canonical リンク要素を出力していますので、その処理を一旦削除して、独自の処理に書き換えます。
仕様としては以下を想定します。
- 特定の記事にアクセスされた場合(記事のIDで判別する)、その記事に対する正規のURLを Canonicalリンク要素にセットして出力する。
- それ以外のページの場合は、そのページのURLを Canonical リンク要素にセットして出力する。
それでは WordPress の処理を書き換える作業です。
WordPress が標準機能として Canonical リンク要素を設定している部分を探すと、wp-includes/default-filters.php というファイルであることが分かりました。この中で add_action( 'wp_head', 'rel_canonical' );
を実行しています。これは、wp_head
というフックに、rel_canonical
という関数を登録している命令です。まず、これを取り消す必要があります。wp-settings.php ファイルや Plugin API/Action Reference « WordPress Codex を見て、WordPress が実行する処理の順番を調べたところ、wp-includes/default-filter.php より後に、テーマの functions.php が実行されることが分かったので、functions.php に以下を記述することにします(何行目に書いても構いません)。
remove_action('wp_head', 'rel_canonical');
これは、先程の登録を削除する命令になります。
次に、wp_head フックに独自の関数を登録します。Canonical リンク要素の出力はこちらで全て担当することにします。先程処理を記述した直後に、以下を記述します。
add_action( 'wp_head', function() {
global $post;
$post_id = $post->ID;
if ( $post_id == 99999 ) {
echo PHP_EOL . '<link rel="canonical" href="https://example.com/123456">' . PHP_EOL;
} elseif ( $post_id == 88888 ) {
echo PHP_EOL . '<link rel="canonical" href="https://example.com/234567">' . PHP_EOL;
} else {
$url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
echo PHP_EOL . '<link rel="canonical" href="' . esc_url($url) . '">' . PHP_EOL;
}
});
ここでは、例として2つの記事に対して、外部サイトのURLをセットした Canonical リンク要素を出力しています。その際、記事のIDで比較していますが、記事のIDは、記事の編集ページのURLに入っています。
それ以外のページに対しては、その時アクセスしているURLをセットしています。
このコードでは、if 文を使って記事毎に条件分岐していますが、これ以上条件分岐の数が増えるようであれば、記述方法を改善した方がよいでしょう(見づらいので)。
後は、Canonical リンク要素を外部サイトのURLに書き換えたページにアクセスして、<head>
と </head>
の間のどこかに 以下が出力されているか確認します(ページの「ソース」を見ます)。
3. おわりに
Canonical リンク要素は「正規のURL」を(参考として)伝えるものです。そのため、Google 検索からすると「正規でないURL」側のページは評価が下がる可能性があります。
また、将来的に外部の記事を消すことになったら、今回追加した記述は消しておきましょう。