WordPressで404エラーを無効化し、ログを記録する方法

404エラーが発生するとユーザーがエラー画面にたどり着いてしまい、サイトの利便性が損なわれることがあります。一方で、404エラーが発生するURLを記録することで、デバッグや運営上の問題解決に役立てたいという場面もあるでしょう。

この記事では、404エラーを無効化し、エラー情報をログに記録する方法をご紹介します。以下のコードをfunctions.phpに追加するだけで簡単に実装できます。


コード解説

add_action('template_redirect', function() {
    if (is_404()) {
        // エラー情報を記録
        error_log('404 Error: ' . $_SERVER['REQUEST_URI']);

        // 任意のテンプレートにリダイレクト
        include(get_query_template('index')); // ホームテンプレートを表示
        exit;
    }
});

実装のポイント

  1. template_redirectアクション
    WordPressのフロントエンドでリダイレクトやカスタム処理を追加するためのフックです。このフックを使うことで、404エラーが発生した際の動作をカスタマイズできます。
  2. is_404()条件
    現在のリクエストが404エラーかどうかを判定します。この条件がtrueの場合にエラーログを記録し、次の処理に進みます。
  3. エラー情報の記録
    error_log()を使用して、エラーが発生したURL($_SERVER['REQUEST_URI'])を記録します。これにより、後からサーバーのエラーログで404エラーの詳細を確認できます。
  4. テンプレートの読み込み
    get_query_template('index')でホームテンプレートを読み込みます。この部分を変更することで、404エラー時に特定のテンプレートを表示することも可能です。
  5. exit;の追加
    処理を終了させるためにexitを使用しています。これにより、404エラーに関連するその他の処理を防ぐことができます。

応用例

  • カスタムテンプレートの利用
    「404エラー専用のページを用意したい」という場合は、以下のようにテンプレートファイルを指定します。 include(get_template_directory() . '/custom-404.php');
  • メール通知の追加
    管理者にメール通知を送ることで、迅速に問題を把握できます。 wp_mail('admin@example.com', '404 Error Alert', 'A 404 error occurred on: ' . $_SERVER['REQUEST_URI']);

注意点

  • ログの肥大化
    エラーログが大量に記録される可能性があります。必要に応じてフィルタリングや削除の処理を追加してください。
  • SEOへの影響
    404エラーを無効化すると、クローラーがエラーを認識できなくなる可能性があります。サイト運営の目的に応じて使い分けましょう。

この記事を書いた人

田島 佑清

2児の父 / ネクストメディア株式会社のエンジニア