サーチエンジンを運用していて非常に多い問い合わせは、「どうすれば検索結果に載るんですか?」というものだ。あるいは「ホームページを作ったんですが、検索結果に出てきません。どうしてですか?」というものだ。
サーチエンジンの仕組みを知らない一般の人に取っては当然の質問だ。これらの質問に答えるには仕組みを説明する必要がある。若干技術的な話になるがご了承頂きたい。
見かけ上のサーチエンジンは、「ユーザーがキーワードを入力して、それに対して10件のサーチ結果(URL)が出てくる」という表面上はシンプルなシステムだ。
簡単にその裏側を見てみると、大きく分けて3つの部分に分けることが出来る。それぞれの概念を簡単に説明する。細かい実装方法は色々と考えられるのでそれについては特に触れない。
- クローラー(フェッチャー、ロボットなどともいう)
ウェブページを収集する。最もシンプルな方法はシードとなるURLリストを作り、そのURLにプログラムがアクセスしHTMLを取得する。このプログラムは皆さんがお使いのブラウザと同様の動きをする。このプログラムのことをクローラーと呼ぶ。
例えばシードリストに100のURLがあれば(リスト1)、1回目のクロールで100ページのHTMLを取得する。この100ページのURLにアクセスしている時に、サーバーからエラーが返って来たり(代表的なエラーは404 Not Found)、他のページへリダイレクトされたりするが、普通はHTTPサーバーから返されるステータスをこれらの100URLに対してきちんと記録しておく。
正常にHTMLを取得できたURLが90だとすると、今度はこの90のHTMLに登場するリンク先のURL(<a href="url" >のurlの部分)を全て抽出し、抽出されたURLリストとリスト1を合わせてリスト2を作成する。普通1つのHTMLには20や30のリンク先が出てくるので、リスト2はリスト1よりも大きくなる。
仮に平均で1ページに30のリンク先が出て来るとすると、リスト2は
90 x 30 + 90 = 2,790
のURLからなるリストとなる。ここで2,790に重複が無いかどうかを調べ、重複していたら削除するという作業も行う。これをDuplicate Detectionと呼ぶ。仮に重複が5%あったとすると
2,790 x 95% = 2,650
のURLが残るがこれをリスト3とすると、次回の巡回にはこのリスト3を用いる。
以上の手順を延々と繰り返すとリストNに含まれるURLの数は膨大になる。もちろん説明のためにシードリストを100としたが、こんなに少ないシードで始めることはないカテゴリに登録されるようなメジャーサイトを数万から数十万をシードとして使うだろう。
また応用としてアンカーテキストとそのURLを使うとクローラーでページを取得しなくてもインデクスに入れることが出来るがそれについては後ほど説明しよう。実装は色々だが、概念的にはこれがクローラーの基本だ。
次回はインデクスについて説明しようと思う。
-inoue