【WordPress】404エラーを出力し、かつ404 Not Foundページにリダイレクトする方法

「404エラーが起こったとき、決まったページ(404 NotFoundページ)にリダイレクトしたい、でも404エラーは出力して欲しい」という要件を実現する方法がなかなか見つからなかったので、
その方法を紹介したいと思います。

404エラーとは?

そもそも404エラーとはなんでしょうか。

404エラーとは、URLにアクセスしたときに、そのURLを持つページが存在しないことを示すHTTPステータスコードです。

HTTPステータスコードは、サイトをホストしているサーバーがブラウザなどのクライアントからのリクエストに応答したときに、それらのサーバーによって生成されます。HTTP ステータス コードにはそれぞれ異なる意味があり、404エラーはそのうち異常を示すエラーコードのうちの一つです。

404エラーの原因と対処法

404エラーが起こる原因には、主に以下の3つが考えられます。

  • URLを打ち間違えている
  • 該当ページが削除・非公開化されている
  • 該当ページが移動されている

3つについて、それぞれの説明と対処法を紹介します。

URLを打ち間違えている

URLを直打ちしてページを検索する場合、1文字でもスペルミスすると404エラーが生じます。

URLのスペルに間違いがないかもう一度チェックしましょう。

またサイト管理者は、ユーザーが誤ったURLを打つことを減らすために、ページのURLを設定する際はできるだけシンプルに、スペルミスがないよう設定することが大切です。

該当ページが削除・非公開化されている

Googleなどの検索ツールでの検索結果に出てきたページにアクセスしても、404エラーが起こることがあります。いわゆるリンク切れが生じている状態です。

原因として、もうそのページが管理者により削除や非公開化されていることが考えられます。

このような不便をなくすために、サイトの管理者は既存のページを非公開にするとき、ページがインデックスされないよう設定すると良いでしょう。

該当ページが移動されている

検索結果にあるページにアクセスして起こる404エラーの原因のもう一つに、ページのURLが変更されてしまっていることがあります。

サイトの管理者は、ドメイン移管などでページのURLを変更した場合には、古いURLへのアクセスを新しいURLへリダイレクトするよう設定すると良いでしょう。

これにより、ユーザーが古いURLにアクセスしても、自動で移動先の新しいページへアクセスしてくれるので、サイトの利便性が向上します。

ちなみに、WordPressサイトでリダイレクト設定を行う場合、Redirectionというリダイレクトを設定できるプラグインが便利です。

以上、404エラーの原因と対処法を紹介しましたが、自身のサイトで404エラーを完全になくすことは不可能です。そのため、サイトの利便性を高めるために、404エラーが起こった際、ユーザーに何が起こっており、どう対処すれば良いのかを明示することが重要です。

そこで、404ページが発生した際に表示される404ページ(Not Foundページ)を自作し、自分のサイトにあったメッセージを表示することが推奨されます。

404ページの作成

カスタムの404ページが設定されていない場合、404エラーが発生すると以下のような画面が表示されます。

このままでは、ユーザーにとって「何が起こったのか」「どうすれば良いのか」がわかりにくいです。

404ページを作成する際には、以下のような5つのポイントに気をつけると良いでしょう。

  • ユーザーに対して、探しているページが見つからないことを明確に伝えます。親しみやすく魅力的な言葉を使用します。
  • 404 ページを、サイトのその他の部分と同じデザイン(ナビゲーションを含む)にします。
  • 最も人気のある記事や投稿へのリンクの他、ホームページへのリンクを追加します。
  • 無効なリンクを報告する方法をユーザーに提供する。
  • 404 ページが Google や他の検索エンジンのインデックスに登録されないようにするため、存在しないページがリクエストされたときにウェブサーバーが実際の 404 HTTPステータス コードを返すようにする。

参考: https://support.google.com/webmasters/answer/93641?hl=ja

ソフト404エラーの解消

上で紹介したカスタム404ページを作成する上での5つのポイントのうち、最初の4つはユーザーに何が起きており、どうすれば良いのかを伝えるために必要な対応です。これらは、ページのレイアウトやメッセージを工夫すれば満たすことができます。

ただ、最後の1点、「存在しないページがリクエストされたときにウェブサーバーが実際の 404 HTTPステータスコードを返すようにする」には、どのような意味合いがあるのでしょうか。

ソフト404エラーとは?

それを理解するために、まずソフト404エラーという用語を解説します。

ソフト404エラーとは、URL にアクセスしたときに、ページが存在しないにもかかわらず、200 (success) のステータスコードを返している状態を指します。

つまり、ソフト404エラーが生じている状況では、404ページを作成する上での最後のポイントを満たせていないことになります。

ソフト404エラーは解消する必要がある

では、このソフト404エラーが発生することは何が問題なのでしょうか。

ソフト404エラーが生じているページは、Googleからコンテンツがないと判断されており、実質的に404ページと同等なものとして扱われます

しかし、クローラーはステータスコードを元にクロールを行うため、ソフト404エラーのページにも無駄にクロールしてしまいます。

そのことにより、Googleがインデックスすべきページの選定がしづらくなるため、クロール効率の低下を引き起こし、インデックスさせたいページがインデックスされにくくなってしまう可能性が生じてしまうのです。

404ページを表示するかつ、ソフト404エラーを解消する方法

まとめると、サイト管理で404エラーに対応する際には、

  • 404エラーが発生したときは、カスタムの404ページを表示させること
  • ソフト404エラーは解消すること

が必要です。

ただ、実際にこの2つの要件を同時に満たすことは難しいです。

以下では例として、WordPressでサイトを管理する場合を取り上げ、
どのような落とし穴があるのか、どう解決すれば良いのかを紹介します。

まず、WordPressでは、作成した404ページを表示させる主な方法には以下の3つがあります。

  • 404.phpを作成・編集する
  • プラグインを使って固定ページに作成した404ページにリダイレクトさせる
  • テーマの 404 設定機能を使う

このうち、特に「404.phpを作成・編集する」方法や「プラグインを使って固定ページに作成した404ページにリダイレクトさせる」方法をとる場合、カスタム404ページを作成する際に注意が必要です。

(最後の「テーマの404 設定機能を使う」方法は、各テーマによって仕様が違うため一概には言えないのですが、他の方法と同様に注意が必要なことが多いです。)

なぜなら、404.phpやプラグインを使った方法では、404エラーが発生した際、作成した404ページにリダイレクトされて404エラーが出力されないのです。つまり、ソフト404エラーが発生してしまうのです。

しかし、以下2つの設定を行うことで、404エラー発生時に、カスタム404ページの表示とソフト404エラーの解消を行うことができます。

  • 404エラーが発生したら、カスタム404ページへリダイレクトする
  • カスタム404ページに移動したとき、404エラーを発生させる

以下では、その具体的は方法を紹介します。

404エラーが発生したら、カスタム404ページへリダイレクトする

function.phpファイルに以下のような関数を追加し、存在しないURLが検索され404エラーが発生したら、カスタム404ページへリダイレクト(ステータスコード301)するように設定します。

add_action( 'template_redirect', 'is404_redirect' );

function is404_redirect() {
      if ( is_404() ) {
    wp_safe_redirect( get_permalink( get_page_by_path( '/notfound' )), 301 );
   exit();
   }
}

404ページに遷移したとき、404エラーを発生させる

header.phpファイルの<head>タグ内に、以下のコードを追加し、404ページに遷移したとき、404エラーを発生させるよう設定します。

<head>
...   
   <?php 
      if(!empty($wp_query->get_queried_object()->post_name)){
         $slug=$wp_query->get_queried_object()->post_name;
      }
      $ary=['notfound'];
         if(!empty($slug) && in_array($slug,$ary)){
            header(' ', true, 404);
         }
   ?>
...
</head>

まとめ

本記事では、まず404エラーの基本を紹介した後、「404エラー発生時に、404ページにリダイレクトしたい、でも404エラーは出力して欲しい」という要件を満たす方法を解説しました。

サイトを閲覧する際に、普通に目に付くところの設定ではありませんが、ユーザーやクローラーに正しく404エラーを伝えるという意味で大切な設定になります。

みなさんもご自分のサイトが正しくエラー制御できているのか定期的にチェックすると良いでしょう。

コメント

タイトルとURLをコピーしました