WordPress URLによる重複コンテンツ回避

WordPressのブログを検索エンジンに登録して何も考えずに記事を増やしていくと、しばらくしてGoogleさんあたりが本来の記事URLとカテゴリ・タグ・月別(日付別)・作者別などのアーカイブ用URLで内容が重複している(複数のURLで同じ記事が表示される)と警告してくる筈。そりゃまぁWordPressの仕組み的に当然なんだけど、対策しないで放置すると、ある日突然検索順位が圏外に叩き落されて検索からは誰も見に来てくれないサイトになってしまう。圏外に落とされると回復するのが大変なのでなんとしても避けたいところ。
一部にはGoogleさんがアーカイブと本来の記事を自動的に識別して適切にお取り計らいしてくれるので何も対策する必要がないという意見もあるが、警告が出る以上はいつ圏外に叩き落されるかわかったものではないので対策するのが無難。

WordPressの設定の「パーマリンク設定」で「数字ベース」(例: https://example.com/archives/123) にしていればカテゴリ・タグ・月別・作者別のURLはひと目でわかるものであるからrobots.txtにDisallowで登録してやれば良い。(2~5行目)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
User-agent: *
Disallow: /archives/author/
Disallow: /archives/category/
Disallow: /archives/date/
Disallow: /archives/tag/
Disallow: /feed/
Disallow: /wp-admin/
Disallow: /xmlrpc.php
Disallow: /*?

Sitemap: http://example.com/sitemap.xml

robots.txtで対応できないのは「パーマリンク設定」を「日付と投稿名」「月と投稿名」などにしている場合。
アーカイブ系のURLからはrobots.txt用のDisallowルールを作成することができない。(robots.txt内で正規表現が使えればよいのだがワイルドカードだけではちょっと無理。)

そこで、アーカイブ系のURLであるなら、HTMLヘッダ内でnoindexを表示するという方法を使う。このnoindexを使う方法の場合は「パーマリンク設定」はどれを指定してもよいので汎用性が高い。
で、WordPressでアーカイブのURL場合はHTMLヘッダ内にnoindexを使いたいと思ってググると「All in One SEO Pack」を使えみたいな記事を見かけるが、このプラグインは複雑すぎて困る。やりたいのことは凄く簡単なことのでプラグインは無しで。

使用しているテンプレートのテーマヘッダ(header.php)内で <?php wp_head(); ?> の行を探し、その直前あたりに次の3行を追加する。

1
2
3
<?php if (is_archive()) : ?>
    <meta name="robots" content="noindex" />
<?php endif; ?>

たった3行の追加で済むし特に処理が重くなるわけでもないのでこれで良いかと。

すでに重複コンテンツ数が増えているという警告を受けている状態なら対策後3~8週間くらいで重複URL数が激減と思われる。アーカイブによる重複コンテンツが0になるまではかなりの日数がかかるので覚悟のほどを。

ウェブマスターツールで日頃から異常が発生していないことを確認するのが良さそう。

関連記事: