404エラーのページをPHPのheader関数でリダイレクトするのは間違っている

WEBサイトの制作をしていると、誤ったURLを入力した場合にページが存在しない旨を伝えるページを表示することになると思う。

URLで指定したページが存在しないエラーのことを404エラーと言います。

(いや、言わないかな?)

ページが存在しない場合は、

  • 「ページが存在しないよ」と画面に表示させる
  • URLを変更したのならそちらにリダイレクトさせる

の2パターンの対応になると思います。

 

問題は前者の「ページが存在しないよ」と画面に表示させる場合です。

具体的に説明していきます。

404エラーのページをPHPでリダイレクトするのは間違っている

404エラーが何かについては今回の趣旨とは若干ずれるので後ほど解説します。

 

まず何が間違っているか。

それは、404エラーの場合に404ページへリダイレクトさせることです。

新しいページを作成したため古いページを削除し、古いページにアクセスがあった場合には新しいページへリダイレクトするのならOKです。

 

正しい表現は、404エラーの場合には404ページを開くです。

リダイレクトさせるのではなく、404エラーの場合のコンテンツを表示するだけなんです。

http_response_code() はHTTPステータスコードを設定・取得する関数で、引数にコードを入れると設定されます。

404.html にページが存在しない場合の出力するHTMLを記載します。

 

のような感じでリダイレクトすると、404.html が正常に開くだけになります。

当然ステータスコードも200(正常)となります。

HTTPステータスコードを確認する方法

上でもちょっと書きましたがPHPでステータスコードを確認するには http_response_code() を使います。

http_response_code() の戻り値がステータスコードになります。

で表示できます。

 

HTTPステータスコードチェッカーというものもあります。

ここにURLを入力すればステータスコードを確認することが出来ます。

404エラーとは

ここまでで404エラーが何かというのは分かると思いますが一応解説します。

HTTP通信には、リクエストとレスポンスがあります。

≫ HTTPリクエストとHTTPレスポンスとは

 

このレスポンスの状態をコードにしたものがHTTPステータスコードと呼ばれるものです。

正常に画面が表示される場合は 200 がセットされています。

そして、URLに対しページが存在しなかった場合には 404 がセットされます。

他にもたくさんありますが、一覧でまとめているページがありましたので詳細はそちらをご覧ください。

≫ HTTPステータスコード

まとめ

HTTPステータスコードが404の場合(ページが存在しない場合)はリダイレクトはしないで、ステータスコードに404を設定後404ページを読み込む。

ことの発端は404の場合に、404専用のページへリダイレクトしたいというご質問を頂いたことです。

この設定はSEOにも影響し最終的に会社の利益にも影響してくる可能性があるのでまとめました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA