検索エンジンはなぜ一瞬で見つけられるのか

概要 — まず全体をつかむ

初級では「前準備と本番」の2部構成で流れを追いました。ここでは各部品の実際の名前と作りを見ます。読み終わる頃には、「なぜ自分のページが検索に出ないのか」を技術的に切り分けられるようになっているはずです。

用語には「※1・※2…」と番号を付けて、各セクション末尾の「登場人物メモ」で説明します。

アニメーション『検索の前準備と本番』を開く
世界中のWebサイトクローラ索引(インデックス)あなた
  • 世界中のWebサイト何十億ページもある本棚。検索エンジンの外にある
  • クローラリンクをたどってページを読んで回る自動の巡回ロボット
  • 索引(インデックス)「この言葉はこのページにある」をまとめた巨大な逆引き帳
  • あなた検索窓に言葉を打つ人
「▶ 再生」で通しで見るか、「次へ」で1手ずつ進めてください。
0 / 7

詳細 — 1段階ずつ追う

① 巡回する

🎬 アニメーション『検索の前準備と本番』の ①〜② のところです!

クローラの実体は、超大規模なHTTPクライアントです:

  1. URLの一覧(フロンティア)から次の訪問先を取り出し、HTTPのGETでページを取得する——『パケットの旅』とまったく同じ手順を毎秒数百万回やっている
  2. 取得したHTMLからリンクを抽出して、一覧に追加する
  3. 訪問前にrobots.txt※1 を確認し、「入らないで」と書かれた場所は避ける
  4. サイト側はサイトマップ※2 で「ここにページがあります」と案内できる
  5. JSで中身を組み立てるページは、後段のレンダリング工程※3 の順番待ちになる

登場人物メモ(※の説明):

  • ※1 robots.txt — サイトの入り口に置く「クローラへのお願い」ファイル。強制力はない紳士協定
  • ※2 サイトマップ — サイト側が提出するページ一覧。リンクの少ない新ページを見つけてもらう近道
  • ※3 レンダリング工程 — クローラ側でJSを実行してページを完成させる処理。素のHTML取得より桁違いに高コストなので、別枠の順番待ちになる

⚠️ イレギュラー(クロールの落とし穴):

  • robots.txt を守りにしてしまう — 見られて困るページは認証で守る。robots.txt は「行儀のよい相手へのお願い」でしかない
  • 無限に生成されるURL — カレンダーの「次の月」リンク等でURLが無限に湧くと、クローラの持ち時間(クロールバジェット)を浪費して肝心のページが読まれない
この部分をもっと深く(上級

クローラの正体は超大規模なHTTPクライアントでした。上級では「どう賢く回り、どう索引へ落とすか」を見ます。

  • フロンティア ※1 — 未訪問URLの巨大な待ち行列。ただ古い順ではなく、更新頻度や重要度で優先度を付けて取り出す
  • 重複除去 — URLを正規化し、本文のハッシュで同一コンテンツを弾く。ミラーやパラメータ違いの重複に持ち時間を奪われないため
  • 差分クロール — 変わっていないページは再取得を控え、変化しやすいページを厚く回る
  • レンダリング待ち — JSで中身を組み立てるページは、ブラウザ 相当の実行工程が要る。素のHTML取得より桁違いに重いので別枠の順番待ちになる

集めた文書は、バッチと増分で索引に落とします。大量の文書からセグメント(部分索引)を作り、それらをマージして大きな索引へ育てる、という積み上げ方が定番です。

登場人物メモ(※の説明):

  • ※1 フロンティア — これから訪問するURLの管理キュー。優先度付けが「クロールバジェット」の使い方を決める
やさしく言うと(初級

🎬 アニメーション『検索の前準備と本番』の ①〜② のところです!

検索エンジンの裏では、クローラという自動プログラムが休みなく働いています。

  1. クローラがあるページを読む
  2. そのページに貼られているリンクを見つける
  3. リンクの先のページも読みに行く
  4. これを延々と繰り返して、Webじゅうを渡り歩く

Webのページ同士は「クモの巣(Web)」のようにリンクでつながっているので、たどり続ければ大部分に到達できます。クローラ(這い回るもの)という名前もここから来ています。

⚠️ イレギュラー(クローラが来ないとき):

  • どこからもリンクされていないページ — たどり着く道がないので、いつまでも見つからない
  • 「読まないで」と書いてあるページ — サイト側はクローラお断りの札(robots.txtって言います)を出せる。会員専用ページなどは検索に出ないようにできる

② 索引を作る

🎬 アニメーション『検索の前準備と本番』の のところです!

「逆引き帳」の正式名は転置インデックス※1 です。作る手順:

  1. ページ本文から単語を切り出す——日本語は空白で区切られていないので、形態素解析※2 で「カレー / の / 作り方」と分割する
  2. 表記を正規化する(大文字小文字・全角半角・「作り方/つくりかた」などの揺れの吸収)
  3. 単語 → その単語を含む文書IDの一覧」の向きで表に積む。位置情報も添える(後でフレーズ検索や近接度に使う)

向きがすべてです。「文書→単語」の順だと検索のたびに全文書をめくることになる。「単語→文書」に転置してあるから、何十億ページでも一撃で引けます。

登場人物メモ(※の説明):

  • ※1 転置インデックス — 本の巻末索引と同じ向きのデータ構造。検索エンジンの心臓部
  • ※2 形態素解析 — 文を最小の意味単位に切り分ける処理。日本語検索には必須の前処理

⚠️ イレギュラー(索引の宿命):

  • 索引は常に少し古い — ページを更新しても、再クロール・再索引までは古い内容で検索される
  • 切り出しの失敗 — 新語や固有名詞は辞書にないと変な位置で切られ、検索に引っかからないことがある
この部分をもっと深く(上級

中級で「単語→文書ID一覧」と紹介した索引を、もう一段開けます。単語ごとに紐づく文書の並びを ポスティングリスト ※1 と呼びます。

  • ポスティングの中身 — 文書IDだけでなく、出現回数(後の採点用)と出現位置(フレーズ検索用)を添える
  • 前処理の三点トークナイズ ※2(語に切る)→ 正規化(大文字小文字・全角半角・表記揺れを揃える)→ ステミング ※3(活用や語尾を語幹に寄せる)
  • 辞書と圧縮 — 語→ポスティングの先頭を引く辞書を別に持ち、文書IDは差分(ギャップ)符号化などで圧縮して巨大化を抑える

登場人物メモ(※の説明):

  • ※1 ポスティングリスト — ある単語を含む文書の並び。転置インデックスの本体
  • ※2 トークナイズ — 本文を索引の単位(トークン)に切り分ける処理。日本語では形態素解析がこれを担う
  • ※3 ステミング — 「走る/走った/走れば」を同じ語幹に寄せる正規化。英語の running→run のような揺れの吸収
やさしく言うと(初級

🎬 アニメーション『検索の前準備と本番』の のところです!

読んだページは、そのまま保管しても検索には使えません。逆引きの形に組み替えます。

  1. ページの文章を言葉に分解する
  2. この言葉は、このページ達に載っていた」という向きで帳面に書き込む
  3. これを全ページ分積み上げると、巨大な索引(インデックスって言います)ができる

本の巻末索引と同じ向きです。「カレー……342ページ、518ページ」と引けるから速い。もし逆に「ページごとに載っている言葉」の形で持っていたら、検索のたびに全ページをめくり直すことになります。

③ 索引を引いて、並べ替える

🎬 アニメーション『検索の前準備と本番』の ④〜⑦ のところです!

0.5秒の本番でやっているのは「絞り込み」と「採点」です:

  1. 検索語を同じ手順(形態素解析・正規化)で単語に分ける
  2. 各単語の文書一覧を索引から引き、共通部分に絞り込む
  3. 絞った候補を採点する。代表的な観点が2つ——関連度※1(その単語がその文書でどれだけ「効いて」いるか)と、PageRank※2(どれだけ信頼あるページからリンクされているか)
  4. 実際は数百の要素(新しさ、モバイル対応、検索者の言語・地域…)を合成した総合点で並べる

⚠️ イレギュラー(採点をめぐる攻防):

  • SEOスパム — 単語の詰め込み、リンクの売買など、採点の癖を突く手口。採点式の非公開・随時更新はこのいたちごっこの防御側
  • 順位は人によって違う — 言語・地域・履歴で採点が変わるので、「自分のPCでは1位」は他人の1位を意味しない

登場人物メモ(※の説明):

  • ※1 関連度(TF-IDFの発想) — 「その文書に多く登場し、かつ世間では珍しい単語」ほど効く、という重み付けの古典。現在は機械学習モデルに発展している
  • ※2 PageRank — リンクを「他者からの推薦」とみなす採点。詰め込みスパムへの対抗として検索の歴史を変えた発想
検索エンジンに「載せてもらう」側の視点 — SEOの正体

このユニットを裏返すと、SEO(検索エンジン最適化)の正攻法がそのまま出てきます: クローラが辿れるようにリンクとサイトマップを整える(①)/ 単語が正しく切り出せる自然な文章を書く(②)/ 検索者の意図に応えて他者からリンクされる内容にする(③)。「裏技」に見えるSEOの実体は、この3工程への適合です。採点の癖を突く裏技側はスパムとして対策され続けます。

まとめ——検索が一瞬なのは、巡回(HTTP)→ 切り出し(形態素解析)→ 転置(索引)→ 採点(関連度+リンク評価)という分業の賜物です。「検索に出ない」ときは、この順に「クロールされているか→索引に載ったか→採点で沈んでいるか」と切り分けていきます。

この部分をもっと深く(上級

絞り込んだ候補に順位を付ける採点を、古典から見ます。

  • TF-IDFの発想 — その文書に多く出る語(TF)ほど効き、世間では珍しい語(IDF)ほど効く、という重み付け。中級で触れた「関連度」の土台
  • BM25 — TF-IDFの弱点を補う定番。出現回数の効果を飽和させ(同じ語を1万回書いても青天井にはならない)、文書長で正規化する(長い文書がただ有利になるのを防ぐ)
  • 学習型ランキング — 現代の検索は、これら多数の特徴量を機械学習モデルで合成し、クリック傾向なども取り込んで並べる

素朴なTFの弱点(詰め込みが有利)を、BM25の飽和と正規化がどう塞ぐか——ここが古典的採点の要点です。

やさしく言うと(初級

🎬 アニメーション『検索の前準備と本番』の ④〜⑦ のところです!

ここからが、あなたが検索ボタンを押した後の0.5秒の中身です。

  1. 「カレー 作り方」を言葉に分ける
  2. 索引で「カレー」のページ一覧と「作り方」のページ一覧を引く
  3. 両方に載っているページに絞り込む
  4. 絞り込んだページを採点して並べ替える(ランキングって言います)— 言葉との関連の強さ、他の信頼できるページからのリンクの多さ、新しさ、などの合計点
  5. 上位から順に、結果一覧としてあなたに返す

⚠️ イレギュラー(検索の世界の攻防):

  • 順位を不正に上げようとするページ — 採点の癖を突いて上位を狙う手口(キーワードの詰め込み等)と、それを見破る採点の改良は、いたちごっこが続いている
  • 作りたてのページが出てこない — クローラがまだ来ていなければ索引に無い。「Webに公開した=検索に出る」ではない
検索結果に「一瞬で」出る広告はなに?

検索結果の上部に出る「スポンサー」枠は、この索引の仕組みとは別の仕組みです。検索された言葉に対して広告主がオークションで枠を買っていて、検索と同時に瞬時の入札が行われています。同じ0.5秒の中で、検索と広告オークションの両方が走っている——これも前準備(広告主の登録・入札設定)が済んでいるからできる芸当です。

まとめると、検索の速さの正体は「先回りの準備」です。あなたが打つかもしれない言葉のために、クローラは今日も巡回し、索引は今日も更新されています。次に0.5秒で結果が出たとき、その裏の何日分もの下ごしらえを思い出してみてください。

関連する知識

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. robots.txt(クローラお断りの札)の効力として正しいものはどれ?

2. PageRank(リンクによる順位付け)の基本的な発想はどれ?

3. 転置インデックスの構造として正しいものはどれ?

4. 日本語の検索で「形態素解析(分かち書き)」が必要になる理由はどれ?

5. JavaScriptで中身を組み立てるページが、検索結果に載りにくい(載るのが遅れる)ことがある理由はどれ?

6. 検索結果の採点で使う「関連度(TF-IDFの発想)」の考え方として正しいのはどれ?

7. クローラが次に訪問するURLの一覧(待ち行列)を何と呼ぶ?(カタカナ)

8. クローラが1つのサイトを回るのに使える持ち時間の予算を何と呼ぶ?(カタカナ)