PHPで404エラーコードを返す方法 【ソフト404問題の回避】

  • 投稿 : 2014-12-21

ソフト404問題

200(成功) - サーバーはリクエストを正しく処理しました。
404(見つかりませんでした) -サーバーは要求されたページを見つけることができません。
HTTP ステータス コード - ウェブマスター ツール ヘルプ

ブラウザで直接見えないですが、ページを取得するときに、
成功してら「200」
見つからなければ「404」
というコードを受け取っています。

ここで問題になるのが、
「このページは存在しません」とブラウザでは表示されてるのに、「200」を返してくるパターンです。

人間の目には、ページが存在しませんという情報を表示しているので問題ないのですが、
Googleの検索エンジン(コンピュータ)には、ページが存際する「200」と解釈されてしまうという問題です。

・削除するページを302リダイレクトで転送
・「このページは存在しません」というステータスコード200を返しているページを表示
というものだったのです。
はい。完璧なソフト404のできあがりです。
SEOにおける"伝える力"|CyberAgent SEO Information (サイバーエージェントSEO情報ブログ)

たとえば、上記のようなものです。

PHPで404エラーコード

<?php
header("HTTP/1.1 404 Not Found");
?>
<html>
<head>
<title>Error 404 Not Found</title>
</head>
<body>
<h1>ページが見つかりませんでした</h1>
</body>
</html>

PHPを使用しているのなら、上記のような方法で404を返すことが出来ます。
下の方に、表示したいHTMLをかけばOKだということです。

最初にheader()で「HTTP/1.0 404 Not Found」を設定しているのは良いのですが、次のheader() で「Location」指定をしているのが良くない。 これだと実際はステータスコードとして302(Moved Temporarily)が返されてしまいます。

しかもそのリダイレクト先にはページが存在するため、ステータスコード200(OK)が返されてしまいます。 これでは検索エンジンに「お、URLが一時的にこっちに変わったのね。」と間違って解釈されてしまいます。
PHPで正しく404エラーページにリダイレクトする方法 - colori

PHPでリダイレクトとかも併用する場合は、上記のことに気を付けてください。
最後に表示されるページが「404」を返さないとダメだというのがミソです。

HTTP ステータス コードの確認

View HTTP Request and Response Header

たとえば、上記のようなサービスで確認することが出来ます。

上記のPHPサンプルなら以下のようになります。


スポンサーリンク