SEM Vol.13|Webマスター向けTips | Discover Bing

Web マスター向け Tips

Vol.13 ボットが「ロスト イン スペース(迷子)」にならないために

私たちは、Bingのウェブクローラー(別名ロボットあるいはボット)である MSNBotのクロール率のコントロール について、このSEM 101ではないブログに記しました。それがきっかけで、ロボットについて考えてみました。当然、「 Lost in Space(宇宙家族ロビンソン)」の The Robotへと思いは至ります。長男の Will Robinson は番組に出てくるマセた青年。不細工な電子機器(番組の舞台は1997年のはず!)を持った1960年代風のイカすやつで、The Robotとベストフレンドです。彼らはお互いに必要としあっていて、いざというときに助け合います。

ある意味、検索エンジンのボットとウェブマスターは似たような関係にあると言えるでしょう。お互いに必要な存在なのです。ウェブマスターは、検索エンジンのボットにサイト内のページをクロールしてもらい、インデックスに加えてもらえるようにする必要があります。ボットは、ウェブマスターに魅力的なコンテンツや良く練られたコード、検索エンジンの結果ページ(SERP)の検索者に役立つ、信頼できる被リンクを提供してもらう必要があります。この「相互扶助と共生」の関係は、お互いにとってメリットがあるのです。ウェブマスターは、クオリティの高いコンテンツを検索エンジンのインデックスに入れることでメリットを得て、検索エンジンは、門外漢には理解できなくても、検索者にとって有益で適切な検索結果を提供することでメリットを得ます。

The Robotのキャラクターは、実際、分析力に長けていて、危険が潜むときにロビンソン家に警告します(個人的には、密航者ドクタースミスの陰謀の危険性になぜ気付かなかったのか、謎ですが・・・)。しかし、最も重要なことは、若いウィル ロビンソンのThe Robotとのコミュニケーション能力です。ウィルは、The Robotの強力な知能を注意が必要なこと(平均的でありふれた、表情のないゴム製マスクをした人間のように見える宇宙人の敵)へ向けさせ、The Robotの助けで無秩序の世界を生き延びました。

ウェブマスターとして、あなたもロボット(様々な検索エンジン)とコミュニケーションできます。特定のディレクトリやファイルがインデックスされないようにしたり、これらファイルのサブセット(一部)のために一般的なインデックスブロックを上書きしたり、ページ上のリンクを辿ることを防止したり、多種多様なことができます。それでは、フレンドリーな検索エンジンとどのように会話をして、コンテンツのインデックス化やリンクの辿り方など、あなたのウェブサイトに対する動きをナビゲートできるかを見ていきましょう。この努力によって、あなたのサイトが無秩序なウェブの世界で生き延びられるかも知れません。

ウィル ロビンソンはThe Robotと英語を喋ることで会話しましたが、あなたは検索エンジンのボットと ロボット排除プロトコル(REP) を使ってコミュニケーションする必要があります。(目的に応じて)以下の3つの方法があります。

  • robots.txtという名称の個別のファイルで(ウェブサイトのルートディレクトに保存)
  • 各ページの HTMLコード内の<meta>タグ内か、タグ属性の<a>として
  • ウェブサーバーのHTTPヘッダ内

完ぺきなたとえではないかもしれませんが、何をするかをどう伝えるか定義し、ロボットへのメッセージの範囲を考えます。全コンテンツに適用される、サイト全体の指示についてはHTTP Headerの命令を使うこともできます。サイト全体あるいは個々のファイルに適用する命令を柔軟に管理するときは、robots.txtファイルを使うでしょう。ページあるいはリンク特有の命令は、ページのHTMLコード内で処理されることが多いのです。

1. robots.txtファイル

robots.txtファイルは一般に、ウェブマスターが検索のインデックスに加えて欲しくないデータを含むディレクトリやファイルを、ボット(ファイルのコンテンツ内でユーザーエージェントと認識)がインデックス化するのを防ぐために使われます。たとえば、スクリプト、データベース、その他の公開を意図していない、あるいは検索者にとって価値のない情報です。robots.txtファイルには、以下のような命令が含まれていることが一般的です。

User-agent: *
Disallow: /private/

上記サンプルのrobots.txtファイルのコードは、すべてのユーザーエージェント(あなたや私にとってはボット)に適用され、ウェブサーバー上の/privateと名付けられたディレクトリ内のすべてのファイルを、ボットのインデックス化からブロックします。

robots.txtファイルにできることはそれだけではありません。/privateの中に存在する膨大なファイルの一部をクローラーにインデックスしてもらいたいとしたら? 一部のコンテンツを新しいディレクトリに移動して(内部のリンクを壊す可能性があったとしても)、サイトを再設計する代わりに、Allow命令を使います。Allowは非標準のREP命令ですが、Bingをはじめ多くの主要検索エンジンが対応しています。ここで注意していただきたいのがリストの順番です。できるだけ多くの検索エンジンとの互換性を確保するため、一般に同じディレクトリのDisallowの前にすべてのAllowをリストしなければなりません。そのような命令のペアは以下のようなものです。

Allow: /private/public.doc
Disallow: /private/

注記: 論理的な混乱があって、AllowとDisallowの両者の命令がrobots.txtファイル内のURLに適用されている場合、Allowが優先されます。

ワイルドカード

ワイルドカードの使用は、robots.txtでサポートされています。"*" の文字を用い、セッションIDや外部パラメータを示すURLの後ろ等に付けます。以下は、それぞれの例です。

Disallow: */tags/
Disallow: *private.aspx
Disallow: /*?sessionid

上の1行目の例は、"tags" という名を含むディレクトリのあらゆるURLを、ボットのインデックス化からブロックします。たとえば、
"/best_Sellers/tags/computer/"、"/newYearSpecial/tags/gift/shoes/"、
"/archive/2008/sales/tags/knife/spoon/" などです。2行目は、ディレクトリの名称にかかわらず、"private.aspx" で終わるすべてのURLのインデックス化をブロックします(その前のスラッシュは余分なので含まないことに注意)。最後の行は、URLのどこかに "?sessionid" のあるURLのインデックス化をブロックします。たとえば、"/cart.aspx?sessionid=342bca31?" などです。

備考

  • サンプルの最後の命令は、URLパラメータのみの文字列を名称とするファイルやディレクトリを、インデックス化からブロックすることを意図していませんので、サンプルの文字列に "?" を加えることで要求通り機能するようにしました。しかしながら、パラメータ "sessionid" は常にURLの最初にあるわけではないので、文字列を "*?*sessionid" に変えて、意図するURLを確実にブロックします。バリューではなく、パラメータ名のみをブロックしたい場合は "*?*sessionid=" の文字列を使います。ストリング例から "?" を削除すると、この命令は文字列と一致する名称を含むURLのファイルやディレクトリをブロックします。ご覧のとおり手の込んだやり方ですが、非常に有効です。
  • 末尾の "*" は、MSNBotにとって既存の動作と重なりますので、常に余計です。Disallowing "/private*" は disallowing "/private" と同じことですので、このようなケースにワイルドカードをわざわざ加える必要はありません。

"$" ワイルドカードの文字を使うと、ファイルの拡張子でフィルタができます。

Disallow: /*.docx$

注意: 上の命令では、".docx" の拡張子がついたファイルを含むURLがクロールされることを防ぎます。たとえば、サンプル文字列の "/sample/hello.docx" を含むURLなどです。それに対しDisallow: /*.docx の命令だと、拡張子以外の文字列にも適用されますので、より多くのURLをブロックすることになります。

Sitemaps

あなたのサイトで、XMLベースの Sitemapファイルを作成した場合(最近 Sitemapでウェブの宝物を発掘 のブログで説明しました)、robots.txtファイルの末尾でSitemapファイルの場所の情報を加えることができます。Sitemapリファレンスの構文は以下のとおりです。

Sitemap: http://www.your-url.com/sitemap.xml

その他の課題

robots.txtファイルにcrawl-delayの命令を加えることで、Bingがあなたのサイトをクロールするデフォルトのスピードを変えることもできます。 Crawl delay and the Bing crawler, MSNBotのブログをご覧になり、電子の削減の一翼を担い無駄を回避しましょう。

robots.txtとのやりとりに関係なく、ファイルを頻繁に書き換えてはいけません。このブログで、サイトを適切にクロールしてもらえないウェブマスターに関する 話題 がありました。自動生成されたrobots.txt ファイルを違う設定で入れ替えたことで、誤ったクロールに導いていたのです。これは、有用な戦略とは言えません。

ファイルフォーマット

ボットに読んでもらうために、robots.txt ファイルはASCIIやUTF-8といった標準のテキストフォーマットで保存されなければなりません。適切なファイルフォーマットが用いられているかどうかを検証する簡単な方法は、Microsoft Notepadでファイルを編集することです。Notepadのデフォルトのファイルフォーマット、ANSI エンコーディングの Text Documents (*.txt) で保存してください。

検証

robots.txtファイルができたら、それで終わりだと思わず、一度、検証することをおすすめします。 Bing Webmaster Center のメンバーであれば、ログインして、 オンラインの Robot.txt 検証ツール にアクセスしてください。他にも robots.txt をオンライン上で検証するツール がたくさんあります。私たちは皆、The Robotが「警告! 警告! 矛盾している!」と叫ぶのを避けたいのです。

メンテナンス

適切なrobots.txtファイルを作り、検証が済んだから、設定をして、おしまい、というわけではありません。その後も定期的にファイルの設定を監査しなければなりません。特に、サイトの再設計の後には必要です。あなたがブロックした命令が依然有効であり、ボットが意図していないコンテンツを有効化したり、機密文書を露出させていないか確認する必要があります。

2. HTMLコードでの命令

REPの命令を、HTMLコードに直接記すこともできます。数週間前、 <head>タグを最適化し タグの使い方について説明したことを覚えていますか? そこでこれらのREP命令のほとんどがうまくいきます。どう機能するのかを見てみましょう。ボットに対応するサンプルの<meta>タグです。

<meta name="robots" content="noindex, nofollow">

ここに挙げた2つ以外にもたくさんのオプションがあります。コンテンツ属性のREPの値は、皆さんが望むように動作するような機能を集めて組み合わせるように設計されています。

Metaタグ

<meta>タグの name="robots" 属性は、ボットがHTMLページにアクセスすると読まれます。コンテンツ属性にリストされている命令は、ボットに何をするか(あるいは、何をしないか)を伝えます。コンテンツ属性の値に、それぞれの機能を定義してみましょう。

Value Function
noindex ボットがページのコンテンツをインデックスするのを防ぎます。代わりに、ページ上のリンクがフォローされます。これは、ページのコンテンツが検索者に見られることを意図していない場合に有効です。
nofollow ボットがページ上のリンクを辿ることを防ぎますが、ページはインデックスされます。これは、ページ上で作成したリンクがウェブマスターのコントロールにない場合、たとえばブログやユーザーフォーラムなどに有効です。スパムやマルウェアへのリンクは、用心深いウェブマスターが顧客に提供したいサービスではありませんよね!
nosnippet ボットに、SERPのページのスニペットを表示しないように指示します。スニペットはページタイトルとサイトへのリンクの間に現れるページのテキスト表示です。
noarchive SERPのページでキャッシュリンクを表示しないようにボットに指示します。
nocache 上記のnoarchiveと同じです。
noodp SERPのページに、Open Directoryプロジェクト(ODP)からのタイトルとスニペットを使わないようにボットに指示します。

ページ内のHTMLベースのボットブロック命令は、同ファイルに対し、robots.txtから適用されているAllow命令を無効にします。

リンク

ページのリンクのほとんど全部を辿ってもらいたいが、理由があって、ボットがいくつかのリンクを辿ることをブロックしてもらいたいときにはどうすればよいか? 解決策があります。それは、rel="nofollow" です。それがどう機能するかをみるためには、以下のサンプルのanchorタグを見てください。

<a rel="nofollow" href="http://www.untrustedsite.com/forum/stuff.aspx?var=1">Read these forum comments</a>

警告

REP対応のボットは、rel="nofollow" の属性があるとページの特定のリンクをフォローしません。しかしそのブロックされたページを、サイトの他のページ(あるいは外部サイトのリンク)が参照していて、それをブロックする REP 命令がない場合、そのページはクロールされ、インデックスされる可能性があります。この警告は、REPリンクをブロックするすべての命令は、特定のページに一貫して適用されるわけはないということです。ブロックされるべきサイトのページに外部サイトからリンクされていて、ローカルウェブマスターがコントロールできないとき、これらのページはクロールされ、インデックスされる可能性があります。この場合、そのページの<meta>タグのnoindexがベストな選択となります。

前のブログの最後で詳しく説明しています。電子の節減のために Making links work for you を参照することをおすすめします。ロボットはそれに感謝します。

HTTPヘッダの命令

HTMLページでは<meta>タグでREP命令を使うことができる一方、一部のコンテンツ、たとえばPDFファイルやMicrosoft Officeドキュメントは、これらのタグを加えることが許されていません。

その代わりに、ウェブサーバーに設定されたHTTPヘッダをX-Robots-Tagで修正して、あなたのサイト全体で適用されるREP命令を実行することができます。以下は、コンテンツのインデックスや、リンクのフォローの両方を防ぐために使うX-Robots-Tagの例です。

x-robots-tag: noindex, nofollow

X-Robots-Tagで使用可能な命令は、<meta>タグで使うために先に定義したものと同じです。HTTPヘッダのカスタマイズ方法については、ウェブサーバーのドキュメントを調べる必要があります。

REP命令の優先権

しかし、robots.txtでブロックされていなくても、>meta>タグのREP命令、あるいはHTTP Headerの X-Robots-Tagでブロックされたウェブページを取り込んだ場合、ボットはブロックされているというREP命令を見ることができますので、何もインデックスされませんし、どのリンクもフォローされません。

つまり、robots.txtのDisallow命令は、<meta>タグやX-Robots-Tag命令よりも先行するということです。これは、robots.txtによってブロックされたページはボットにアクセスされないため、当該ページ内あるいはHTTP Headerの命令が読まれることはないことを意味します。またこれは、すべての主要検索エンジンで言えることです。

REPの詳しい情報は Robots Exclusion Protocol: joining together to provide better documentationのブログ記事をご覧ください。

REP命令を賢く使えば、SERPにおけるあなたのウェブサイトの位置付けが確立されます。検索エンジンボットに見て欲しいコンテンツを指示すると共に、検索者にとって有益でなかったり(ショッピングカートやログオンのページ等)、ビジネス上の機密情報(スクリプト内の内部のITインフラに関すること等)が含まれそうな、インデックスして欲しくないコンテンツをブロックすることができます。トラフィックを指示する努力をすることで、ボットが迷子になることも防止します。インデックス化が意図されていないコンテンツにアクセスできたとき、検索エンジンボットがヴァーチャルな武器を振りかざし、「危ない、ウィル ロビンソン!」と叫ばないのはちょっと残念ですけど・・・。しかし、それをするのは、あなたであり、ボットではないのです。

それではまた・・・。

-- Rick DeJarnette, Bing Webmaster Center