ソフト404エラー完全ガイド!原因、状況別の対処法、再発防止策など徹底解説!
「Search Console に『送信された URL はソフト404のようです』って出たけど、放っておいても大丈夫?」
「商品を削除したのにページが存在している扱いになっている……どう直せばいいの?」
「サイトで大量にソフト404が出てて、どこから手をつければ良いかわからない」
そんな不安や疑問を抱えてこの記事を開いたあなたへ──
ソフト404は見た目では「ページがない」「中身が薄い」ように見える一方で、サーバーが誤ったHTTPステータス(主に200)を返している状況を指します。
見かけは小さな問題に見えても、放置するとインデックスの混乱、クロールの浪費、検索流入の低下などサイト運営に実害を与えることがあります。
この記事では、初心者でも実践できるように、ソフト404の「仕組み」「発生しやすい原因」「見つけ方」「状況別の優先対応」「再発防止の運用ルール」までをわかりやすく整理しました。
まずは「なぜこれが問題なのか」を理解し、続けて診断→対応→検証の実務フローを順を追って学んでいきましょう。✅
ソフト404の概要
ソフト404(ソフトフォーオーフォー)とは、見た目やユーザーの印象としては「ページが存在しない/中身がない」状態なのに、サーバーが正常(200 OK)のHTTPレスポンスを返してしまっているケースを指します。
一言で言えば 「実質的に404なのに技術的には200が返っている」 状態です。
- 典型例:商品が削除されて「商品が見つかりません」と表示されるが、サーバーは 200 を返している。
- 問題の本質:検索エンジンはステータスコードを手がかりにページの存在有無を判断します。表示上は消えて見えても、レスポンスが正しくないと検索エンジンに誤認識されやすい点が問題です。🔎
簡単な確認方法(例)
ターミナルやコマンドプロンプトで次を実行すると、そのページのHTTPステータスが確認できます。
curl -I https://example.com/your-page
上の結果で HTTP/1.1 200 OK が返り、かつページに「該当するコンテンツがありません」などの文言がある場合、ソフト404の疑いがあります。
「通常の404」との違いをわかりやすく解説
下の表は通常の404(正しい404)とソフト404、および関連するステータスの違いを整理したものです。
視覚的に比較すると理解しやすいです。
| 区分 | サーバーのHTTPレスポンス | ユーザーの見え方 | 検索エンジンからの扱い |
|---|---|---|---|
| 正しい404 | 404 Not Found(または 410 Gone) | 「ページが見つかりません」等の専用ページ | 存在しない と判断、通常はインデックスから除外される |
| ソフト404 | 200 OK(表示は「見つからない」等) | 見た目は404風だがレスポンスは正常 | 検索エンジンが自動判定し、除外(インデックスしない)や誤認が起こることがある |
| 正常ページ | 200 OK | コンテンツが存在し、価値がある見え方 | インデックス対象(コンテンツ次第) |
| リダイレクト | 301/302 | 別ページへ転送される | 適切にリダイレクトすれば評価を移動可能 |
実例での違い
- 正しい404:削除済みの商品ページにアクセス → サーバーが
404を返し、専用の404ページを出す。 - ソフト404:削除済みの商品ページにアクセス → ページ本文に「見つかりません」と表示されるが、
200を返している(Search Consoleで「ソフト404」と検出される可能性あり)。

なぜ対処が必要か(検索流入やクローラ行動への影響)
ソフト404を放置すると複数の問題が重なり、サイト全体の検索パフォーマンスに悪影響を与える可能性があります。
主な理由と影響をわかりやすく列挙します。
インデックスの乱れ・不要ページの混入
ソフト404は検索エンジンに「どのページを残すべきか」を混乱させます。
- 結果として、価値あるページが正しく評価されない、あるいは無価値なページがインデックスに残る可能性があります。
- インデックスが無駄に増えると、重要ページのクロール頻度が下がることもあります。
クローラーのリソース(クロールバジェット)浪費
大量のソフト404があると、検索エンジンのクロールが無駄なURLに時間を使ってしまいます。
- 特に大規模サイトでは、クロール予算を浪費することで重要ページの更新がクロールされにくくなります。
検索表示(SERP)とユーザー体験への悪影響
- ユーザーが検索結果からサイトに来て「中身が無いページ」に当たると直帰率が上がり、間接的に評価に影響することがあります。
- また、Analytics上でページの挙動が通常ページと混同され、正確な解析が難しくなります。
サイトの信頼性・運用負荷の増加
- サイト内部で「存在しないはずのページが生きている」状態は、運用ミスや設定不備のサインです。早めの把握と対処が運用上の安心につながります。
一目でわかる「優先アクション」チェックリスト(初心者向け)
- ステータス確認:
curl -Iまたは開発者ツールでHTTPステータスを確認。 - Search Console確認:サーチコンソールに「ソフト404」通知が来ていないかチェック。
- 表示内容確認:ページに「見つかりません」等の文言があり、かつステータスが
200なら要対応。 - 対応方針決定:ページが完全に消えたなら
404/410、別ページへ移すなら301、検索に出したくないならnoindexを検討。 - 修正後の検証:修正後、Search ConsoleのURL検査で再クロールを申請し、ステータスの反映を確認する。
まとめ(要点)
- ソフト404は「見た目は消えているのにレスポンスが正しくない」問題で、放置するとインデックスの混乱・クロール浪費・UXの低下などにつながります。
- まずはHTTPステータスを確認し、状況に応じて正しいステータスの返却・リダイレクト・コンテンツ改善・noindex のいずれかで対応することが重要です。✅✨
ソフト404が発生する代表的な要因
以下ではそれぞれの原因がどのようにソフト404につながるのか、見つけ方(検出方法)、そして具体的な対処案を初心者向けに丁寧に解説します。
本来は404にすべきページで正しいステータスが返っていないケース
何が起きているか(要点)
ユーザーにとっては「ページが存在しない」ことが明らかなのに、サーバーが 200 OK を返してしまっている状態。検索エンジンはステータスで判断するため、誤認識が生じます。
検出方法
- ターミナルで
curl -I <URL>を実行してステータスを確認。200が返っていて本文が「見つかりません」なら要注意。 - Search Console で「送信された URL はソフト404のようです」の通知を確認。
- サイト内の削除済みコンテンツ一覧(例:商品削除後のURL)をチェック。
対処方法
- 該当ページが永久に存在しないなら、サーバー側で
404 Not Foundまたは410 Goneを返すように設定する。 - 短期的にページを残したいなら、明確にコンテンツを表示させるか、301リダイレクトで関連ページに誘導する。
- 修正後はSearch Consoleで再検証をリクエストする。🔁
コンテンツが薄い・重複・価値が低いページ
何が起きているか(要点)
ページ自体は存在しているが、中身(テキスト量・独自性・有益性)が乏しく、検索エンジンが「インデックスに値しない」と判断してソフト404扱いにすることがあります。
検出方法
- ページの文字数や主要コンテンツ(見出し、本文、画像キャプション)を確認。本文がほとんど空、あるいはテンプレートだけ、という場合が該当。
- 同一サイト内・他サイトとの重複を確認する(簡易的には検索窓に本文の一部を入れて確認)。
- Search Console のカバレッジや「重複しています」系のエラーを確認。
対処方法
- コンテンツの質を上げる:独自情報・具体例・構造化(見出し・箇条)を追加する。✍️
- 重複ページは統合するか、明確な正規ページに
rel="canonical"を設定する。 - 本当にインデックス不要なら
noindexを設定して管理する。
ページ内リソースやスクリプトが読み込めない/レンダリング失敗
何が起きているか(要点)
ページは 200 を返すが、主要コンテンツがJavaScriptで生成される、あるいは外部リソースがブロックされていて、検索エンジンがレンダリングしたときに本文が空に見える(=ソフト404判定)。
検出方法
- ブラウザの開発者ツール(Network / Console)でエラーを確認(リクエストが 404/500 になっていないか、CORSエラー等)。
- Search Console の「URL検査」で「レンダリング結果」を確認し、検索エンジンが見たときにコンテンツが表示されているかチェック。
- サーバーログでリクエスト時の返却内容(レンダリングに必要なAPI呼び出しのステータス)を確認。
対処方法
- SSR(サーバーサイドレンダリング)やプリレンダリングを導入して、クローラーに静的なHTMLを返す。
- 外部APIやCDNの応答を安定させ、遅延やエラーが出ないよう最適化する。
- JavaScript依存の表示なら、重要な本文は初期HTMLに含めるよう改修する。⚙️
サーバー/設定ミス(.htaccessやPHP設定等)
何が起きているか(要点)
リライトルールやフレームワークのルーティング、.htaccess、PHPのエラーハンドリングなどの設定ミスで、本来返すべきステータスが正しく返らない。
検出方法
- サーバーのエラーログ/アクセスログを確認。内部で
500や403が起きていないか、または全てのリクエストがフロントコントローラーに流れて200で返されているかをチェック。 - 環境をローカルに再現して、設定変更の影響をテスト。
.htaccessのルールや Nginx のtry_files設定などをレビュー。
対処方法
- 具体的には
.htaccess・Nginx 設定・フレームワークの例外処理を修正し、存在しないURLには正しいステータスを返すようにする。 - 自動生成ページ(テンプレートで空のページを出す)を避ける。
- デプロイ前にステータステストを組み込む(CIでランダムURLチェック等)。
検索エンジン側の誤判定や自動判別の限界
何が起きているか(要点)
サーバー側で問題が見当たらないのに、検索エンジンが独自の基準で「このページはソフト404だ」と判断することがあります。判定はブラックボックス的な要素もあるため「誤判定」に見えるケースがあります。
検出方法
- Search Console のメッセージで「ソフト404」ときた場合に、サーバー応答やページのレンダリングを確認しても不整合がないかを確認。
- 複数のツールでレンダリング結果を比較(自社のレンダリング vs Google のレンダリング)。
- 変更を加えた後、Search Console で再申請して挙動が変わるかを観察。
対処方法
- まずは 可能な技術的問題を全て潰す(ステータス、レンダリング、コンテンツ量等)。それでも改善しない場合は、コンテンツの明確化(見出しや本文に意図を示す)や 構造化データ を追加して、検索エンジンにページの価値を伝える。
- 必要なら Search Console の「インデックス登録をリクエスト」で再評価を申し込み、経過を観察する。⏳
因果と対策の早見表
| 原因 | こうなる理由(簡潔) | すぐにできる確認 | 優先対応(1〜2行) |
|---|---|---|---|
| 本来は404だが200を返す | サーバーが不適切に200を返すため、検索が混乱 | curl -I / Search Console通知 | 404/410返却、または301で整理 |
| コンテンツが薄い・重複 | クローラが価値無しと判断 | ページ文字数・重複検索 | コンテンツ強化 or 統合 / noindex |
| リソース読み込み失敗 | レンダリング時に本文が消える | 開発者ツールのNetwork / URL検査 | SSR/プリレンダリング or リソース修正 |
| サーバ設定ミス | ルールで誤ったレスポンスが返る | サーバログ / 設定ファイル確認 | .htaccess/Nginx/フレームワーク修正 |
| 検索エンジンの誤判定 | 自動判定のブラックボックス要因 | Search Consoleでの差異確認 | コンテンツ明確化+再申請 |
最後に:優先順位の目安(初心者向け)
- まずステータス確認(
curl -I/ URL検査)→ これで「本来404で200を返しているか」を確定する。 - レンダリング確認(Browser DevTools / URL検査のレンダリング結果)→ JS・リソース問題を発見。
- コンテンツの質チェック(本文の有無、文字数、重複)→ 改善が必要なら優先的に強化。
- サーバ設定・ログ確認→ 明らかに設定ミスがあれば即修正。
- Search Consoleで再検証→ 修正後にインデックス申請して反映を待つ(状態変化を追跡)。
チェックリスト(コピペで使える)
curl -Iでステータスを確認した ✅- Search Consoleの該当通知を確認した ✅
- URL検査でレンダリング結果を確認した ✅
- ページに十分な本文・独自性があるか確認した ✅
- サーバーのエラーログ/アクセスログを確認した ✅
発生箇所の見つけ方(診断手順)
ここではソフト404を見つけるための実務的な手順を、初心者でも追えるように段階ごとに説明します。
各手法ごとに「何を確認するか」「具体的操作例」「見つかったときの第一アクション」を示します。🔍
サーチコンソールのインデックスレポートで確認する方法
何を確認するか(要点)
Search Console のカバレッジ(またはインデックス)レポートで「除外」や「エラー」の項目に ソフト404 が出ていないかを確認します。通知(例:該当URLがソフト404のようです)も要チェック。
手順(初心者向け)
- Search Console にログインする。
- 対象サイトを選択 → 「カバレッジ」または「インデックス カバレッジ」セクションを開く。
- 「除外」や「エラー」一覧を確認し、“ソフト404” や “Submitted URL seems to be a Soft 404” のようなエントリを探す。
- 該当のURLをクリックして詳細を確認し、URL検査(Inspect URL) を実行して「クロールされたページのスクリーンショット」や「HTTPレスポンス」を確認する。
ここで見るべきポイント
- Search Console上で該当URLに対してどのステータス(Googleが見た結果)を報告しているか。
- 「問題を修正しました」ボタン(ある場合)や「インデックス登録をリクエスト」機能の利用可否。
見つかったときの第一アクション
→ URL検査で表示された「レンダリング結果」と実際のページの表示(ブラウザ)を突き合わせ、技術的な不整合(200なのに中身がない等) がないか確認する。
URL検査やデベロッパーツールでのレンダリング確認
何を確認するか(要点)
ブラウザ(開発者ツール)や Search Console の URL 検査で、検索エンジンが見たときにページが正しく表示されているか(=レンダリングできているか)を確認します。JavaScriptで生成されるコンテンツの欠落が原因でソフト404になることが多いです。
手順(ブラウザ)
- 対象URLをブラウザで開く。
- 開発者ツール(F12)を開き、Network タブを選択。
- キャッシュを無効化(Disable cache)してページを再読み込み。
- Network の最初の「document」リクエストを確認し、Status(HTTPコード)と Response の中身(HTML)を見る。
- Console タブで JavaScript エラーやリソース読み込みのエラーが出ていないか確認する。
手順(Search Console の URL 検査)
- URL 検査を実行 → 「ライブURLのテスト」または「レンダリング結果(Crawled page)」を確認 → Googleがレンダリングした HTML とスクリーンショットを比較。
確認ポイント
- ページ本文(主要な見出しや段落)がレンダリング結果に含まれているか。
- 主要なリソース(API応答、画像、CSS、JS)が 200 で返っているか。
- JavaScript 実行エラーがないか。
見つかったときの第一アクション
→ 主要コンテンツがJSで生成されていてクローラーに見えない場合は SSR/プリレンダリング を検討するか、重要テキストを初期HTMLに埋める。
サーバーログ/アクセスログを使った追跡
何を確認するか(要点)
サーバーのアクセスログ(およびエラーログ)で該当URLのリクエスト時にどのステータスコードが返っているか、内部エラーやプロキシ経由で不正な応答が発生していないかを調べます。
代表的な操作例(コマンド)
- 直近の該当URLを追う(tail + grep)
# Apache/Nginx のアクセスログ例(パスは環境により異なる)
tail -n 200 /var/log/nginx/access.log | grep "/path/to/page"
- 該当URLのステータスだけ抽出(簡易)
grep "/path/to/page" /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c
($9 は一般的なログフォーマットでステータスコードが入る位置です。環境により異なるのでログフォーマットを確認してください。)
チェックポイント
- 同一URLで200が大量に返っているが実際には「コンテンツ無し」といった表示があるか。
- 500系エラーやタイムアウトが発生していないか(断続的な読み込み失敗が原因でレンダリングが空になる場合がある)。
- リダイレクトチェーンやプロキシ経由の挙動(意図せず 200 を返す仕組みが流れていないか)。
見つかったときの第一アクション
→ サーバー側で該当ルートのハンドラ、エラーハンドリング、ミドルウェアの挙動をレビューして正しいステータスが返るよう修正。
外部ツールや手動チェック(ステータスコード一覧の参照)
何を確認するか(要点)
複数URLを効率的に調べたい場合や、クローラー視点での確認をしたい場合に外部ツール(サイトクロールツール)や、スクリプトで一括チェックします。また、よくあるステータスコードの意味を把握しておくと診断が速くなります。
代表的な外部ツール(例示)
- サイトスキャン・クローラー(※ツール名はここでは列挙しませんが、「サイト全体をクロールしてステータスを一覧化」できるものが便利です)
- コマンドラインの一括チェックスクリプト(下記参照)
一括チェックの簡単な例(bash)
# urls.txt に検査したいURLを1行ずつ並べる
while read url; do
code=$(curl -s -o /dev/null -w "%{http_code}" "$url")
echo "$code $url"
done < urls.txt
改良版(最終URLやリダイレクトも確認)
curl -I -L -s -o /dev/null -w "%{http_code} %{url_effective}n" "https://example.com/some-page"
ステータスの簡易参照表(診断用)
| ステータス | 簡単な意味(診断時の注目点) |
|---|---|
| 200 | 正常応答。ただし中身が空ならソフト404の疑い |
| 301/302 | リダイレクト。遷移先が適切か確認 |
| 404/410 | 正しく「存在しない」としている(問題なし) |
| 500系 | サーバエラー。レンダリング失敗の原因になり得る |
| 204 | 内容なし。コンテンツが存在しないことを示す(注意) |
見つかったときの第一アクション
→ 一括で200だが中身が薄いURLが見つかったら、優先順位を付けて(重要なパスから)個別確認 → コンテンツ追加 or ステータス修正。
診断ワークフロー(実務で使える短縮フロー)
- Search Console で通知確認 → ソフト404の一覧を取得。
- 該当URLを1つ選び、curl -I でステータス確認(
200なら詳査)。 - ブラウザの開発者ツールでレンダリング確認(Network/Console) → JSや外部リソースのエラー確認。
- サーバログを確認 → ステータスの一貫性や内部エラーをチェック。
- 必要なら一括スクリプトで同類URLを洗い出し、優先的に対応。
診断時の注意点(初心者が陥りやすいミス)
- ブラウザ表示だけで判断しない:見た目でコンテンツがあるように見えても、検索エンジンが見るレンダリング結果は異なる場合があります。
- キャッシュの影響:検査時はキャッシュ無効化で再読み込みする。
- ログのフォーマット違い:サーバログでのフィールド位置(ステータスがどのカラムか)は環境ごとに違う。自分のログフォーマットを確認する。
- リダイレクト先の確認を忘れない:301 や 302 の場合、遷移先が正しく設定されているか必ず検証する。
最後に:すぐ使えるチェックリスト(コピペ用)
- Search Console にソフト404通知があるか確認した ✅
curl -I <URL>でステータスを確認した ✅- ブラウザ開発者ツールで Network/Console を確認した ✅
- サーバーのアクセスログで該当URLの履歴を調べた ✅
- 必要に応じて一括スクリプトで同種URLを抽出した ✅
状況別の対処法(優先度をつけて実行)
ここでは発見されたソフト404に対して、状況別に優先度をつけて実行する対処法を具体的かつ初心者向けに説明します。
各項目は「どんな状況か」「まず何をするか」「実際の手順例(コマンドやコード)」「注意点」を分けて解説します。
ページが実際に存在しない場合:正しいステータス(404/410)を返す
どんな状況か
削除済みや元から存在しないページにアクセスしたとき、ブラウザやユーザーには「見つかりません」と表示されるがサーバーが 200 OK を返している状態。
まずやること(優先度:高)
- 該当URLが本当に存在しないことを確認し、サーバーが正しいHTTPステータスを返すようにする。
手順例
- Apache (.htaccess) での例(存在しない場合に 404 を返す仕組みはフレームワークごとに異なりますが、簡易例):
# 例: 404 用のカスタムページを指定
ErrorDocument 404 /404.html
- PHPで明示的に
404を返す例:
http_response_code(404);
include '404.html';
exit;
- 永久に削除されたコンテンツなら
410 Goneを返すのも有効:
http_response_code(410);
echo "このページは削除されました。";
exit;
注意点
- 404/410 を返すことで検索エンジンはそのURLをインデックスから削除しやすくなります。
- カスタム404ページはユーザビリティ(検索窓、サイト内リンク)を考慮して作ると良いです。🔧

別の場所へ移動した場合:301リダイレクトで正しく誘導する
どんな状況か
ページの内容を別URLへ移動した、もしくは類似ページが存在している場合。旧URLにアクセスが来るが中身がない/薄い場合は、適切に誘導することでユーザーと検索エンジンの双方に優しい対応ができます。
まずやること(優先度:高)
- 永続的な移動なら 301(永久リダイレクト) を設定する。
手順例
- .htaccess(Apache)での 301 設定:
Redirect 301 /old-page.html https://example.com/new-page/
- Nginx の例:
rewrite ^/old-page.html$ https://example.com/new-page/ permanent;
注意点
- 適切なリダイレクト先を選ばないと評価が分散したり、ユーザーの混乱を招きます。コンテンツの内容が最も近いページを選ぶのが原則。
- 大量にリダイレクトを設定する場合はチェーン(旧→中間→新)になっていないか確認する。🔗

検索エンジンから除外したい場合:noindex やサイトマップの更新
どんな状況か
一時的にインデックスさせたくないページや、管理上インデックス対象外にしたいページ(管理画面や会員専用ページなど)がある場合。
まずやること(優先度:中〜高)
- ページヘッダに
noindexを設定するか、サイトマップから該当URLを削除して Search Console に反映させる。
手順例
- HTML の meta タグで noindex を指定:
<meta name="robots" content="noindex, nofollow">
- サイトマップ(sitemap.xml)から該当URLを削除し、Search Console でサイトマップを再送信する。
注意点
noindexを付けてもページは 200 を返すことがある — noindex は「検索結果に表示させない」命令で、ソフト404対策の一つ。ただし「恒久的に削除したい」なら 404/410 の方が明確。- robots.txt は「クロール禁止」=クローラーがページを見に来ない可能性があり、誤解を招くことがあるので使い分けに注意。🚦
重複や薄い内容の場合:コンテンツの強化・統合・canonical の活用
どんな状況か
ページは存在するが内容が薄い、あるいはほぼ同一の内容が複数URLに存在するため、検索エンジンが「価値が低い」と判断してソフト404判定されるケース。
まずやること(優先度:中)
- 重要なページに情報を集約するか、別ページと統合してコンテンツの価値を上げる。統合できない場合は
rel="canonical"を使って正規URLを指定する。
手順例
- canonical タグの設定(head 内):
<link rel="canonical" href="https://example.com/preferred-page/" />
- コンテンツ強化のヒント:
- 実例や図表を追加する
- 専門的な解説や独自データを入れる
- 見出し構造(H1〜)を整理して本文を読みやすくする
注意点
- Canonical は「重複を解消するためのシグナル」で、強制ではありません。ユーザーにとって価値ある単一のページを作るのが最優先。📚
リソース読み込み問題:表示速度・レンダリング改善(遅延読み込みや画像最適化等)
どんな状況か
ページは本来コンテンツを持つが、JavaScriptでレンダリングしているためクローラーがレンダリングできず空に見える、あるいは外部リソースが404/500で本文が生成されないケース。
まずやること(優先度:高)
- クローラーに対して確実にコンテンツが返る形にする(SSR・プリレンダリング、重要テキストは初期HTMLに含める等)。
対策例
- サーバーサイドレンダリング(SSR) や プリレンダリング を導入する。
- 画像最適化(WebP、適切なサイズ)、遅延読み込み(lazy loading)を導入して初期表示を軽くする。
- 外部APIのタイムアウトやエラーハンドリングを実装して、リソース不足でも本文を表示できるようにする。
小さな改善コマンド例
- 重要リソースに
link rel="preload"を使って優先的に読み込ませる:
<link rel="preload" href="/main.css" as="style">
注意点
- JS 依存のSPAでは特に発生しやすいので、検索エンジン向けレンダリングを優先する設計を検討する。⚙️
サーバー設定の誤り:.htaccess/PHP設定/レスポンスヘッダを修正する
どんな状況か
リライトルールやフロントコントローラー、エラーハンドラの設定ミスにより、正しいステータスやヘッダが返らないケース。特にフレームワーク導入サイトで起きやすい。
まずやること(優先度:高)
- サーバ設定・アプリ設定を見直し、存在しないURLに対して適切なステータスが返ることを保証する。
チェックポイントと修正例
.htaccess/ Nginx のtry_files設定を確認(ファイルが無い場合にindex.phpに流しすぎていないか)。- PHP のエラーハンドリングで例外がキャッチされ
200が返っていないかチェックする。 - レスポンスヘッダに
Content-TypeやCache-Controlが適切かを確認する。
例:Nginx の try_files の注意点
# NG例: すべて index.php に流すと不正に 200 が返ることがある
try_files $uri $uri/ /index.php?$query_string;
# 修正案: 存在しない場合は 404 を返すルールも検討
注意点
- サーバ設定は環境依存なので、ステージング環境で動作検証してから本番に適用する。🔁
全体優先度(まとめ表)
| 優先度 | 対処 | 理由 |
|---|---|---|
| 高 | 本来は存在しない → 404/410 を返す / リダイレクト(重要) | 検索エンジンのインデックス整理に直結するため最優先 |
| 高 | レンダリング/リソース問題の修正(SSR 等) | クローラがページを正しく見られるようにする |
| 中 | noindex / サイトマップ更新 | インデックス制御だが、根本解決ではない |
| 中 | コンテンツ強化・canonical | 長期的な価値向上に重要 |
| 中〜低 | サーバ設定の細かい最適化 | だが設定ミスは高影響なので早めに修正推奨 |
実行後の確認(必ず行うこと)
- 修正後、
curl -I <URL>でステータス確認。 - Search Console の URL検査 で「ライブテスト」→「インデックス登録をリクエスト」して反映を促す。
- サイトマップを更新している場合は再送信する。
- 変更が大量であればログ監視で問題が再発していないか追跡する。
短いチェックリスト(コピペ用)
- 対象ページは「消す・移す・隠す・直す」のどれに当たるか決めた ✅
- 404/410 or 301 or noindex / コンテンツ強化 のどれを実施したか ✅
- 修正後に
curl -Iと Search Console で確認した ✅ - ログで副作用(500エラーやリダイレクトループ)が出ていないか確認した ✅
対処後のチェックと Search Console での確認手順
対処を行ったら、必ず結果を検証して「問題が解消されたか」「副作用が出ていないか」を確認します。
ここでは Search Console を中心に、サイトマップ・サーバーログまで含めた実務的な手順を初心者向けに丁寧に解説します。
修正後のインデックス再申請(URL検査→検証リクエスト)
目的(なぜやるか)
修正したページを検索エンジンに再クロール・再評価してもらうことで、Search Console 上の「ソフト404」表示やカバレッジの除外状態が解消されるかを早めに確認します。
手順(初心者向け)
- Search Console にログインし、対象プロパティを選択。
- 左メニューの「URL検査(Inspect URL)」に修正済みの URL を入力。
- 表示される詳細で 「インデックスに登録されていません」等の旧ステータスを確認。
- 「ライブテストを実行(Test live URL)」を押して、今のステータスやレンダリング結果を取得。
- レンダリングのスクリーンショットと HTTP レスポンス(ステータスコード)が重要。
- 問題が解消されているなら、「インデックス登録をリクエスト(Request indexing)」 を実行する。
- リクエスト後は、Search Console の該当レポートで更新状況を追跡する。
確認ポイント
- ライブテストで返る HTTPステータスが想定どおり(例:404を返すなら404、正常ページなら200) であるか。
- レンダリング結果に主要コンテンツが含まれているか(Search Console のスクリーンショットで確認)。
- 「インデックス登録をリクエスト」後に Search Console の該当 URL の状態が 「インデックス登録済み」 に変わるかを確認。
短いチェックリスト
- ライブテストでステータス確認 ✅
- レンダリング結果に主要コンテンツあり ✅
- インデックス申請を実行 ✅
サイトマップの反映確認と不要URLの除去
目的(なぜやるか)
サイトマップはクローラーへの「優先的に知ってほしいURL一覧」です。修正で削除したり noindex にした URL がサイトマップに残っていると、Search Console と実際の状態が乖離し、再発の原因になります。
手順(初心者向け)
- sitemap.xml を開く(ルート直下や CMS が生成している場所)。
- 修正した URL がサイトマップに含まれていないか確認。
- 削除すべき URL が残っている場合はサイトマップを編集して行を削除する。
- Search Console の「サイトマップ」セクションへ移動 → 更新した sitemap.xml の URL を再送信(または同じものを再送信)。
- Search Console のサイトマップステータスを確認し、送信済み URL 数やエラーをチェック。
- 必要なら、robots.txt を確認してサイトマップのパスが正しく参照されているか確認。
確認ポイント
- サイトマップに noindex や 404 にした URL が含まれていないか。
- Search Console で「送信された URL」と「インデックスされた URL」の差異が過度に大きくないか。
- サイトマップ送信後に エラーが増えていないか を短期間でチェック。
運用ワザ
- CMS やビルドスクリプトで生成している場合は、自動的に noindex/404 を除外するロジックを入れておくと楽です。🛠️
短いチェックリスト
- sitemap.xml を更新(不要URLを削除) ✅
- Search Console に再送信 ✅
- サイトマップの送信結果(エラー/警告)を確認 ✅
サーバーログで改善が反映されているか追跡
目的(なぜやるか)
ブラウザや Search Console の表示と並行して、サーバレベルで正しいステータスが実際に返っているかをログで確実に確認します。これで「表面上は直ったが内部で別の挙動が起きている」ケースを見つけられます。
手順(初心者向け)
- サーバにログイン(またはホスティングの管理画面でログをダウンロード)。
- 該当 URL に関するアクセスログを抽出する。基本的なコマンド例(Nginx/Apache の一般的なログ位置を仮定):
# 該当URLのログを抽出(last 200行から)
tail -n 200 /var/log/nginx/access.log | grep "/path/to/page"
# ステータスコード別の集計(簡易)
grep "/path/to/page" /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c
- 直近のリクエストで期待するステータス(例:404/301/200)が返っているか確認。
- エラーログに 500 系やタイムアウトの痕跡がないかもチェック。
- 変更前と変更後でログの違いを比較し、期待したレスポンスが増えているかを確認する。
自動監視の提案
- ログ監視ツール(例:ログシッパー→ELK/Datadog 等)を導入できれば、ステータスの急増や特定URLの異常をアラートで受け取れます。小さなサイトでも簡易スクリプトで定期チェックを行うと安心です。
確認ポイント
- 意図した日時以降、該当URLのステータスが期待通りに変化しているか(例:以前は200で、修正後は404になっている)。
- 同時に発生している 500系エラーやリダイレクトループ が無いか。
- 大量のクローラーアクセスや再試行がないか(Search Consoleで再クロールをリクエストした直後はアクセスが増えますが、それ以外に増えているなら要調査)。
短いチェックリスト
- 該当URLのアクセスログを抽出してステータスを確認 ✅
- エラーログに500系が出ていないか確認 ✅
- 変更前後で期待する変化が出ているか比較 ✅
全体のフロー(まとめ表)
| ステップ | 主な作業 | 成果物/確認事項 |
|---|---|---|
| 1 | URL検査でライブテスト → インデックス再申請 | ステータスとレンダリングが期待どおりか |
| 2 | sitemap.xml を更新 → Search Consoleへ再送信 | サイトマップに不要URLが含まれないこと |
| 3 | サーバログでレスポンスを確認 | 実際に期待するHTTPステータスが返っていること |
| 4 | 継続監視(数回チェック) | 再発や副作用が無いことを確認 |
最後に:実務で使えるミニチェックシート(コピペ用)
- [ ] Search Console:対象URLを「URL検査」でライブテスト → レンダリング・ステータス確認
- [ ] Search Console:修正済なら「インデックス登録をリクエスト」実行
- [ ] sitemap.xml:不要URLを削除 → Search Console に再送信
- [ ] サーバログ:該当URLのステータスが想定どおりになっているか確認(
curl -Iとログの両方で) - [ ] ログ監視:500系やリダイレクトループが発生していないか定期チェック
状況別の具体例(よくあるケースと対処フロー)
ここでは実際に現場でよく見る3つのパターンを取り上げ、それぞれ「何が起きるか」「優先して取るべき対応」「実務で使える手順・コマンド例」を具体的に示します。
初心者でも実行できるように、チェックリストや短いスクリプト例も付けます。
削除済み商品ページ(ゼロ件カテゴリ)の扱い
状況イメージ
在庫切れや終売で「一覧が0件」になったカテゴリページや、既に削除した商品の個別ページにアクセスが残っている。見た目上は「該当商品がありません」と表示されるが、ステータスは 200 のまま、Search Consoleでソフト404通知が来るケース。
優先対策(判断フロー)
- そのURLを保持する必要があるか?
- 不要(古い・意味が無い) →
410(または404)で削除を明示。 - 代替ページがある →
301で最も関連性の高いページへリダイレクト。 - 情報は保持したいが検索から除外したい →
noindex(ただしクローラーで確認できる状態にする)。
- 不要(古い・意味が無い) →
実務手順(短期)
- まず
curl -Iでステータス確認:
curl -I https://example.com/product/old-item
- 永久削除なら(PHP例):
http_response_code(410);
include '410.html';
exit;
- 関連ページへリダイレクト(.htaccess 例):
Redirect 301 /product/old-item https://example.com/category/related/
運用ワザ(中長期)
- 「ゼロ件カテゴリ」は自動で
noindexにするか、テンプレート側で代替案(おすすめ商品/検索窓)を表示してページを有用に保つ。 - 商品削除時に自動でリダイレクトまたは 410 を設定するワークフロー(CMSのフック)を用意する。
短いチェックリスト
- [ ] 対象URLが本当に不要か判断した
- [ ] 404/410 or 301 のいずれかを実装した
- [ ] sitemap.xml から該当URLを除外した
- [ ] サーバログで修正後のステータスを確認した
自動生成コンテンツが原因で大量発生した場合の対処
状況イメージ
テンプレート+大量データで自動生成したページ群(例:微差のキーワードページ)が「薄いコンテンツ」として検索エンジンに評価され、結果的に多数がソフト404扱いに。ページ数が多いため手作業では対応が難しい。
優先対策(一括処理フロー)
- パターン特定:URL設計(パスやクエリ)やテンプレ変数で共通パターンを見つける。
- 優先度付け:トラフィック・参照元・ビジネス価値で対象を絞る(重要ページから対応)。
- 方針決定(3択):統合して一本化/noindexで見えない化/404/410で削除。
- 一括実装:一括リダイレクトマップ、サーバ側のルール、またはバッチでステータスを切り替え。
- 監視・検証:Search Console とログで変化を追う。
便利な実務スクリプト(URL一覧からステータス抽出)
# urls.txt に大量のURLを用意しておく
while read url; do
code=$(curl -s -o /dev/null -w "%{http_code}" "$url")
echo "$code,$url"
done < urls.txt > statuses.csv
(出力をCSVにすればスプレッドシートで優先度付けが楽になります。)
一括リダイレクトの例(リダイレクトマップ生成)
- 大量リダイレクトは web サーバでマップを読み込ませるのが高速(Nginx の
mapや Apache のRewriteMap)。 - 小規模なら CI で
.htaccessを自動生成してデプロイする方法が現実的。
注意点(禁止・推奨)
- 禁止:問題のあるURLを robots.txt でただブロックしてしまうと、検索エンジンがそのページを再評価できず、状況が改善しないことがある。
- 推奨:まずはクローラがアクセスできる状態にして、
410/noindex/301のいずれかで明示的に扱いを変える。
短いチェックリスト
- [ ] 自動生成ページのURLパターンを特定した
- [ ] 重要度に応じて対応方針を決めた(統合/削除/除外)
- [ ] 一括処理スクリプトやリダイレクトマップを用意した
- [ ] Search Console とログで影響を監視した
SPA や JavaScript レンダリングで発生するパターン
状況イメージ
Single Page Application(React/Vue/Angular 等)やクライアント側で本文を組み立てるサイトで、検索エンジンのレンダリング時に主要コンテンツが取得できず「空のページ」に見えるためソフト404判定を受ける。
優先対策(レンダリング視点での対処)
- 確認段階:
curlで返ってくる HTML(初期HTML)と、ブラウザで見た最終表示が異なるか比較する。curl https://example.com/page→ 初期HTMLに重要なテキストがないなら問題の可能性大。
- 対応候補:
- SSR(サーバサイドレンダリング)/SSR化:サーバで最初のHTMLをレンダリングして返す。
- プリレンダリング:ビルド時に静的HTMLを生成する(静的ルートが多い場合有効)。
- 動的レンダリング(レンダラーを別途用意):クローラー用にプリレンダリングしたHTMLを返す(注意:実装と保守が必要)。
- 重要テキストのインライン化:最低限の本文や主要見出しを初期HTMLに含める(最短で効果が出る場合あり)。
検証方法(簡単)
curlで初期HTMLを取得 → 主要テキストが含まれているか grep で確認:
curl -s https://example.com/page | grep -i "主要な見出しの一部"
- Search Console の URL検査(レンダリング結果)で Google が見たスクリーンショットと比較。
実装のヒント
- Next.js / Nuxt / SvelteKit 等は SSR を比較的容易に導入できる。
- すぐに直せない場合は、特に検索から来る重要なページだけをプリレンダする戦略がコスト対効果高い。
- クライアントレンダリングのままにする場合は、構造化データ(JSON-LD)や meta 情報を初期HTMLに置くだけでも検索エンジンにページの意図を伝えやすくなる。
注意点
- 「動的レンダリング」でクローラーにだけ違うHTMLを返す場合は実装・監査を慎重に(検索エンジンのガイドラインに注意)。
- SSR導入はフロントエンドのアーキテクチャ変更が必要なので、重要ページから段階的に適用するのが現実的。
短いチェックリスト
- [ ]
curlとブラウザ表示を比較してレンダリング差を確認した - [ ] まず重要ページだけプリレンダする計画を立てた(最速改善)
- [ ] 長期的には SSR の採用を検討・試験した
- [ ] Search Console のレンダリング結果で改善を確認した
ケース別おすすめ早見表
| ケース | 最短でやること(即効) | 中期的な推奨対応 |
|---|---|---|
| 削除済み商品(ゼロ件) | 410 を返す or 301 リダイレクト | CMSフローで自動化(削除時の処理) |
| 自動生成ページ大量発生 | パターン特定→一括 noindex/410 で削減 | テンプレート見直し or コンテンツ統合 |
| SPA / JS レンダリング | 重要ページをプリレンダする | SSR化 or 安定した動的レンダリング |
最後に ─ 現場で使えるワンポイント
- 小さな変更をまず1ページで試す:大量変更は一度にやらず、ステージング→本番で段階的に。
- ログとサーチコンソールをセットで見る:Search Console 上で「直った」と出ても、サーバログで想定通りのステータスが返っているか二重確認を。✅
- 影響範囲が大きい場合はバックアップ&ロールバック計画を必ず用意。
予防と運用上のベストプラクティス
この章では、ソフト404を未然に防ぎ、発生してもすぐ検知・対処できる運用体制を作るための実践的なルールと手順を紹介します。
開発・編集・運用の3つの観点で分けて、チェックリストや設定例も載せます。「再発しない仕組み」を重視した内容です。
404や404代替ページの正しい実装ルール
目的: サーバー側でのステータス制御を明確にし、ユーザー体験を損なわずに検索エンジンへ正しいシグナルを送る。
実務ルール(開発者向け)
- 存在しないページは必ず 404/410 を返す
- 使い分け:一時的消失は
404、恒久削除は410を推奨。
- 使い分け:一時的消失は
- ユーザー向けのカスタムエラーページを用意する(ただしレスポンスは404のまま)
- 必須要素:検索窓、サイト内リンク(カテゴリ/トップ)、目立たない問い合わせリンク、おすすめコンテンツ。
- リダイレクトは最小限にし、内容の近いページへは
301を使う。チェーンを避ける。 - noindex は「検索に出したくないがクロールは許可する」手段として限定的に使用する(robots.txt と混同しない)。
- レスポンスヘッダとHTMLの整合性を確保する(例:HTTP 404 を返しつつ 200 の HTML を返さない)。
運用チェック(デプロイ時)
- ステージングで「存在しないURLに対して正しいステータスが返る」テストを自動化。
- デプロイパイプラインに ランダムURLステータスのスモークテスト を入れる(例:10件のランダムURLを curl でチェック)。
例:Nginx の簡易設定(error_page の扱い)
# 存在しない場合は /404.html を返すが HTTPステータスは404のままにする
error_page 404 /404.html;
location = /404.html {
internal;
root /var/www/html;
}
コンテンツ品質の基準を運用に組み込む(テンプレ・チェックリスト)
目的: 「薄い・重複したページ」が増えない運用ルールを編集ワークフローに組み込み、作成時点でソフト404の原因を排除する。
導入すべきポリシー(編集部向け)
- 公開前チェックリスト(必須)
- 最低文字数(例:本文 300〜500字以上)
- H1/H2 構造が適切か(見出しの重複がないか)
- 独自性の確認(他ページ・他サイトと明らかに重複していないか)
- 内部リンクがあるか(ナビゲーションへの導線)
- 画像や図表が適切に配置されているか(alt 属性含む)
- メタ情報(title, meta description)が記述済みか
- 構造化データが必要なら JSON-LD を追加しているか
- テンプレート化:カテゴリや用途ごとに「必須ブロック」をテンプレート化(例:レビュー記事は「評価」「特徴」「購入リンク」を必須フィールドにする)。
- 重複対応ルール:同一トピックで複数ページが生まれる場合は 統合orcanonical の判断を必須化。
- 公開後の品質KPI:直帰率、平均滞在時間、有効な内部リンク数をモニターし、閾値を超えたページはレビュー対象にする。
サンプル:公開前チェックリスト(コピー可)
- [ ] 本文文字数:__字(目安 300+)
- [ ] H1 がユニークか(サイト内に重複なし)
- [ ] 内部リンク:最低 1 本以上設置
- [ ] 画像の alt 設定済み/最適化済み
- [ ] canonical または noindex の適用判定済み
- [ ] メタタイトル / メタ説明 記入済み
- [ ] 構造化データ(必要な場合)実装済み
定期的な監査(Search Console+ログ+外部ツール)
目的: 早期に異常を検知して対処し、ソフト404の拡大を防ぐ監視体制を整備する。
監査の設計(頻度と対象)
- 毎日:Search Console のメール通知、サイト例外(500系)監視、ログ収集の自動ジョブ(簡易)。
- 週次:Search Console のカバレッジ(除外/エラー)の差分レポートを確認。新規ソフト404が発生していないかをチェック。
- 月次:全サイトの「200だが本文が薄い」URLを抽出して上位N件をレビュー(自動スクリプトで文字数・内部リンク数を集計)。
- 四半期:アーキテクチャやテンプレートの見直し(大量発生の原因がテンプレートにある場合が多いため)。
監視・通知の実装例
- ログスクリプト(毎日 cron):アクセスログから
200のうち、レスポンスサイズや主要コンテンツが空のURLを抽出してCSV化。 - 簡易アラート(例):新規ソフト404通知が5件/日を超えたら Slack に投稿する自動化(Search Console API または監視ツール連携)。
- 外部ツール活用:サイトクロールツールで定期巡回し、ステータス一覧と「HTMLボディ長」を比較する(短いページを抽出)。
ログ例を使った簡易カウント(bash)
# access.log の $9 にステータスがある一般的なフォーマットを想定
grep "/path/pattern" /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c
監査レポートに含めるべき指標
- 新規に検出された「ソフト404」件数(前週比)
- サイト全体での
200に対する「本文が短い」URL の割合 - クロールエラー(500/timeout)の件数
- サイトマップ送信後の差分(送信URL数 ⇢ インデックス数)
推奨する運用体制
- 小規模サイト:週次の手動チェック+簡易 cron スクリプトでログを監視。
- 中〜大規模サイト:Search Console API とログモニタを連携させ、異常発生時に自動通知 → 運用チームで一次切り分け → 開発にエスカレーションの流れを作る。
まとめ:予防は「自動化」と「ルール化」が鍵
- 技術的対処(正しいステータスとレンダリング) を先に確立し、
- 編集ルール(テンプレ・公開チェックリスト) で薄いページが生まれないようにし、
- 監査自動化(Search Console+ログ+外部ツール) で早期発見→対応の流れを作る――これが再発を防ぐ近道です。
短い運用スタートチェックリスト
- [ ] デプロイ前にステータスチェックを自動化した ✅
- [ ] 公開テンプレに品質チェックリストを組み込んだ ✅
- [ ] Search Console とサーバログの定期監査をスケジュールした ✅
よくある質問
以下は初心者がよく迷う点を短く・現場向けにまとめたFAQです。
判断基準と具体的な次の一手を示します。
「通知が来たが放置してよいか?」の判断基準
結論:一概に放置は推奨しないが、対応の優先度はケースによる。
優先度を決めるポイント(チェックリスト)
- 影響範囲:通知は単一URLか大量発生か?(大量なら即対応)
- ビジネス価値:該当ページは集客や売上に関係あるか?(関係ある→優先)
- 技術的原因の有無:200で「中身が空」か、サーバエラーやJSレンダリングの問題か?
- トラフィック状況:該当URLに流入があるか(Analyticsで確認)
簡易判定表
| 判定条件 | 放置してよいか | 推奨アクション |
|---|---|---|
| 単一の低トラフィック&管理用ページ | 放置可(低優先) | noindex検討/次回監査で対応 |
| 複数 URL または高トラフィック | 放置不可(高優先) | 直ちに原因調査→修正 |
| 自動生成で大量発生 | 放置不可(最優先) | パターン特定→一括対処 |
初心者向け即効アクション
- Search Console で該当URLを確認。
curl -I <URL>でステータスを確認。- トラフィックがない低価値ページなら
noindexまたは410を検討。 - 重要ページならレンダリング/ログ確認をして技術的原因を潰す。🔧
ステータスが200でも問題になる理由
要点:HTTPステータスだけが“正常”でも、検索エンジンやユーザーの見え方が「空」なら問題になる。
なぜ問題か
- 検索エンジンの誤判断:見た目が「中身なし」だとインデックスされない・除外される可能性がある(=ソフト404)。
- クロール予算の浪費:無価値ページにクローラが時間を使い、重要ページのクロールが減る。
- 解析データのノイズ:Analyticsで「200なのに中身が空」のページが計測されるとKPIが歪む。
- ユーザー体験の低下:検索結果から来たユーザーが期待した情報に到達できず離脱率が上がる。
具体例
- 商品が削除され「在庫なし」と表示しているが
200→ Google が「中身なし」と判断してインデックス除外することがある。 - SPAで本文をJSで挿入しているが初期HTMLに本文がない → クローラが空と判断する場合がある。
簡単にできる確認コマンド
curl -I https://example.com/suspect-page # ステータス確認
curl -s https://example.com/suspect-page | wc -c # HTML のバイト数(極端に小さければ要注意)
対処の方向性
- 本当に存在しないなら:404/410 を返す。
- インデックスさせたくないなら:noindex を付ける(ただしクローラから見える状態で)。
- クローラ向けに本文が見えるようにする:SSR/プリレンダ or 重要テキストを初期HTMLに含める。
対処しても通知が消えない場合の考え方
結論:通知が消えない理由は複数あり、順を追って検証するのが近道。
考えられる原因と対処(優先度順)
- Search Console の再検証待ち/遅延
- 対処:URL検査で「インデックス登録をリクエスト」を実行し、数日〜数週間の経過を監視。
- 修正が不十分(見かけ上は治ったがクローラからは見えていない)
- 対処:Search Console のライブテストで「Google が見たレンダリング」を確認。ステータスやスクリーンショットを比較。
- サイトマップや他箇所に同じURLが残っている
- 対処:sitemap.xml を更新し、古いURLを除去、再送信。
- robots.txt や noindex の誤設定でクローラが再評価できない
- 対処:robots.txt を確認(クロール禁止になっていないか)、noindex と robots の使い分けをチェック。
- 修正が反映される前にクローラが古い情報を参照している(CDNキャッシュ等)
- 対処:キャッシュをクリアし、CDN/プロキシの設定を確認。
- 再発(根本原因が残っている)
- 対処:ログ・アプリ挙動を詳細に確認し、パターン化(同一テンプレートや自動生成の有無)して恒久対応を行う。
検証手順(テンプレ)
curl -I <URL>と Search Console のライブテストを実行 → 両方でステータスとレンダリングを確認。- sitemap.xml と robots.txt を確認。
- サーバログで修正後のアクセスのステータスを確認(日時で絞る)。
- キャッシュ(CDN/ブラウザ)をクリアして再チェック。
- 必要なら、問題のURL群を一括でCSVにして優先対応リストを作る。
短いチェックリスト(再確認用)
- [ ] Live テストで Google のレンダリングが想定どおりになっている ✅
- [ ] sitemap.xml / robots.txt の整合性を確認 ✅
- [ ] サーバログで該当URLのステータスが修正後に変化しているか確認 ✅
- [ ] CDN やプロキシのキャッシュをクリアして再確認 ✅
最後に(ワンポイント)
- 通知=即パニックではない:まずは影響範囲と価値を評価し、優先度を決めること。
- 技術検証は必ず二重チェック(curl + Search Console)すること。
- 大量発生したらパターン化して一括対応(ボタン操作やスクリプトでの自動化が鍵)。⚙️
まとめ
この記事で学んだ重要ポイントを短くまとめます。
- 定義:ソフト404は「実質的に中身がないページに対して正しいエラーステータスが返されていない」状態。
- 主な原因:404設定漏れ、薄い・重複コンテンツ、JSレンダリング失敗、サーバ設定ミス、自動生成の弊害など。
- まずやること:Search Console と
curl -Iでステータスとレンダリングを確認。問題の範囲を把握して優先度を決める。 - 状況別対応の要点:
- 存在しないページ → 404/410 を返す。
- 移動したページ → 301 リダイレクト。
- インデックスさせたくない → noindex(かつサイトマップを更新)。
- JSレンダリング問題 → SSR/プリレンダリングや重要テキストの初期HTML化。
- 大量自動生成 → パターン特定→一括処理(統合/noindex/削除)。
- 運用対策:公開前チェックリスト、デプロイ時のステータス検査、自動監査(Search Console+ログ)の仕組み化で再発を防ぐ。
今すぐできる3つのアクション(初心者向け)
- Search Console の該当通知を開いて、URL検査でライブテストを実行。
curl -Iでステータスを確認し、200で中身が薄ければ優先度高。- 重要ページから1つずつ修正→Search Consoleでインデックス再申請→ログで反映確認 を行う。
最後に:ソフト404は放置しても即座にサイトが崩壊するわけではありませんが、積み重なると検索流入に確実に悪影響を与えます。まずは小さな一歩(ステータス確認)から着実に進めましょう。
