canonicalタグ・robots.txt・noindexは、似ているように見えて、それぞれ別の問題を解決するための仕組みです。robots.txtは「クローラがアクセスすること」を、noindexは「検索結果に表示すること」を、canonicalは「重複ページの中で正規URLを指定すること」を制御します。3つを混同すると、思った効果が出ないどころか、効かなくなることもあります(特に、noindexしたいページをrobots.txtで除外すると、noindexが届きません)。だから、何を目的にしているかで、3つを使い分けます。
canonicalタグ・robots.txt・noindexはそれぞれ別の役割を持つ
3つはどれも検索エンジンに対する指示ですが、何を制御するかが違います。
robots.txtは、検索エンジンのクローラ(サイトを巡回するボット)に対して、「このページ/ディレクトリにはアクセスしないでください」と伝えるためのファイルです。サイトのルート(example.com/robots.txt)に置きます。robots.txtで除外したURLには、クローラがアクセスしなくなります。
noindexは、ページ自体のHTML内(<head>の中)に記述するmetaタグ、またはHTTPヘッダーで指定するもので、「このページは検索結果に表示しないでください」と伝えます。クローラはこのページにアクセスしてnoindex指定を読み取り、検索インデックスから除外します。
canonical(rel=”canonical”)は、内容が同じまたは類似しているページが複数あるときに、「これらの中で、こちらが正規のURLです」と検索エンジンに伝えるためのタグです。ページのHTML内(<head>)に記述します。canonicalで指定された正規URLが検索結果に表示され、非正規側のページの評価は正規URLに集約される、というのが基本の動きです。
実務上は、3つの「制御している対象」が違うことを最初に押さえておくと、混乱しません。robots.txtはアクセス、noindexはインデックス、canonicalは正規URLの指定です。
目的に応じて、canonicalタグ・robots.txt・noindexを使い分ける
3つの中からどれを使うかは、目的で決まります。
クローラのアクセス自体を防ぎたいとき → robots.txt。例えば、管理画面のディレクトリ、検索結果ページのように無限にURLが生成されるもの、サーバー負荷の高い動的ページなど、クローラに巡回されること自体を避けたい場合に使います。サイト全体のクロール効率を上げる目的でも使われます。
検索結果に出したくないが、ページ自体は残したいとき → noindex。例えば、フォーム送信後のサンクスページ、社内向けの一覧ページ、テスト用ページ、内容が薄くて検索結果に出すには不向きなページなど、利用者がアクセスする経路はあっても、検索からの流入は望まないページに使います。
重複・類似ページがあるが、評価を1つに集約したいとき → canonical。例えば、URLパラメータ違いで内容が同じページ(並べ替えやフィルタによる派生URL)、印刷用ページ、ECサイトの色違い・サイズ違いで本質的に同じ商品のページなど、複数のURLで同じ内容を提供する状況で使います。canonicalで正規URLを指定することで、検索エンジンの評価がそのURLに集まります。
実務上は、ページごとに「このページを、検索エンジンにどう扱ってほしいのか」を一つひとつ決めてから、適切なツールを選びます。なんとなく「除外しておきたい」で全部robots.txtに突っ込む、というやり方は、後で問題を起こします。
3つを混同して使うと、思った効果が出ない
3つを混同して使うと、意図した効果が出ないどころか、逆に問題が起こることがあります。
最も多い間違いが、noindexしたいページをrobots.txtで除外すること。これをやると、クローラがそのページにアクセスできないので、noindex指定そのものが読み取られず、結果としてnoindexが効きません。さらに、外部から該当URLへのリンクがあると、ページの中身が読まれないまま、URLだけが検索結果に出てしまうことがあります。「インデックスから外したい」が目的なら、まずクローラがアクセスできる状態でnoindexを設置するのが正しい順序です。
もう1つの誤解は、robots.txtで除外すれば検索結果に絶対出ないと思うこと。実際には、外部リンクをたどってGoogleが該当URLの存在を知ると、中身を読まないままインデックスに登録することがあります(タイトル無しで、URLだけが検索結果に表示される状態)。完全にインデックスから外したいなら、noindexのほうが確実です。
canonicalにも、よくある誤解があります。canonicalで指定すれば必ずGoogleが従うわけではなく、canonicalはあくまで「ヒント(強い推奨)」です。Googleが「指定された正規URLよりも別のURLのほうが正規にふさわしい」と判断すれば、canonical指定が無視されることもあります。canonicalを設定したのに非正規側がインデックスされている場合は、内容が本当に重複しているか、両者で差がないかを確認する必要があります。
実務上は、3つを使う前に「何を制御したいのか」を明確にして、その目的に合った1つを選ぶこと。複数を組み合わせるなら、それぞれが他と矛盾しない順序で設置することが大事です。
まとめ
canonicalタグ・robots.txt・noindexは、それぞれ別の問題を解決するための仕組みです。
- robots.txt:クローラのアクセス自体を制御する(管理画面・無限生成URL等)
- noindex:検索結果に表示することを制御する(サンクスページ・内部用ページ等)
- canonical:重複・類似ページの中で正規URLを指定する(パラメータ違い・印刷用ページ等)
混同しやすい注意点は——
- noindexしたいページをrobots.txtで除外すると、noindexが効かない
- robots.txtで除外しても、外部リンクからURLだけインデックスされることがある
- canonicalはGoogleへのヒント。必ず従われるとは限らない
3つを使い分ける前に、「このページを検索エンジンにどう扱ってほしいのか」を一つひとつ決める——ここから始めると、間違いません。