クロールバジェット最適化:ボットの訪問を最大限に活かす
検索エンジンボットは無制限の時間やリソースを持っていません。すべてのサイトは有限のクロール注目を受け、その注目がどのように使われるかが、どのページが発見され、インデックスされ、最新に保たれるかを決定します。この有限な割り当てをクロールバジェットと呼びます。数百ページの小規模サイトではボトルネックになることはめったにありません。しかし、ECストア、ニュースパブリッシャー、ユーザー生成コンテンツを持つSaaSプラットフォーム、または数千URLを超えて成長するあらゆるサイトにとって、クロールバジェット最適化は重要なSEO領域です。
クロールバジェットとは実際に何か
Googleはクロールバジェットを2つの要素の交差点として定義しています:
クロールレート制限
これは、Googlebotがユーザー体験を低下させずにサーバーに対して行う同時接続数とリクエストの最大数です。サーバーの応答速度と安定性によって決まります。サーバーが200ステータスコードで素早く応答すれば、クロールレートが上がります。5xxエラーを返し始めたり遅くなったりすると、Googlebotはインフラストラクチャに過負荷をかけないよう自動的にペースを落とします。Google Search Consoleでクロールレートを調整することもできますが、これは上限を設定するだけで — Googlebotにより多くクロールするよう強制するものではありません。
クロール需要
これはGoogleがサイトをどれだけクロールしたいかで、2つのシグナルによって決まります:人気度(より多くのインバウンドリンクとユーザーエンゲージメントがあるページはより多くのクロールを集める)と陳腐化(頻繁に変更されるページはインデックスを最新に保つためにより頻繁に再クロールされる)。10分ごとに更新されるニュースのホームページは、変わらない「会社概要」ページよりはるかに多くのクロール需要を受けます。
実効クロールバジェットはこの2つのうち低い方です。需要が低い高速サーバーは依然として控えめなクロールを受けます。遅いサーバー上の高需要サイトは、すべての重要なページに到達する前にレート制限に達します。最適化の目標は、受け取るバジェット内で、ボットがビジネス価値を生むページに訪問を使うことを確実にすることです。
クロールバジェットを浪費するもの
最適化する前に、一般的な浪費原因を特定する必要があります。これらは、ボットが検索プレゼンスに何も加えないページに訪問を消費する原因となる問題です。
パラメータURLとファセットナビゲーション
色、サイズ、価格帯、ブランド、ソート順のフィルターがあるECサイトは、数千の商品から数百万のURLバリエーションを生成できます。/shoes?color=red&size=10&sort=priceと/shoes?size=10&color=red&sort=priceのようなURLは、異なるURLで同一のコンテンツをレンダリングする可能性があります。それぞれがクロールスロットを消費します。放置すると、ボットは実際の商品ページの代わりに重複フィルター組み合わせのクロールにバジェットの大部分を費やします。
リダイレクトチェーン
URL AがURL Bに、BがURL Cに、Cが最終的にURL Dに到達する場合、ボットは単一の目的地に4つのクロールスロットを消費します。チェーンはサイトマイグレーション、CMS変更、URL再構成の際に蓄積される傾向があります。Googleは断念する前に約10のリダイレクトを辿りますが、各ホップは浪費されたリクエストです。
ソフト404ページ
ソフト404は200 OKステータスを返すが「ページが見つかりません」と表示したり、空の商品リストを表示するページです。ボットはこれらのページをクロールし、完全なHTMLをダウンロードした後、コンテンツが無価値であることを判断しなければなりません。実際の404や410ステータスコードなら、ボットは即座に次に進めます。ソフト404は帯域幅と処理時間の両方を浪費します。
canonicalなしの重複コンテンツ
URL内のセッションID、www対非wwwバリアント、HTTP対HTTPSバージョン、末尾のスラッシュ、大文字小文字のバリエーション — これらすべてが同じコンテンツへの重複エントリポイントを作ります。適切なcanonicalタグとリダイレクトがなければ、ボットは各バリアントを個別にクロールし、同一ページにバジェットを分散させます。
無限空間とカレンダートラップ
一部のCMS設定は、事実上無限の数のURLを生成するカレンダーウィジェットやページネーションパターンを作ります。2099年までクリックできるカレンダーは数千の空ページを作成します。同様に、クロール可能なURLとして結果を公開する検索機能は、ボットがトリガーしたクエリから無限の低価値ページを生成する可能性があります。
大きなメディアファイルと最適化されていないリソース
ボットがすべてのページで不必要に大きな画像、未圧縮のJavaScriptバンドル、埋め込みビデオをダウンロードすると、転送時間がクロールウィンドウ内で到達できるページ数を減らします。これは、ページコンテンツの理解に不可欠でない重いリソースの場合に特に影響が大きいです。
クロールバジェットを最適化する方法
クリーンなURLアーキテクチャを構築する
基盤から始めてください。インデックス可能なすべてのURLはユニークで価値のあるコンテンツを提供すべきです。以下の構造的制御を実装してください:
- コンテンツの優先バージョンを指すすべてのページのcanonicalタグ。
- パラメータ処理:
robots.txtを使用して既知の不要なパラメータ組み合わせをブロックするか、パラメータバリエーションに対してcanonicalタグまたは301リダイレクトを返すサーバーサイドロジックを実装します。 - 一貫したURL形式:一つの規則(小文字、末尾スラッシュなし、HTTPS、
wwwの有無)を選択し、リダイレクトで強制します。 - 目的のあるページネーション:サポートされている場所で
rel="next"とrel="prev"を使用し、ページネーションされたページが内部リンクとサイトマップを通じて発見可能であることを確認します。
リダイレクトチェーンを修正する
リダイレクトを監査し、チェーンをフラット化して、すべてのリダイレクトがソースから最終目的地への単一ホップになるようにします。サイトマイグレーション後、内部リンクをリダイレクトチェーンに頼らず新しいURLを直接指すよう更新します。コンテンツの進化に伴い新しいチェーンが発生しないか監視してください — 静かに蓄積される傾向があります。
適切なHTTPステータスコードを返す
削除されたページは404(見つからない)または410(消滅)を返すべきです。移動したページは301(恒久的リダイレクト)を返すべきです。一時的に利用できないページはRetry-Afterヘッダーとともに503を返すべきです。存在しないコンテンツに200ステータスコードを返さないでください — これはクロールバジェットを浪費しインデックスを混乱させるソフト404を作ります。
サーバー応答時間を改善する
サーバーの応答が速いほど、ボットはレート制限内でより多くのページをクロールできます。主なレバー:
- サーバーサイドキャッシング:可能な場合、ボットリクエストに対してプリレンダリングされたHTMLを提供します。
- CDNデプロイメント:ボットの位置に近いエッジノードからレスポンスを配信してレイテンシを削減します。
- データベース最適化:ページ生成時間に影響する遅いクエリは、クロールスループットを直接低下させます。
- HTTP/2サポート:多重化された接続がボットとユーザー両方の効率を向上させます。
- TTFBモニタリング:重要なページのTime To First Byteを200ms以下に保ちます。
XMLサイトマップを管理する
サイトマップはどのURLが重要かについてボットへの直接的なシグナルです。以下で最適化してください:
- インデックス可能なcanonical URLのみを含める — リダイレクト、noindexページ、ブロックされたURLは決してリストしません。
- コンテンツタイプ(商品、記事、カテゴリ)別にサイトマップをセグメント化して、ボットが優先順位を付けられるようにします。
- 正確な
<lastmod>日付を設定 — コンテンツが本当に変更されたときのみ更新します。虚偽の新しさシグナルは信頼を損ないます。 - ファイルあたり50,000 URLまたは50MB以下にサイトマップを保ち、大規模サイトにはサイトマップインデックスを使用します。
robots.txtファイルでサイトマップを参照します。
内部リンクを強化する
内部リンクで十分に接続されたページは、より頻繁かつ迅速にクロールされます。内部リンクのない孤立ページは、サイトマップに含まれていても発見されない可能性があります。パンくずナビゲーション、関連コンテンツモジュール、フッターリンク、本文内のコンテキストリンクを使用して、密度が高く論理的なリンクグラフを作成してください。
低価値エリアのクロールをブロックする
robots.txtを使用して検索価値のないパスをブロックしてください:管理パネル、ログインページ、内部検索結果、ショッピングカートページ、印刷用の複製。ボットがレンダリングに必要なCSS、JavaScript、画像をブロックしないよう注意してください — これはランキングを助けるどころか害する可能性があります。
サーバーログによるモニタリング
ボットがサイトと実際にどのように対話しているかを理解する最も信頼性の高い方法は、サーバーログ分析です。Search Consoleは有用なデータを提供しますが、ログは完全な全体像を提供します。
ログから抽出すべきもの
- ボット識別:User-Agentでリクエストをフィルタリングして、Googlebot、Bingbot、その他のクローラーを分離します。
- 1日あたりのクロールページ数:時間の経過に伴う総ボットリクエストを追跡して、トレンドと異常を発見します。
- ステータスコード分布:ボットリクエストの何パーセントが200、301、404、5xxを返すか?
- リクエストあたりの応答時間:ボトルネックとなっている遅いページを特定します。
- 最もクロールされる/されないセクション:ボットの注目をビジネスの優先順位と比較します。ボットが訪問の60%をフィルターページに、5%を商品ページに費やしているなら、バジェット配分の問題があります。
- URLごとのクロール頻度:主要ページはどのくらいの頻度で再訪問されるか?新しいページは迅速に発見されるか?
ログベースのモニタリングのセットアップ
アクセスログをログ管理プラットフォーム(ELKスタック、Datadog、Splunk、またはアクセスログをパースするシンプルなスクリプト)に転送します。以下を強調するダッシュボードを構築してください:
- ボット別の日次クロールボリューム。
- 最もクロールされるURL上位50。
- ボットにエラーを返すURL。
- ボットリクエストの平均およびp95応答時間。
これらのダッシュボードを毎週レビューしてください。クロールボリュームの突然の低下は、サーバーの問題、誤ったrobots.txtの変更、またはペナルティを示す可能性があります。急増はボットループやクロールトラップを示している可能性があります。
クロールバジェットとSpider.es
Spider.esは検索エンジンボットがサイトを体験する方法をシミュレートします。リンクを辿り、robots.txtを読み、ステータスコードを確認し、応答時間を測定し、内部リンクグラフをマッピングします — クローラーと同じビューを提供します。以下に使用してください:
- リダイレクトチェーンを特定し、蓄積される前に修正する。
- 通常のクロールではボットが到達できない孤立ページを見つける。
- ソフト404と設定ミスのステータスコードを検出する。
- サイトマップにクリーンでインデックス可能なURLのみが含まれていることを確認する。
- シミュレートされたボット負荷でのサーバー応答時間を測定する。
まとめ
クロールバジェットはダッシュボードで確認できる数値ではありません — サーバーパフォーマンス、コンテンツアーキテクチャ、検索エンジンに送るシグナルの結果として現れるものです。すべてのリダイレクトチェーン、すべてのパラメータURL、すべてのソフト404は、価値を加えないものへの浪費された訪問です。漏れを修正し、シグナルを強化し、ログを通じて結果をモニタリングしてください。すべてのボット訪問が重要なとき、クロールされるすべてのページはそこにある価値があるべきです。