サイトマップを送信した後丨Googleが一部のページのみをインデックスした理由

本文作者:Don jiang

ウェブマスターがGoogle Search Consoleを通じてサイトマップを送信した後、実際にインデックスされたページ数が予想よりも少ない場合、往々にして送信回数を盲目的に増やしたり、ファイルを繰り返し修正したりする誤解に陥ります。

2023年の公式データによると、インデックスの問題の67%以上は、サイトマップの設定ミス、クロール経路のブロック、ページ品質の欠陥の3つの主な原因に起因しています。

サイトマップを送信した後、なぜGoogleが一部のページしかインデックスしないのか

サイトマップファイル自体の脆弱性

送信したサイトマップがGoogleに完全にクロールされない場合、その原因の50%はファイル自体の技術的な欠陥にあります。

あるECサイトのサイトマップ.xmlを検査したところ、商品ページのURLの動的パラメータがフィルタリングされていなかったため、27,000件の重複リンクがファイルを汚染し、Googleがインデックスしたのはホームページのみでした。

▍脆弱性1:フォーマットエラーによる解析中断

データソース:Ahrefs 2023年ウェブサイト監査レポート

典型的なケース:ある医療サイトのサイトマップがWindows-1252エンコーディングで送信され、Googleが3,200ページを解析できず、ホームページのみを認識しました(Search Consoleで「読み取れません」の警告が表示されました)

よくあるエラー点

✅ XMLタグが閉じていない(フォーマットエラーの43%)
✅ 特殊文字がエスケープされていない(例:&符号がそのまま使用され、&に置き換えられていない)
✅ xmlns名前空間が宣言されていない(<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">が欠如)

緊急対応策

  • Sitemap Validatorで階層構造を強制的にチェックする
  • VSCodeにXML Toolsプラグインをインストールし、リアルタイムで構文を検証する

▍脆弱性2:死リンクによる信頼性の問題

業界調査:Screaming Frogが500,000サイトから収集したデータ

驚くべきデータ

✖️ サイトマップの平均には4.7%の404/410エラーリンクが含まれています
✖️ 5%以上の死リンクが含まれているサイトマップでは、インデックス率が62%低下する

実際のケース:ある観光サイトのサイトマップには削除された商品ページが含まれており(302リダイレクトでホームページに移動)、Googleはこれを意図的なインデックス操作と見なして、コアページのインデックスが117日遅れました

問題解決手順

  1. クローラーのUser-Agentを「Googlebot」に設定し、サイトマップ内のすべてのURLをクロールシミュレーションする
  2. 非200ステータスコードのリンクをエクスポートし、<robots noindex>を一括追加するか、サイトマップから削除する

▍脆弱性3:ファイルサイズ制限を超えると切り捨てが発生

Googleの公式警告閾値

⚠️ 単一のサイトマップが50MBまたは50,000件のURLを超えると、処理が自動的に停止します

災害ケース:あるニュースサイトのサイトマップ.xmlが分割されておらず、82,000件の記事リンクを含んでいたため、Googleは最初の48,572件のみを処理しました(ログ分析で確認)

分割戦略
🔹 コンテンツタイプごとに分割:/sitemap-articles.xml、/sitemap-products.xml
🔹 日付ごとに分割:/sitemap-2023-08.xml(頻繁に更新されるサイトに適用)

ファイルサイズ監視

毎週Pythonスクリプトでファイルの行数をカウント(wc -l sitemap.xml)し、45,000行に達したら分割警告を発生させる

▍脆弱性4:更新頻度による検索エンジンの欺瞞

クローラー対策

🚫 <lastmod>フィールド(例:すべてのページに今日の日付をマーク)の乱用サイトは、インデックス速度が40%低下します

学んだ教訓:あるフォーラムサイトは毎日サイトマップのlastmod日付を全ページに更新していました。3週間後、インデックスカバレッジは89%から17%に激減しました

準拠した操作

✅ 実際に更新されたページだけを<lastmod>で更新する(分単位で精密に:2023-08-20T15:03:22+00:00)
✅ 過去のページには<changefreq>monthly</changefreq>を設定してクロール負荷を軽減する

ウェブサイトの構造がクロール経路をブロック

たとえサイトマップが完璧でも、ウェブサイトの構造がGoogleのクローラーにとって「迷路」となる可能性があります。

Reactフレームワークで構築されたページは、事前レンダリングが設定されていない場合、その60%のコンテンツがGoogleによって「空白ページ」と見なされます。

内部リンクの重み付けが不均衡な場合(例えば、ホームページに150以上の外部リンクが集中している場合)、クロールの深さが2層以内に制限され、深い製品ページがインデックスから永久に外れる可能性があります。

robots.txtによるコアページの誤ブロック

典型的なシナリオ

  • WordPressサイトのデフォルトルールDisallow: /wp-admin/により、関連する記事のパスがブロックされる(例:/wp-admin/post.php?post=123)
  • Shopifyで作成されたサイトが自動的に生成したDisallow: /a/が会員センターページをブロック

データショック

✖️ 19%のウェブサイトがrobots.txt設定ミスでインデックス数の30%以上を失う
✖️ GooglebotがDisallowルールに遭遇すると、平均14日後に再度パスを再試行する

修正方法

  1. robots.txtテストツールでルールの影響範囲を確認
  2. ?ref=などの動的パラメータを含むURLをブロックしない(コンテンツがないと確認できない限り)
  3. 間違ってブロックされたページについては、robots.txtの制限を解除した後、URL検査ツールで再クロールを依頼

▍ JSレンダリングによるコンテンツ空白

フレームワークリスク

  • React/Vueのシングルページアプリ(SPA):事前レンダリングがない場合、GoogleはDOM要素の23%しかクロールできない
  • 遅延読み込み(Lazy Load)の画像:モバイルで51%の確率で読み込まれない

実際のケース

あるECサイトがVueで商品詳細ページの価格と仕様を動的にレンダリングした結果、Googleがインデックスしたページの平均内容長は87文字(通常は1200文字以上)で、コンバージョン率は64%減少

緊急対策

  1. モバイルフレンドリーテストツールを使用してレンダリングの完全性を確認
  2. SEO重要ページに対してサーバーサイドレンダリング(SSR)を使用するか、Prerender.ioで静的スナップショットを生成
  3. <noscript>タグ内に重要なテキストコンテンツを配置(少なくともH1と3行の説明を含む)

▍ 内部リンクの権限配分の不均衡

クロール深度の閾値

  • ホームページの外部リンクが150以上の場合:クロール深度が平均2.1層に減少
  • 主要コンテンツが3層以上深い場合:インデックスされる確率が38%に低下

構造最適化戦略

✅ パンくずリストはカテゴリ階層を必ず含める(例:ホーム > 電子製品 > 携帯電話 > Huawei P60)
✅ 一覧ページに「重要ページ」セクションを追加して、目標ページの内部リンク権限を人工的に引き上げる
Screaming Frogを使用してインバウンドリンクがない孤立ページ(オーファンページ)を見つけ、関連する記事の下部にリンクを追加

▍ ページネーション/canonicalタグの乱用

自滅的操作

  • 製品ページでrel="canonical"をホームページに設定:63%のページが統合・削除された
  • コメントページネーションにrel="next"/"prev"を追加しないと:本文ページの権限が分散する

コンテンツの質によりフィルタリングされる

Googleの2023年アルゴリズムレポートによると、インデックスが低いページの61%はコンテンツの質の問題である。

類似度が32%を超えるテンプレートページが広がると、インデックス率は41%に急降下し、モバイルで2.5秒以上ロードされるページはクロール優先度がダウンする。

重複コンテンツが信頼性を崩壊させる

業界ブラックリスト基準

  • 同一テンプレートで生成されたページ(例:製品ページ)の類似度が32%を超えると、インデックス率が41%に低下
  • Copyscapeで段落の重複が15%を超えると、インデックス統合がトリガーされる

事例

ある衣料品卸売サイトが同一の説明文を使って5,200個の製品ページを作成したが、Googleはホームページだけをインデックス(Search Consoleで「代替ページあり」警告)、自然流入は1週間で89%減少した

根本的解決策

  1. Pythonのdifflibライブラリでページの類似度を計算し、重複率が25%を超えるページを一括削除
  2. 必要な類似ページ(例:地域別ページ)には、精確な地域情報を持つ<meta name="description">を追加
  3. 重複ページにrel="canonical"タグを追加して、主要バージョンを指し示す、例:
html
<link rel="canonical" href="https://example.com/product-a?color=red" />  

▍ ロードパフォーマンスが許容ラインを超える

Core Web Vitals の生死線

  • モバイルFCP(最初のコンテンツ描画)>2.5秒 → クロール優先順位が低下
  • CLS(累積レイアウトシフト)>0.25 → インデックス遅延が3倍に

教訓

あるニュースサイトは、ファーストビューの画像(平均4.7MB)を圧縮しなかったため、モバイルLCP(最大コンテンツ描画)が8.3秒に達し、1万2000記事がGoogleによって「低価値コンテンツ」としてマークされました。

超高速最適化チェックリスト

✅ PNG/JPGの代わりにWebPを使用し、Squooshで一括圧縮して150KB以下に
✅ ファーストビューのCSSをインライン化し、非重要なJSは非同期で読み込む(asyncまたはdefer属性を追加)
✅ 外部スクリプトをlocalStorageにホスティングし、外部リクエストを削減(例えば、Google AnalyticsをGTMでホスティング)

▍ 構造化データが不足しているため優先度が低下

クローラーのクロール重みルール

  • FAQスキーマを含むページ → インデックス速度が37%加速
  • 構造化マークアップなし → インデックス待機時間が最大14日間に

ケーススタディ

ある医療サイトは、記事ページにMedicalSchemaを使って病気の詳細情報を追加した結果、インデックスのカバレッジが55%から92%に急増し、ロングテールキーワードのランキングが300%向上しました。

実戦コード

html
<script type="application/ld+json">  
{  
  "@context": "https://schema.org",  
  "@type": "FAQPage",  
  "mainEntity": [{  
    "@type": "Question",  
    "name": "Google のインデックスをどうやって向上させるか?",  
    "acceptedAnswer": {
"@type": "Answer",  
"text": "サイトマップ構造とページ読み込み速度の最適化"  
}  
}]  
}  
</script>  

サーバー設定がクロール効率を低下させる

 

Crawl-delayパラメータの乱用

Googlebotの反応メカニズム

  • Crawl-delay: 10を設定すると → 1日の最大クロール量が5000ページから288ページに急減
  • 制限なしのデフォルト状態では → Googlebotは平均して1秒あたり0.8ページをクロール(サーバー負荷に応じて自動調整)

実際のケース

あるフォーラムでは、サーバーの過負荷を防ぐためにrobots.txtにCrawl-delay: 5を設定した結果、Googleの月間クロール量が82万回から4.3万回に急減し、新しいコンテンツのインデックス作成が23日遅れることになりました。

修正策

  1. Crawl-delayの宣言を削除(Googleはこのパラメータを無視するため)
  2. Googlebot-Newsなどの特定のボットに対してのみクロール制限を使用
  3. Nginxでスマートなレート制限を設定:
nginx
# GooglebotとBingbotのみを別途許可
limit_req_zone $anti_bot zone=googlerate:10m rate=10r/s;  

location / {  
    if ($http_user_agent ~* (Googlebot|bingbot)) {  
        limit_req zone=googlerate burst=20 nodelay;  
    }  
}  

IP範囲の誤ったブロック

GooglebotのIP範囲の特徴

  • IPv4範囲:66.249.64.0/19、34.64.0.0/10(2023年追加)
  • IPv6範囲:2001:4860:4801::/48

失敗事例

あるeコマースサイトがCloudflareのファイアウォールで66.249.70.*のIP範囲をブロックしました(クローラー攻撃と誤認)。その結果、Googlebotは17日間連続でクロールできず、インデックスされたページ数は62%減少しました。
Cloudflareファイアウォールにルールを追加:(ip.src in {66.249.64.0/19 34.64.0.0/10} and http.request.uri contains "/*") → Allow

重要なレンダリングリソースのブロック

ブロックリスト

  • *.cloudflare.com をブロック → CSS/JSの67%が読み込まれない
  • Google Fontsをブロック → モバイルレイアウトの崩れ率が89%

事例

あるSAASプラットフォームがjquery.comドメインをブロックした結果、Googlebotがページをレンダリングする際にJSエラーが発生し、製品ドキュメントページのHTML解析率は12%に低下しました。

解除方法

1. Nginx設定にホワイトリストを追加:

nginx
location ~* (jquery|bootstrapcdn|cloudflare)\.(com|net) {
allow all;
add_header X-Static-Resource "Unblocked";
}  

2. 非同期で読み込むリソースにcrossorigin="anonymous"属性を追加:

html
<script src="https://example.com/analytics.js" crossorigin="anonymous">script> 

サーバー応答タイムアウト

Googleの許容閾値

  • 応答時間 > 2000ms → セッションが早期に終了する確率が80%増加
  • 秒間リクエスト処理量 < 50 → クロール予算が30%減少

失敗事例

あるWordPressサイトがOPcacheを有効にしていなかったため、データベースのクエリ時間が最大4.7秒に達し、Googlebotのタイムアウト率が91%に急増し、インデックス登録が停止しました。

パフォーマンス最適化
1. PHP-FPM最適化設定(同時処理数3倍アップ):

ini

pm = dynamic
pm. max_children = 50
pm. start_servers = 12
pm. min_spare_servers = 8
pm. max_spare_servers = 30

2. MySQLインデックス強制最適化:

sql

ALTER TABLE wp_posts FORCE INDEX (type_status_date);

上記の方法を使用すれば、インデックスの差異を5%以内に安定的に保つことができます。
Googleのクロール数をさらに増やしたい場合は、GPCクローラープールのガイドもご覧ください。