robots.txt・noindex・canonicalの使い分け
3つの道具は、それぞれ役割がまったく違います。選び間違えると、消したいページが残り続けるか、Googleが指示を読むことすらありません。
クロールを制御したいならrobots.txt、検索結果に出したくないならnoindex、重複ページの中から1つのURLを選ぶならrel=canonicalを使います。3つは別々の問題を解決するもので、互いに邪魔もします。robots.txtでブロックしたページでもインデックスに登録されることがあり、クロールできないページのnoindexをGoogleが目にすることはありません。
robots.txt、noindex、canonicalの違いは何か
それぞれが働く段階が違います。robots.txtは、クローラがURLを取得してよいかを決めます。noindexは、取得したページを検索結果に表示してよいかを決めます。canonicalは、ほぼ同じ内容の複数ページのうちどれをグループの代表にするかをGoogleに伝えます。Googleのドキュメントの記述を並べると次のとおりです。
| robots.txtのDisallow | noindex | rel=canonical | |
|---|---|---|---|
| 制御するもの | クロール | インデックス登録 | どの重複ページをグループの代表にするか |
| 書く場所 | サイトのルートにあるrobots.txtファイル | robotsメタタグ、またはX-Robots-Tag HTTPヘッダー | head内のlink要素、またはLink HTTPヘッダー |
| URLをGoogleから除外できるか | できない。他サイトからリンクされていれば、ブロックしたURLもインデックスに登録されることがある | できる。Googlebotがページをクロールしてルールを読んだ時点で | できない。重複ページは統合されるだけで、削除はされない |
| ページのクロールが必要か | 不要 | 必要 | 必要 |
| 拘束力 | 従うかどうかはクローラ次第 | Googleはページを検索結果から完全に除外する | ルールではなくヒント |
robots.txtはどんなときに使うのか
問題がクロールのトラフィックにあるときです。Googleのrobots.txtの概要には、このファイルは主にサイトへのリクエストの過負荷を避けるために使うと書かれています。ウェブページについては、Googleのクローラからのリクエストでサーバーが追いつかない場合と、重要でないページや似たページのクロールを避けたい場合の2つが用途です。画像、動画、音声ファイルをGoogle検索に表示させないための方法としても記載されています。
一方でGoogleは、robots.txtはウェブページをGoogleに表示させないための仕組みではない、とはっきり書いています。ブロックしたページでも、他のサイトからリンクされていればインデックスに登録されることがあります。そのリンクのURLやアンカーテキストが、説明文のない状態で検索結果に出ることもあります。しかもルールは任意で、Googlebotは従いますが、他のクローラが従うとは限りません。ファイルが実際に何を許可しているかは、当サイトのrobots.txtテスターで確認できます。
noindexはどんなときに使うのか
ページをGoogle検索に表示させてはいけないときです。headに<meta name="robots" content="noindex">を入れるか、PDFなどのファイルではレスポンスヘッダーとしてX-Robots-Tag: noindexを返します。Googleのnoindexのドキュメントによると、Googlebotがページをクロールしてルールを読み取ると、他のサイトからリンクされているかどうかに関係なく、Googleはそのページを検索結果から完全に除外します。
落とし穴はこの最初の段階にあります。メタタグやHTTPヘッダーを見るには、Googleがページをクロールしなければなりません。noindexを追加してもページが表示され続ける場合、ドキュメントは2つの原因を挙げています。Googleがまだ再クロールしていないか、robots.txtがブロックしているかです。Search ConsoleのURL検査ツールから再クロールをリクエストできます。また、一部の他の検索エンジンはnoindexを異なる方法で解釈する可能性がある、とGoogleは注記しています。
canonicalタグを選ぶべきなのはどんなときか
同じコンテンツが複数のURLにあり、そのうち1つに評価を集めたいときです。Googleの重複URLの統合に関するページは、理由として次を挙げています。検索結果に表示するURLを指定する、リンクなどのシグナルを優先URLに統合する、コンテンツの指標を追跡しやすくする、重複ページのクロールに時間を使わない、の4つです。
canonicalは何も隠しません。Googleの正規化に関するページはこれをルールではなくヒントと呼び、正規ページは最も定期的にクロールされ、重複ページのクロール頻度は下がると説明しています。検索結果は通常、正規ページを指しますが、重複ページのほうが検索ユーザーに適している場合は例外です。リダイレクトとrel=canonicalはどちらも強いシグナルで、サイトマップへの掲載は弱いシグナルです。HTML以外のファイルでは、canonicalをLink HTTPヘッダーで返します。これらのシグナルが食い違うと何が起きるかは、canonicalタグの衝突のガイドで解説しています。
robots.txtとnoindexは併用できるのか
削除が目的なら、同じURLでは併用できません。Googleは明確に、ページがrobots.txtでブロックされていると、クローラはnoindexルールを見ることがなく、ページは検索結果に表示され続ける可能性があると書いています。インデックスから消えないURLの対処法は、Disallowを外し、Googleにクロールさせ、noindexを効かせることです。
Googleの重複URLのページは、さらに3つの避けるべき使い方を挙げています。
- 正規化の目的でrobots.txtを使わない。
- 1つのサイト内で正規ページの選択を操作するためにnoindexを使わない。ページが検索から完全にブロックされるためです。
- 正規化にURL削除ツールを使わない。URLのすべてのバージョンが検索から非表示になるためです。
結局どれを使えばよいのか
知っている道具からではなく、望む結果から考えます。
- サーバーに負荷がかかっている、または重要でないページのクロールに時間が使われている:robots.txt。
- ページをGoogleに表示させてはいけない:noindex。クロールは許可したままにします。非公開にすべき内容なら、Googleがもう1つの方法として挙げているパスワード保護を使います。
- 同じコンテンツが複数のURLにある:各重複ページにrel=canonical。重複ページ自体が不要ならリダイレクト。
- 画像、動画、音声をGoogle検索に出したくない:robots.txt。
AIクローラが気になる場合は、AIクローラ向けrobots.txtのガイドに、ボットごとにそのまま使えるルールをまとめています。