ソフト404テスト

存在しないページはステータス404で応答すべきです。ところが、代わりに200を返したり、訪問者を黙ってトップページに送ったりするサイトがたくさんあります。このテストは、存在しえないアドレスを2つサーバーに要求し、その応答を報告します。

その場で作った2つのアドレスをリクエストします。結果は保存しません。

例: github.com, wikipedia.org

どの応答にも、訪問者には見えない数字がついている

サーバーがリクエストに応答するとき、返事の1行目は3桁のステータスコードです。ページはその後に続きます。人はページを読み、ソフトウェアは数字を読みます。200は「ご要望のものはこちら」、301は「移動しました、あちらを見てください」、404は「このアドレスには何もありません」、410は「意図的に削除しました」という意味です。

ソフト404とは、この2つが食い違っている状態です。画面の文章はページがないと言っている、あるいは訪問者が黙ってトップページに着地しているのに、数字はずっと200のままです。すると検索エンジンは行き止まりのアドレスをクロールし続け、ときにはインデックスまでします。リンクチェッカーはリンク切れをすべて正常と報告します。サイトの一部がまるごと消えていても、死活監視は緑のままです。

テストがリクエストする内容と判定方法

当サーバーはランダムな文字で2つのアドレスを作るので、実在するページと一致することはありません。1つはフォルダー形式(/probe-check-k7m2x9qa4t/)、もう1つはファイル形式(/h3n8v2c5w7pq.html)です。2つの形を使うのは、ウェブサーバーがファイル形式のリクエストには自分で応答し、それ以外はCMSに回すことが多いからです。リダイレクトはたどり、各段階のコードをすべて記録します。サイトがHTTPSでまったく応答しない場合は、通常のHTTPで試します。

返ってきたもの判定
リクエストしたアドレスで404または410正常。
404ページで終わるリダイレクト警告。クローラーには伝わりますが、訪問者が入力したアドレスがアドレスバーで置き換わってしまいます。
リクエストしたアドレスで200ソフト404。
トップページ(/、/en、/index.php)へのリダイレクトで、200を返すソフト404。
ほかのページへのリダイレクトで、200を返すソフト404。
500以上エラー。未知のアドレスで何かがクラッシュしています。
401または403警告。たいていは、サイトより先にファイアウォールのルールが応答しています。

エラーページも評価する

コードが正しい場合、テストはエラーページのHTMLを読み、迷った訪問者に必要なものがあるかを確認します。

  • トップに戻る道。サイトのルートや各言語版のルートへのリンクなら、クリックできるロゴも含めて何でもかまいません。
  • 説明。タイトル、見出し、本文のどこかに「404」「not found」「存在しません」「申し訳ありません」のような言葉が必要です。ヘッダー、メニュー、フッターを除いた本文が15語未満なら、内容が薄いと記録します。
  • 検索欄。ない場合はひとことコメントします。不具合としては数えません。
  • <title>とlang属性。ブラウザーのタブやスクリーンリーダーが読み上げるものが必要です。
  • 重さ。HTMLが500 KBを超えると警告します。ボットは一日中、存在しないアドレスをリクエストしているからです。

nginx、Apache、IIS、LiteSpeedの標準ページは見分けて、そのように報告します。ロゴもリンクもないので、訪問者はサイトから離れてしまったと思います。2つのテストアドレスに明らかに違うページが返ってきた場合もお知らせします。ウェブサーバーとCMSがそれぞれ別のエラーページを持っているということです。

ソフト404を本物の404にする

Apache
ErrorDocument 404 /404.html。ローカルパスを指定してください。完全なURLを書くと、Apacheはリダイレクトを送り、最終的なコードが200になってしまいます。
nginx
error_page 404 /404.html;。404とパスの間に=200があれば削除してください。
WordPress
本体はもともと404を返します。「404をトップページにリダイレクト」のようなオプションを持つリダイレクト系やSEO系のプラグインを探して、オフにしてください。
シングルページアプリケーション
index.htmlへの一括書き換えは、何に対しても200を返します。未知のルートはサーバー側で404ステータスつきで描画するか、ホスティングに任せてください(NetlifyとCloudflare Pagesは、ルートの404.htmlを正しいコードで配信します)。

変更はターミナルでcurl -I https://example.com/no-such-pageを実行して確認できます。最初にステータス行が表示されます。

ルートの2つのランダムなアドレスでは、サイト全体をカバーできません。サブフォルダーに入れたショップ、フォーラム、ブログは動きが違うことがあるので、そこでも架空のアドレスを手でテストしてください。当サイトはスクリプトを実行しないため、JavaScriptで描画されるエラーメッセージはここでは見えません。また、実在するけれど中身が空のページ(検索エンジンはこれも「ソフト404」と呼びます)は、外からは検出できません。

よくある質問

ソフト404エラーとは何ですか?

人にはページがないと伝え、ソフトウェアにはすべて正常だと伝える応答です。たいていは2つの形のどちらかです:ステータス200で配信される「見つかりません」ページか、未知のアドレスからトップページへのリダイレクトです。

404ページをすべてトップページにリダイレクトするのはSEOに悪いですか?

悪いです。Googleはトップページへの一括リダイレクトをソフト404として扱うので、評価は何も引き継がれません。訪問者も、なぜそこに着いたのかわかりません。古いアドレスは、それに代わるページへ301でリダイレクトする場合だけにして、残りは404を返すようにしてください。

削除したページは404と410のどちらを返すべきですか?

どちらも正しいです。410 Goneは削除が意図的かつ恒久的であることを伝え、検索エンジンはそのアドレスを少し早めに外す傾向があります。そのページが本当に存在したのか確かでないときは404を使ってください。

404エラーは検索順位に悪影響がありますか?

ありません。存在しないアドレスはウェブではごく普通のことで、サイトの減点にはなりません。損になるのは、自分のページ内のリンクがそうしたアドレスを指している場合や、人気のあった古いページが後継ページにリダイレクトできるのに404を返している場合です。

実在するページでSearch Consoleがソフト404と報告するのはなぜですか?

Googleは、空に見える実在のページにもこのラベルを使います。商品のないカテゴリー、結果のない検索、内容の読み込みに失敗したページなどです。内容を追加するか、ページの存在理由がないなら404を返してください。

ページのステータスコードを自分で確認するには?

ブラウザーの開発者ツールを開き、「ネットワーク」タブを選んで再読み込みします。最初の行にコードが表示されます。ターミナルなら、curl -Iの後にアドレスを続ければ同じことができます。