サイト運営者がクローラーとインデクサを制御する指示を出すことで、検索結果に表示されたとしても検索者に対してそれほど価値を提供しないページやファイルについて、あらかじめ検索結果に表示されることがないようにしておくことができます。これは検索者の体験を阻害しないようにするとともに、検索エンジンから低評価を受けないようにするための対策です。

クローラーとインデクサを制御する理由

クローラーの制御とは、特定のURLをクローラーからブロックしたり、またはクロールはさせても検索結果に表示させないようにするなど、サイト内のコンテンツを検索エンジンがどのように取り扱うべきかの指示を明示的に行うことをいいます。

現在のクローラーは非常に高いクロール能力を持っており、検索対象としてインデックスするかどうかを別にすれば、公開されているほとんどすべてのURLをクロールすることができます。このことがSEOにとって不利に働くケースがあり、そのための対処としてクローラーの制御には重要な意味を持っています。

ほとんどのサイトには多かれ少なかれ、検索者に対して価値をそれほど提供しないページが存在します。こうしたページに対してクローラーの制御を行っていない場合、検索エンジンは「サイト内に内容の薄いページが存在する」または「コンテンツに重複がある」として、サイトの評価を低下させる可能性があります。

  • 完成前のスタブ(プレースホルダ)ページ
  • テンプレート部を除くと広告しかないページ
  • テンプレート部を除くと他サイトからの引用しかないページ
  • 市町村別などのページで内容が空かほとんどないページ

上記のようなページは、検索結果に表示されることはまずありませんし、仮に表示されたとしても検索者に価値を提供しません。さらに、その存在自体がサイトの評価を下げる原因にもなります。クローラーからブロックしておく必要のあるページです。

またブログなどのCMSを利用している場合に自動生成される次のようなページについては、サイト全体のクロールやリンクポピュラリティの再配分という意味では必要でも、そのページ自体が検索結果に表示される必要はないかもしれません。

  • 日付アーカイブページ
  • タギングによる分類をしている場合のタグページ

上記のようなページについては、クロールはさせるが検索対象には含めない、といった対処をすることによって、検索者の体験をよりよくすことができるかもしれません。また、重複コンテンツや内容の薄いページといったマイナス評価を少しでも減らすことにつながる可能性もあります。

制御する方法の種類と使い分け

クローラーとインデクサの制御に利用できる方法には次の3種類があり、それぞれ利用できる機能が異なるため、目的に合わせて使い分けるとよいでしょう。

robots.txt による制御
ディレクトリやファイル、またはファイルの種類などに対して、クロールそのものを拒否したい場合に使用します
meta要素Robots および X-Robots-Tag による制御
meta要素Robots および X-Robots-Tag による制御では、単なるクロールの拒否だけでなくより細かな指定が可能です。この特性から主に「クロールは許可するが検索結果には表示しない」という場合に使用します
Microformats による制御
Microformats(具体的には a要素 rel=”nofollow”)では、リンク先へのリンクポピュラリティ評価の受け渡しを個別のリンクごとに拒否することが可能です。主に「このリンク先にはリンクポピュラリティ評価を継承させない」または「リンク先は信頼できない」という場合に使用します

以下では、それぞれの詳しい使い方について説明していきます。

robots.txt による制御

主要検索エンジンのほとんどはロボット排除プロトコル(REP:Robots Exclusion Protocol)に対応しており、robots.txt によるクローラーの制御が可能です。robots.txt の主な役割は、クロールを拒否するディレクトリやファイルを指定し、検索エンジンに伝えることです。

サイトのルートディレクトリに「robots.txt」という名前のテキストファイルを設置し、クロールされたくないディレクトリやファイルを指定しておくことで、クローラーの巡回を制限することができます。Googleなど一部の検索エンジンでは、robots.txtで正規表現を使った細かな制御も可能です。

User-agent: *
Disallow: /cgi-bin/
User-Agent: Googlebot
Disallow: /tmp/
User-Agent: BaiduImagespider
Disallow: *.png$

上は、すべてのクローラーの cgi-bin ディレクトリに対するクロールを拒否し、加えて Googlebot には tmp ディレクトリに対する巡回を拒否し、BaiduImagespiderにはPNGファイルに対する巡回を拒否する場合の記述例です。

上記のように robots.txt における指定は、クローラーのユーザーエージェント名とそのクローラーに対する指示をセットにして記述します。より詳しくは、次のURLが参考になるでしょう。

なお、robots.txtでクロールを拒否しているページでも、他のページからのリンクを受けている場合には、URLが検索結果に表示されることがあります。こうしたことも防ぎたいのであれば、meta要素Robots および X-Robots-Tag を利用し、robots.txt を使用しない、という方法もあります。

しかしそもそも「存在が知られたくないファイルやディレクトリ」はウェブ上の公開エリアにアップロードすべきではありません。ここで話題にしているのはあくまでも「人が見るのは構わないがクローラーやインデクサの動作は制御したい」という場合の話であることに注意してください。

meta要素Robots および X-Robots-Tag による制御

先述の robots.txt による制御は基本的にはクローラーの拒否しかできないのに対して、meta要素Robots および X-Robots-Tag を使用した制御ではそれに加えて「クロールは許可するが検索結果には表示しない」という設定が可能になります。

これを利用することで、指定したページのリンクポピュラリティの評価はリンク先へと継承させながら、そのページそのものは検索結果に表示させない、という制御ができます。

ブログにおける日付アーカイブページやタグページなどのように、クロールしてリンクも辿ってもらいたいけれど検索結果に表示されてもあまり意味がないというようなURLについて、この meta要素Robots または X-Robots-Tag で制御するのがよいでしょう。

meta要素Robots と X-Robots-Tag はまったく同じ機能を提供しますが、それぞれ指定の方法が異なります。

meta要素Robots の指定
html文書の head要素内に meta要素として記述します
X-Robots-Tag の指定
.htaccess や httpd.conf でディレクティブを設定し、HTTPレスポンスヘッダの中にクローラーへの指示を含めます。HTMLだけでなくどんなファイルでも対象にすることができるため、PDFやSWF(Flashファイル)、PPT(パワーポイント)のようなリンク情報を含むファイルタイプで利用することができます

meta要素Robots の指定

最終的な出力が(X)HTML文書となるURLであれば、それが静的なものであれ動的なものであれ、meta要素Robotsによる指定が適しています。これは head要素内に meta要素を追加するだけのことですから非常に簡単です。具体的には次のように記述します。

<meta name="robots" content="noindex,follow" />

上記は「検索結果には表示させず、リンクは辿らせる」という意味の指定です。この他の指定できる項目については後述します。

X-Robots-Tag の指定

X-Robots-Tag はサーバ側の設定でHTTPレスポンスヘッダの中にクローラーやインデクサへの指示を含める方法で、最終的な出力が(X)HTML文書でない各種のファイル形式において有用です。これは.htaccess や httpd.conf でディレクティブを設定して指定します。

<FilesMatch "\.(swf|pdf|ppt|doc)$">
Header set X-Robots-Tag "index,nofollow"
</FilesMatch>

上記は Flashファイル、PDFファイル、PPTファイル、DOCファイルについて「検索結果には表示させるが、リンクは辿らせない」という指定の例です。

この nofollow の指定はリンク先に評価を継承しないことを指示するものですので、スパムサイトなどについてリンク付きで言及するファイル(HTMLではないファイル)をWeb上で公開するときに、このような指定が有用であるかもしれません。

上記のような X-Robots-Tag が指定されたファイルにアクセスするとき、ロボットを含むユーザーエージェントに対してサーバから返されるHTTPレスポンスヘッダには、指定された内容に沿って次のような行が追加されます。

X-Robots-Tag: noindex,nofollow

HTTPレスポンスヘッダの内容は、このサイトで公開しているHTTPレスポンスヘッダ情報解析ツールで確認することができます。サンプルとして X-Robots-Tag を指定した空のテキストファイルを置いてみました。これについて下の「解析」ボタンを押して確認してみてください(結果は別ウインドウで開きます)。

このテストで使用したのは単なる空のテキストファイルですが、サーバ上でやりとりする際にはクローラーとインデクサを制御するための情報がレスポンスヘッダに追加されています。ヘッダ情報の最後に次のような行が追加されていることが確認できたはずです。

X-Robots-Tag: noindex,nofollow,noarchive,nosnippet

これは、このファイルのインデックスを許可せず、リンクを辿ることを許可せず、キャッシュすることを許可せず、スニペットを表示することを許可しない、という指示です。このように、ディレクティブには複数の種類があり、それらは組み合わせて使うこともできます。

meta要素Robots および X-Robots-Tag で利用できるディレクティブ

利用できるディレクティブの種類や意味は、meta要素Robots および X-Robots-Tag で共通です。主なものを以下に示します。

noindex
検索結果に表示させない
nofollow
リンクを辿らせない
noarchive
検索結果にキャッシュページへのリンクを表示させない
nosnippet
検索結果に説明文を表示させない
noodp
検査結果のタイトルや説明文にODPの情報を使用させない
noydir
検査結果のタイトルや説明文にYahoo!の情報を使用させない

meta要素Robots および X-Robots-Tag についての検索エンジンの公式の説明は次のURLにあります。

Microformats による制御

HTML文書からa要素と href属性を使ってリンクする際に、a要素に rel属性を利用した rel=”nofollow” という Microformats を加えることで、リンク先にリンクポピュラリティの評価(リンクジュース)を継承しないように指示することができます。このMicroformats が意味するところは次のようなものです。

  • リンク先にリンクポピュラリティの評価を継承しない
  • リンク先のウェブページのクロールおよびインデックスを推奨しない
  • リンク先は信頼できるページではない

自分のサイトからスパムサイトに言及する際や、トラックバックスパム、コメントスパムを防ぎたい場合に使用します。記述は次のようになります。

<a href="http://www.example.com/" rel="nofollow">スパムサイト</a>

あくまでもこれはリンク元からリンク先へとリンクポピュラリティの評価が継承されることを防ぐ、またはリンク元とリンク先の関係を否定するものであって、リンク先のクロールやインデックスに影響を与えるものではありません。

このため、リンク先のページやファイルも自分が管理しているものであり、それらのクロールやインデックスを制御したいのであれば、ここまでの説明してきた別の方法(robots.txt や meta要素Robots、X-Robots-Tag)で制御する必要があります。

また、以前はこれを自分が管理するサイト内におけるリンクポピュラリティの再配分を操作する意図で使用すること(PageRank Sculpting と呼ばれていました)が一部で見られましたが、これは現在では意味がありません(おそらくもともと意味がなかったはず)。

この記事のまとめ

クローラーやインデクサを制御する方法にはいくつかの種類があり、それぞれ利用できる機能に違いがあるため、目的に応じて使い分けることができます。その使い分けは次のようなものです。

robots.txt
ディレクトリやファイルのクロールおよびインデックスを拒否する場合に使用する(SEO観点からは多用しないことが望まれる)
meta要素Robots
HTMLで出力されるページで、そのページは検索結果に表示させずに、リンクの評価は継承させる場合に使用する
例: <meta name=”robots” content=”noindex,follow” />
X-Robots-Tag
HTML以外の形式でリンク情報を含むファイルについて、そのファイルは検索結果に表示させずに、リンクの評価は継承させる場合に使用する(例1)。または、そのファイルは検索結果に表示させるが、そのファイルからのリンクの評価は継承させない場合に使用する(例2)。
例1: X-Robots-Tag: noindex,follow
例2: X-Robots-Tag: index,nofollow
Microformats rel=”nofollow”
ページ内の指定のリンクについて、リンクポピュラリティの評価をリンク先に継承させない場合に使用する
例: <a href=”http://www.example.com/” rel=”nofollow”>スパム</a>