大阪のWeb制作会社です。
ホームページ制作の無料相談はこちら

技術メモ
WordPressのfunctions.phpで404ページをトップページにリダイレクトする方法

WordPressサイトにアクセスすると、たまに404ページが表示されることがあります。これは、ページが削除されたり、URLが変更された場合に起こります。

しかし、404ページを設定できない場合は、代わりに他のページへリダイレクトすることもできます。このようにすれば、ユーザーはページが見つからなかったことを知ることなく、サイト内を簡単に移動できます。

functions.phpで404ページをトップページにリダイレクト

実装方法は簡単です。functions.phpに以下のコードを追加します。

functions.php

add_action( 'template_redirect', 'is404_redirect_home' );
function is404_redirect_home() {
  if ( is_404() ) {
    wp_safe_redirect( home_url( '/' ) );
    exit();
  }
}

もし404ページであれば、wp_redirect()関数を使ってトップページにリダイレクトします。最後にexit;で処理を終了します。

functions.phpで404ページを固定ページにリダイレクト

functions.phpに以下のコードを追加します。

functions.php

add_action( 'template_redirect', 'is404_redirect' );
function is404_redirect() {
  if ( is_404() ) {
    wp_safe_redirect( get_permalink( get_page_by_path( '固定ページのスラッグ' ) ) );
    exit();
  }
}

HTTPリダイレクトステータスコードの変更も可能

ちなみに、ページだけでなくステータスコードも任意で指定したいという場合は、下記のように記述すれば実装できます。

下記のサンプルでは、リダイレクト先がトップページで、ステータスコードに301を指定しています。
ステータスコード301は、リクエストされたリソースが恒久的に移動した場合に使用されます。

このステータスコードを使うと、検索エンジンがリダイレクト先のページをインデックスすることができ、検索エンジンのランキングも引き継がれます。

(ステータスコードはデフォルト(未指定)の場合は302が設定されています。)

functions.php

add_action( 'template_redirect', 'is404_redirect_home' );
function is404_redirect_home() {
  if ( is_404() ) {
    wp_safe_redirect( home_url( '/' ), 301 );
    exit();
  }
}

HTTPリダイレクトステータスコード

  • 301:恒久的な転送の場合に使用する。サイト移転やリニューアルによってURLが変わった場合に使用する。
  • 303:一時的かつGETメソッドでのリダイレクトで使用する。
  • 307:一時的かつリダイレクト元のメソッドを引き継いてリダイレクトしたい場合に使用する。302とほぼ同じ。