Googleコアアプデで35%減 → サイトマップ7万URLを3.4万に削った話🔪
はじめに
バイクポータルサイト「MotoHub」を個人開発しています。中古バイク13万台の検索・相場比較ができるサイトです。
2026年3月27日、Google March 2026 Core Updateが来ました。
DAUが420 → 150-200に。35%減。
GWを使って打った回復施策のうち、この記事ではサイトマップとインデックスの最適化について書きます。
環境
さくらVPS 4GB
├── Docker Compose
│ ├── Nginx
│ ├── PHP-FPM(Laravel 12 / PHP 8.3)
│ ├── MySQL 8.0
│ ├── Redis
│ └── Meilisearch
└── Cloudflare(Free プラン)
コアアプデ前の状態
まず、被弾前のサイトマップの状態がひどかった。
| 項目 | 数値 |
|---|---|
| サイトマップURL数 | 約21万 |
| インデックス登録済み | 6.79万 |
| 未登録 | 28.8万 |
| 掲載順位(平均) | 7.8 |
21万URLのうち、Googleが登録してくれたのは3割だけ。 残りの7割はクロールバジェットを無駄に食っていたことになります。
問題:「全部載せればいい」は間違いだった
個人開発あるあるですが、「ページが多い方がSEOに有利」だと思っていました。
とにかくURLを増やす。検索結果ページも、在庫ゼロの地域ページも、RSSニュースも、全部サイトマップに入れていた。
これが裏目に出ました。
Googleのコアアプデは「低品質ページが多いサイト」を狙い撃ちにします。21万URLのうち、本当に価値があるページがどれだけあるか。正直、半分以上は薄いコンテンツでした。
やったこと①:noindex追加
まずGoogleにインデックスさせたくないページを洗い出しました。
売り切れ車両ページ
MotoHubには13万台の車両ページがありますが、売れた車両のページは中身が薄くなります。以前に販売実績・同車種データなどの付加価値コンテンツを追加して200返却にしていましたが、それでもインデックスの質を考えると除外すべきと判断。
// resources/views/bikes/show.blade.php
@if($listing->is_sold_out)
<meta name="robots" content="noindex, follow">
@endif
follow は残しているので、内部リンクの評価は引き続き渡ります。ページ自体を消すのではなく、インデックスだけ外す。
検索結果ページ
/bikes/search?keyword=レブル&sort=price_asc&page=2 のようなURLが大量にクロールされていました。パラメータの組み合わせで無限にURLが生成される。
// resources/views/bikes/search.blade.php
<meta name="robots" content="noindex, follow">
検索結果ページは全てnoindex。ユーザーが検索から直接来るべきページではない。
RSSニュースページ
外部RSSから取得したニュースページ。オリジナルコンテンツではないので、Googleから「コピーコンテンツ」と判断されるリスクがある。
// resources/views/news/show.blade.php(RSS由来の記事)
@if($news->source !== 'MotoHub')
<meta name="robots" content="noindex, follow">
@endif
自社オリジナルニュースだけindexを残す。
掲載3台以下のエリアLP
/bikes/area/tokyo/shibuya のようなエリア別ランディングページ。掲載台数が少ないと中身がスカスカになる。
// resources/views/bikes/area.blade.php
@if($listingCount <= 3)
<meta name="robots" content="noindex, follow">
@endif
閾値は3台。 少なすぎると1台の入れ替わりでnoindex/indexが頻繁に切り替わるので、ある程度バッファを持たせた。
やったこと②:robots.txt更新
noindexと合わせて、robots.txtでもクロール対象を制限。
# robots.txt(追加分)
User-agent: *
Disallow: /bikes/search
/bikes/search 以下を丸ごとDisallow。noindexとの二重対策です。
注意点: robots.txtでDisallowしたページは、Googleがクロールしなくなるためnoindexも読めなくなります。つまり既にインデックスされているページは、Disallowだけだとインデックスから消えない可能性がある。
だから両方やる。noindexで「インデックスから外して」、robots.txtで「今後クロールしないで」と伝える。
やったこと③:サイトマップの大幅削減
ここが一番効果が大きかった。
Before
sitemap.xml
├── sitemap-listings-1.xml ... sitemap-listings-12.xml (11.5万URL)
├── sitemap-landings-1.xml ... sitemap-landings-6.xml (4.5万URL)
├── sitemap-models.xml (4,742URL)
├── sitemap-shops.xml (1万URL)
├── sitemap-parking.xml (3.8万URL)
├── sitemap-news.xml (数千URL)
└── sitemap-pages.xml (数百URL)
合計: 約21万URL
After
sitemap.xml
├── sitemap-models.xml (4,742URL)
├── sitemap-features.xml (37URL)
├── sitemap-landings.xml (大幅削減、掲載4台以上のみ)
├── sitemap-shops.xml (1万URL)
├── sitemap-parking.xml (3.8万URL)
├── sitemap-ranking.xml (掲載5台以上のみ)
├── sitemap-news.xml (オリジナルのみ)
└── sitemap-pages.xml (数百URL)
合計: 34,291URL
変更のポイント:
| 変更 | 理由 |
|---|---|
| listings(車両詳細)を除外 | 売り切れ含む11.5万URLがクロールバジェットを圧迫 |
| RSSニュースを除外 | 他サイトのコピーコンテンツ |
| 低品質landingsを除外 | 掲載3台以下は中身が薄い |
| ランキングを条件付きで復活 | 掲載5台以上のランキングは独自コンテンツとして価値がある |
| 特集LP(/features/)を追加 | 新規作成した37ページの独自コンテンツ |
削減の判断基準
「このページに検索から来たユーザーが満足するか?」
これだけ。掲載0台のエリアページに来ても、ユーザーは何も得られない。売り切れ車両ページに来ても、もう買えない。RSSニュースを読むなら、元サイトを読めばいい。
Googleが求めているのは、ユニークで価値のあるページだけをサイトマップに載せること。
結果
| 項目 | Before | After |
|---|---|---|
| サイトマップURL数 | 約21万 → 7万 | 34,291 |
| noindex対象 | なし | 売り切れ車両、検索結果、RSSニュース、掲載3台以下LP |
| robots.txt Disallow | /admin等のみ | + /bikes/search |
21万 → 7万 → 34,291。 2段階で削減しました。
5/12以降の確認予定
noindexとサイトマップの変更がGoogleに反映されるまで2〜4週間かかります。確認するのは:
- GSCのインデックス登録済み数の変化(6.79万からどう動くか)
- 「未登録」数の減少(28.8万が減るはず)
- クロール統計の変化(クロール頻度が上がればGoogleが評価している証拠)
- DAUの回復傾向
学んだこと
1. 「多ければいい」は嘘
21万URLを持っていても、Googleが評価したのは3割だけ。残りの7割は足を引っ張っていた。
2. 削る勇気が必要
11.5万の車両URLをサイトマップから外すのは怖かった。でも、売り切れ車両はそもそもユーザーに価値を提供できない。
3. noindexとrobots.txtは両方やる
片方だけだと漏れる。既にインデックスされたページはnoindexで外し、今後のクロールはrobots.txtで止める。
4. コアアプデは「掃除しろ」というメッセージ
低品質ページを放置していた自分への警告だと思って、GWで一気に掃除した。
次の記事
この記事はシリーズの第1弾です。
- サイトマップ7万→3.4万に削った話(この記事)
- 特集LP・駐車場詳細ページの品質強化
- Claude APIでバイクニュースを全自動生成→X投稿まで自動化した話
前回の記事:全国4万件のバイク駐車場を9,000駅に紐付けた話 — 座標計算とデータクリーニングの泥臭い戦い
🏍 MotoHub: https://motohub.jp
X: https://x.com/motohub_jp
GitHub: https://github.com/ausssxi/MotoHub

