クロールバジェット実践ガイド:大規模サイト向け

ログ、Search Console、URLパターンで大規模サイトのクロールバジェットを診断し、重要なページを止めずにムダを減らす方法。

クロールバジェットとは、一定期間内にGooglebotがサイト上でクロールしようとするページ数のことです。小規模サイトでは事実上、上限はありません。数百万URLを抱えるサイトでは、戦略的な資源になります。フィルター、ページネーション、中身のないテンプレート、ステージング用ページにバジェットが消費され、優先したいコンテンツがクロールされなくなるためです。その結果、新商品のインデックス登録が遅れ、カタログのカバー率が下がり、検索順位も落ちます。

クロールバジェットの行き先:価値あるページが、フィルター、UTMパラメーター、ページネーションとクローラーの関心を奪い合います。
Googleは公式に2つの概念を区別しています。クロールレート制限(サーバーに負荷をかけずにボットが訪問できる頻度)と、クロール需要(ページの価値の見込みに応じてGoogleがクロールしたいページ数)です。クロールバジェットは、この2つの要因が重なる部分にあたります。最適化の効果がはっきり出るのは、大規模なサイトです。
5–10×

バジェットの過剰消費

最適化していないECサイトで、クロールされるURL数が本当に価値のあるページ数の何倍になるかの目安

60–80%

重複で失われる分

対策を取っていないとき、パラメーター付きURLとページネーションが消費するバジェットの割合

2–4週間

インデックス登録の遅れ

バジェットが逼迫しているとき、新しいSKUがインデックスに載るまでの典型的な遅れ

>50k

問題が出るしきい値

URLが5万を超えるサイトでは、すでにクロールバジェットの制約の影響が出ます

ステップ1:クローラーのログを収集して分析する

Googlebotが実際に何をクロールしているかを知る最も確かな情報源は、Webのサーバーログです。ログ分析で、実際のリクエスト頻度、ボットが無視している、または迷い込んでいるセクション、サーバーが返すHTTP応答が分かります。ログがなければ、最適化はすべて推測になります。

Nginx / ApacheからGooglebotのリクエストを抽出する

bash
# Filter only Googlebot requests from the last 7 days
grep 'Googlebot' /var/log/nginx/access.log \
  | awk '{print $7}' \
  | sort | uniq -c | sort -rn \
  | head -50

# HTTP status codes seen by Googlebot
grep 'Googlebot' /var/log/nginx/access.log \
  | awk '{print $9}' \
  | sort | uniq -c | sort -rn

# Top URLs returning 404 to Googlebot
grep 'Googlebot' /var/log/nginx/access.log \
  | awk '$9 == "404" {print $7}' \
  | sort | uniq -c | sort -rn | head -30

大量のログを構造的に分析するなら、専用ツールを使います。Screaming Frog Log File Analyser、Semrush Log Analyser、ELKスタック(Elasticsearch + Kibana)などです。URLをパターンごとに自動でグループ化し、クロール頻度の推移をグラフにしてくれます。

指標分かること目標の範囲
クロールレート(リクエスト数/日)クロールの強度。Googlebotが1日にリクエストするページ数サイトによって異なる。推移を追う
クロールしたページ数/日1日にクロールされたユニークなURLの数。クロールバジェットの主要KPI最適化後は増えるはず
200 / (301+302) / 404 / 500の比率ボットの全リクエストに占める、HTTP応答の種類ごとの割合200が90%超、404は5%未満、500はほぼ0%
クロール中の重複URLの割合ログに含まれる、パラメーター付きURLと重複URLの割合最適化後は15%未満
新規ページ / クロール総数初めてのクロールと再訪問の比率新規ページの割合を増やす

ステップ2:Google Search Consoleとサーバー応答の分析

Google Search Consoleは、サーバーログにアクセスしなくても、集計済みのクロールデータを提供します。入り口になるのは「クロールの統計情報」レポートです。1日あたりの平均リクエスト数、ページの読み込み速度の目安、レスポンスコードの分布が分かります。

  • GSC → 設定 → クロールの統計情報:クロールリクエストのグラフと、ファイル種別・レスポンスコード別の内訳。404や500の急増、デプロイ後の落ち込みを探します。
  • GSC → インデックス作成 → ページ:インデックス登録されたURL数と、登録されない理由の比較。「検出 - インデックス未登録」は、クロールバジェット不足を直接示すシグナルです。
  • GSC → URL検査:特定のページの状態を手動で確認します。最後にクロールされた日時と、Googlebotが見た内容が分かります。
  • GSC → 設定 → クロールレート:ボットがサーバーに負荷をかけている場合は、クロールレートを抑えられます。通常は不要で、計測できるパフォーマンス問題があるときだけ制限します。
GSCの「検出 - インデックス未登録」は、クロールバジェット不足を最も直接示すシグナルです。ページの存在(リンクやサイトマップ経由で発見)はGoogleに伝わっていますが、間に合ってクロールできていません。まず優先すべきは、不要なURLからバジェットを解放することです。

クロールバジェットを浪費する原因

大規模サイトでボットがバジェットを失う原因は、典型的には6つあります。ログで1つずつ特定して量を見積もると、最適化の優先順位が決まります。

浪費しているクロールバジェットの配分と、最適化後の配分の比較。

パラメーター付きURL

?sort=price&filter=red&page=3のようなURLは、中身がほぼ同じユニークURLを指数関数的に生み出します。

終わりのないページネーション

/catalog?page=Nは、価値が逓減していくURLを何千も作ります。ボットは古いカタログページを延々とクロールし続けられます。

重複コンテンツ

同じページが別のURLにあるケース:/category/ と /category?utm_source=email、HTTPとHTTPS、wwwありとなし。

一時的なページ

ウェビナーのランディングページ、デモ用モックアップ、?preview=1のページ、下書き。現れては消えますが、ボットはバジェットを使い続けます。

中身のないテンプレート

商品のないカテゴリページ、中身のないプロフィール、自動生成されたタグページなど、内容の薄いコンテンツが何千件も作られます。

セッションパラメーター

?sessionid=abc123や ?token=xyzはセッションごとにユニークなURLになります。ボットから見れば、そのたびに「新しいページ」です。

URLパラメーターと重複:対処法

ECサイトで最大のバジェット浪費源は、パラメーター付きURLです。万能の解決策はなく、パラメーターの性質によって適切な対処が変わります。

パラメーターの種類例推奨する対処
並べ替え?sort=price_ascrobots.txtでDisallow、またはパラメーターなしのURLを指すcanonicalタグ
独自の内容がないフィルター?color=red&size=XLクリーンなカテゴリページへのcanonicalタグ+meta robotsでnoindex
ページネーション?page=52ページ目以降は1ページ目へのcanonicalタグ(深いページはDisallow)
トラッキング / UTM?utm_source=email全ページでUTMなしのURLへのcanonicalタグ、またはGSCでのパラメーター処理
セッション / トークン?sessionid=abcrobots.txtでDisallow: /*?sessionid= を指定し、コード側でURLの生成を修正
プレビュー / 下書き?preview=1&draft=truerobots.txtでDisallow: /*?preview= と /*?draft= を指定
URLパラメーターを正規化するNginx設定の例:
text
# robots.txt — blocking parametric URLs
User-agent: *

# Sort and filter parameters
Disallow: /*?sort=
Disallow: /*?order=
Disallow: /*?filter=
Disallow: /*?color=
Disallow: /*?size=

# Pagination deeper than page 3 (Allow/Disallow approach)
Disallow: /*?page=
Allow: /*?page=1
Allow: /*?page=2
Allow: /*?page=3

# Session and tracking parameters
Disallow: /*?sessionid=
Disallow: /*?token=
Disallow: /*?ref=
Disallow: /*?utm_

# Preview and drafts
Disallow: /*?preview=
Disallow: /*?draft=
一部に独自の内容があるパラメーター(たとえば、ブランド紹介文があるブランドフィルター)では、Disallowよりcanonicalタグが向いています。ボットはページを訪問してcanonicalを読み、メインのページにリンク評価を渡せます。Disallowはページをクロール対象から完全に外し、インデックスからも外れる可能性があります。

フィルター、ファセット、ページネーション

ファセットナビゲーションは最も厄介なケースです。URLの組み合わせが爆発的に増えます。値が5つあるフィルター10個なら、組み合わせは100万を超える可能性があります。目標は、価値のあるファセット(ブランド+カテゴリ)を残し、無駄な組み合わせをブロックすることです。

  1. 価値のあるファセットを特定する:オーガニックトラフィックが多いページや、独自のSEOコンテンツがあるページ(ブランド専用の文章がある /catalog/nike/ など)は、自己参照のcanonicalタグを付けてインデックスに残します。
  2. 価値の低い組み合わせにはnoindex + followを付ける:ページは表示され(リンクはたどられます)、インデックスには入りません。複数のファセットが有効なとき、テンプレートで<meta name="robots" content="noindex, follow">を出力します。
  3. 純粋に技術的なパラメーターはDisallowする:並べ替え、色、サイズにSEOの価値がなければ、robots.txtでブロックします。
  4. AJAXで読み込むファセット:ファセットをJavaScriptで読み込み、URLに反映しなければ、ボットは追加のURLを見つけません。アーキテクチャのレベルで問題を解決できます。

ページネーション:canonicalタグかDisallowか

最適なページネーション戦略は規模で変わります。10ページまでなら、クロールを許可し、2ページ目以降に1ページ目を指すcanonicalタグを付けます。数百ページに及ぶ場合は、3〜5ページ目より先をDisallowします。URLパラメーターを使わない無限スクロールは、ボットから1ページとして扱われるため、バジェットの面では有利です。

一時的なページ:ウェビナー、モックアップ、デモ

マーケティングチームが活発なサイトでは、一時的なページがバジェットをひそかに消耗させます。ウェビナーのランディングページ、デモ用モックアップ、クライアント向けプレビュー、A/Bテストのバリアント。すぐに作られ、そのまま残り続けることが多く、気づかないうちにクロールバジェットを消費します。

  • meta robotsのnoindex:一時的なページすべてのテンプレートに<meta name="robots" content="noindex, nofollow">を追加します。ボットは訪問してディレクティブを読み、そのURLをインデックスから外します。テンプレートを触れるなら、最も簡単な方法です。
  • X-Robots-Tag HTTPヘッダー:一時的なページに専用のHTMLテンプレートがない場合(生成したPDFやファイルなど)は、HTTPレスポンスヘッダーX-Robots-Tag: noindex, nofollowを使います。
  • パスのプレフィックスでDisallow:一時的なページが予測しやすいパスの下にあるなら、robots.txtでブロックします。インデックス済みのURLが消える保証はありませんが、新しいURLはクロールされなくなります。
  • HTTP認証:ステージングやプレビューのページを完全に隔離できる、唯一の確実な方法です。Googlebotは認証情報を持たないので、ページをクロールしません。
タグとHTTPヘッダーによるnoindexマークアップの例:
text
# robots.txt — patterns for temporary pages
User-agent: *

# Webinars and events
Disallow: /webinars/
Disallow: /events/draft-
Disallow: /landing/test-

# Mockups and previews
Disallow: /_preview/
Disallow: /mockups/
Disallow: /demo/

# A/B tests and experiments
Disallow: /*?variant=
Disallow: /*?experiment=
Disallow: /*?ab_test=

# Template preview parameters
Disallow: /*?preview=
Disallow: /*?draft=
Disallow: /*?revision=
すでにインデックスされているページは、Disallowを指定してもインデックスから消えません。インデックス済みの一時的なページを外すには、noindexを使います(ボットがディレクティブを読めるよう、アクセスできる状態にしておきます)。ページがインデックスから消えてから、Disallowを設定するか、HTTP認証を導入します。

大規模サイトのサイトマップインデックス

URLが数百万ある場合、1つのXMLサイトマップでは対応できません。上限は50,000 URLまたは50MBです。サイトマップインデックスは、子のサイトマップを指す目次ファイルです。これで優先度を構造化し、バジェットを最も必要な場所へ向けられます。

xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <!-- Priority sections — crawled first -->
  <sitemap>
    <loc>https://example.com/sitemap-products.xml</loc>
    <lastmod>2026-05-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-categories.xml</loc>
    <lastmod>2026-05-15</lastmod>
  </sitemap>
  <!-- Lower-priority sections -->
  <sitemap>
    <loc>https://example.com/sitemap-blog.xml</loc>
    <lastmod>2026-05-10</lastmod>
  </sitemap>
  <!-- Do NOT include noindex pages or duplicates! -->
</sitemapindex>
サイトマップインデックスの構成に関する推奨事項:
  • コンテンツの種類ごとにサイトマップを分ける:商品、カテゴリ、ブログ、静的ページをそれぞれ別ファイルにします。GSCでセクション別のインデックス登録状況を確認できます。
  • lastmodは正直に書く:lastmodはボットに更新の新しさを伝えます。今日の日付ではなく、実際に最後に変更した日付を設定します。そうしないと、ボットはこのシグナルを信用しなくなります。
  • ブロックしたURLは含めない:noindexやDisallowのページをサイトマップに入れると、ボットに矛盾したシグナルを送ります。
  • 子サイトマップの上限:各ファイルは最大50,000 URLまたは50MB(圧縮後)です。超えたら分割します(sitemap-products-1.xml、sitemap-products-2.xml)。
サイトマップインデックスの構成に関する推奨事項:

サーバー設定とレート制限

サーバー側は、クロールバジェットに両方向で影響します。応答が遅いとGoogleはクロールの強度を下げます。5xxエラーが出るとボットは待機して再試行に時間を費やします。サーバーの最適化は、クロール効率を直接改善します。

HTTPステータスコードGooglebotの解釈推奨する対処
200 OKページが存在する。ボットはクロールしてインデックスに登録するすべての公開ページで標準の状態
301/302リダイレクト。ボットはたどるので、両方のURLでバジェットを使うリダイレクトチェーンを最小限にし、リンク切れを直す
404 Not Foundページが存在しない。ボットはそのURLのクロールをやめる削除したページなら問題なし。Googlebotのログで404が5%超なら問題
429 Too Many Requests一時的なスロットル。ボットはクロール頻度を下げるサーバーに実際に負荷がかかっているときに使う。Googlebotは429を尊重する
503 Service Unavailable一時的に利用できない。ボットは後で再試行するメンテナンス中の正しい応答。乱用しない
500 Server Errorサーバーエラー。ボットが再試行し、バジェットを浪費する500の原因をなくす。5xxはそのたびにバジェットを消費する
クロール管理のためのNginx設定の例:
nginx
# Nginx: return 429 when any crawler sends too many requests
limit_req_zone $http_user_agent zone=crawlers:10m rate=10r/s;

location / {
    limit_req zone=crawlers burst=20 nodelay;
    limit_req_status 429;
    # ... other settings
}
クロール管理のためのNginx設定の例:
Googlebotのクロールレートを制御するには、robots.txtのCrawl-delayではなく、GSC → 設定 → クロールレートを使います。GoogleはCrawl-delayを公式に無視します。Crawl-delayが有効なのはYandexとBingです。

KPIとモニタリング

クロールバジェットは継続的な監視が必要です。デプロイのたびに、パラメーター付きの新しいURLが何千も誤って公開される可能性があります。次の指標を、週次のダッシュボードと月次のレビューで確認します。

クロールバジェットの主要KPI

最適化した大規模サイトの目標値

Googlebotのリクエストに占める200 OKの割合> 90%
Googlebotのリクエストに占める404の割合< 5%
クロール中の重複URLの割合< 15%
インデックス登録されたページ / サイトマップで送信したページ> 85%
  • 毎週:GSCのクロールリクエスト数を、今週と前週で比較します。急増は、直近のデプロイで新しい重複が生まれたサインです。
  • 毎月:GSC → ページ → 「検出 - インデックス未登録」を確認します。サイトの規模が変わらないのに増えているなら、クロールバジェットの問題です。
  • 大きなデプロイのたび:サイトに対してScreaming Frogを実行し、ユニークURLの数を確認します。前回のスナップショットと比較します。
  • 四半期ごと:30日分のログを完全に分析します。更新したコードで生まれた、パラメーター付きURLの新しいパターンを探します。
  • アラート:5xxの応答が1日のGooglebotの全リクエストの1%を超えたら通知されるように設定します。

すぐできる改善とロードマップ

クロールバジェットの最適化は、一度きりの作業ではなく継続的なプロセスです。作業は、すぐできる改善(1〜2週間で効果が出る)と、体系的な変更(1〜3か月)に分けます。

1週目一時的なページとプレビュー用パラメーターをブロックする

ウェビナー、モックアップ、デモのテンプレートにnoindexを追加します。robots.txtに ?preview= と ?draft= のDisallowを追加します。

2週目トラッキングパラメーターとセッションをDisallowする

?utm_、?sessionid=、?ref= をrobots.txtに追加します。全テンプレートで、UTM付きのバリアントにcanonicalタグを設定します。

1か月目サイトマップインデックスの最適化

テーマ別のサイトマップに分割します。noindexのページをサイトマップから外します。正確なlastmodを設定します。

1〜2か月目ファセットのcanonicalタグとnoindex

価値のあるファセットの組み合わせと、不要な組み合わせを見分けます。価値の低い組み合わせにnoindex + followを実装します。

2〜3か月目サーバー応答の最適化

リダイレクトチェーンをなくします。ログで見つかった404の件数を減らします。クロールされるセクションのTTFBを最適化します。

継続モニタリングと定期レビュー

GSCのダッシュボード、5xxのアラート、四半期ごとのログ分析。大きなデプロイのたびに確認します。

すぐできる改善のチェックリスト

  • 一時的なページ(ウェビナー、モックアップ、デモ)のテンプレートすべてにnoindexを追加した
  • robots.txtで ?preview=、?draft=、?sessionid=、?utm_ をDisallowした
  • パラメーター付きのページすべて(並べ替え、2ページ目以降)で、クリーンなURLを指すcanonicalタグを設定した
  • noindexとDisallowのページをサイトマップから外した
  • サイトマップインデックスをセクション別に分割し、lastmodを正確にした
  • リダイレクトチェーンを1ホップに減らした
  • Googlebotのログで404が5%未満になり、リンク切れをなくした
  • GSCに週次のモニタリングダッシュボードを設定した

FAQ

サイトがどのくらいの規模になると、クロールバジェットが問題になりますか?
Googleは、サイトが100万URLを超えたら注意を払うよう推奨しています。実際には、もっと早く問題が出ます。パラメーター付きのページが活発に生成されるサイトなら、5万〜10万URLからです。GSCで「検出 - インデックス未登録」が増えているなら、サイトの規模にかかわらず監査すべきタイミングです。
クロールではサイトマップと内部リンクのどちらが重要ですか?
どちらも重要で、補い合う関係です。サイトマップは、ページの存在をボットに知らせます。内部リンクは、PageRankを渡し、相対的な重要度を伝えます。内部リンクがなくサイトマップにしか載っていないページは、内部リンクが何百とあるページよりクロールされにくくなります。
CDNはクロールバジェットの役に立ちますか?
間接的には役立ちます。CDNでサーバーの応答が速くなると、同じクロールレート制限のままGoogleは単位時間あたりにより多くのページをクロールできます。速いTTFBは、クロールの強度に影響する要因の1つです。
canonicalタグはクロールバジェットにどう影響しますか?
canonicalタグはページのクロールをブロックしません。ボットはそのページを訪問する可能性があります。ただし、canonicalを読んだボットはそのページが重複だと理解し、再クロールの頻度を下げます。canonicalが解決するのはインデックスの重複であり、クロールの問題は完全には解決しません。そちらにはDisallowやnoindexのほうが効果的です。
バジェットを最適化したあと、新しいページのインデックス登録を早められますか?
できます。バジェットを解放したら、新しいページの正しいlastmodでサイトマップを更新します。URLを直接送信するには、GoogleのIndexing APIを使います(公式にはニュースと求人情報向けですが、実際には他のコンテンツタイプでも効果があります)。権威のあるセクションから新しいページへ、内部リンクも張ります。

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it