検索エンジンのロボットによるクロールをブロックするrobots.txtについてGoogleのJohn Mueller氏がTwitterとGoogle BuzzでTIPSを公開しています。
Robots-tip: crawlers cache your robots.txt; update it at least a day before adding content that is disallowed. Q&A in Buzz.
If you add a new subdirectory on your site and simultaneously add a disallow for it in your robots.txt file, it’s possible that crawlers will not see the disallow before they crawl the new parts of your site. Adding a disallow a day or so in advance makes sure that crawlers know not to crawl there. You can also add it long in advance, that doesn’t bother crawlers.
Use simple obfuscation if you want to keep the new folder somewhat private (if you’re worried about people scraping your robots.txt for hints), eg if the new folder is called “/secretstuff/”, just disallow “/sec” (assuming you have no other URLs that start with “sec”). Don’t forget that the robots.txt is case-sensitive when you’re doing this.
Google generally caches the robots.txt for a day at most; you can check in your server logs to find out more for your particular site.
Also keep in mind that the robots.txt is for crawling directives, not indexing directives. If you are adding content that must not be indexed, you should make sure that it is appropriately blocked from indexing (eg with authentication or at least with a “noindex” robots meta tag).
以前にWeb担の連載でも書いたように、Googleは通常1日に1回robots.txtをダウンロードしてキャッシュしておきます。
サイトにアクセスするたびにチェックするわけではありません。
したがって、あるディレクトリやページをrobots.txtでブロックしたとしても最新の命令を見ずに禁止の記述がない古いrobots.txtを見て、ブロックしたはずのページにアクセスしてしまうかもしれません。
アクセスしてほしくないディレクトリを新たに作る場合は、1日くらい前もってrobots.txtでブロックしておいたほうが安全ということになります。
robots.txtは誰にでも見られてしまうので、秘密のディレクトリの名前を知られてしまう危険があります。
そんな時はブロックするディレクトリを部分一致で指定するといいそうです。
たとえば、www.suzukikenichi.com/secretstuff/ の中のファイルに検索エンジンをアクセスさせたくないときは、robots.txtに次のように記述します。
User-Agent: *
Disallow: /secretstuff/
でも悪意のあるユーザーや好奇心旺盛なユーザーには、「secretstuffをブロックするということは何か機密性の高い情報が入っているんだな」と勘ぐられてしまいセキュリティ上好ましくありません。
こんなときは、次のように記述できます。
User-Agent: *
Disallow: /sec
こうすると「sec」を含んだURLにロボットをアクセスさせない、つまりsecretstuffにはアクセスさせない状態を保ちつつ第三者のユーザーには、secretstuffというディレクトリの存在を知られずにすみます。
ただし、「sec」で始まるディレクトリ(やファイル)がほかにあった場合は、すべてアクセスをブロックしてしまう点には注意が必要です。
また、大文字・小文字は区別されます(SecやSECで始まるディテクトりはブロック対象にならない)。
robots.txtは検索エンジンのクロールを拒否する(=ページの中を読ませない)ものであって、検索結果への表示を禁止するものではありません。
noindex metaタグ
検索結果での非表示を実現する場合は、noindex metaタグを使います。
<meta name="robots" content="noindex" />
このタグをheadセクションに記述しておくと検索結果に表示されなくなります。
ここで注意です。
noindex metaタグを記述したページをrobots.txtでブロックしてはいけません。
robots.txtでアクセスを拒否されていては、検索結果の表示を禁止するために中に書かれているnoindex metaタグのを見ることができませんからね。
被リンクが多い場合などは、検索結果に出てしまうことがあります。
さらに細かいことを言うと、noindex metaタグを記述したページは検索結果には出なくなるだけでインデックスはされます。
ということは、noindexタグの付いたページはPageRankを渡します。
nofollow metaタグ
PageRankも渡したくないときは、nofollow metaタグを使います。
<meta name="robots" content="nofollow" />
nofollow metaタグはページ内すべてのリンクに適用されます。
個別個別のリンクに対してPageRankやアンカーテキストの受け渡しを防ぐのがnofollow属性ですね(正確にはリンク先ページをたどらない、かな)。
ちょうどいい機会なので検索エンジンの動きを制御するその他の robots meta タグについても触れておきます。
nosnippet metaタグ
nosnippet metaタグは、検索結果でのページの説明文であるスニペットの表示を禁止します。
次のように記述します。
<meta name="robots" content="nosnippet" />
この記述が書かれたページは検索結果ではサイトタイトルやURLだけになります。
noarchive metaタグ
noarchive metaタグは、検索結果でのキャッシュリンクを非表示にします。
次のように記述します。
<meta name="robots" content="noarchive" />
こうするとSERPにキャッシュリンクが出なくなります。
古い情報を見せたくないときやスクレイピングを防ぎたいときに使えますね。
noydir metaタグ
Yahoo!カテゴリに登録されているサイトがYahoo!の検索結果に出たときは、Yahoo!カテゴリに登録したサイトタイトルやサマリーが使われることがあります。
せっかくキャッチーなtitleタグを付けたのに、つまらないタイトルに変えられてしまったのではたまりません。
noydir metaタグを記述するとYahoo!カテゴリに記載されているデータがタイトルやサマリーに利用されるのを拒否できます。
次のように記述します。
<meta name="robots" content="noydir" />
なお、noydir metaタグはYahoo!だけが採用しているので(GoogleやBingはヤフカテの情報を使わない)、Yahoo!のロボットだけをname属性に明示的に指定しても構いません。
<meta name="Slurp" content="noydir" />
SlurpはYahoo!のウェブ検索用クローラの名前です。
robots metaタグ(とrobots.txt)ではクローラの名前を指定することで、特定の検索エンジンの動きだけを制御することもできます。
Googleのウェブ検索のクローラはGooglebot、Bingのウェブ検索のクローラはMSNBotです。
noodp metaタグ
DMOZ(ODP)に登録されているサイトは、GoogleやBingではSERPのタイトルやサマリーがDMOZの情報に置き換えられることがあります。
これを防いで、titleタグに記述したページタイトルやmeta descriptionで記述したサマリーを(なるべく)使ってほしいときはnoodp metaタグを追加します。
次のように記述します。
<meta name="robots" content="noodp" />
DMOZに登録されて、このタグを追加してみたいです。(笑)
複数のrobots metaタグを利用するときはカンマ区切りでめとめて1行で記述できます。
<meta name="robots" content="noindex,nofollow,noarchive,nosnippet,noydir,noodp" />
↑、こんなページは見たことないですけど。(笑)
noindex・nofollow・noarhive metaタグやnoyir・noodp metaタグについてはずっと以前にも書いたのですがあの頃と比べて新しいブログ読者さんも増えているので再度触れてみました。
いつでも取り出せるようにこのエントリをブックマークしておきましょう。w