WordPressで特定のページを404エラーページにリダイレクトする方法

はじめに

WordPressのサイトを運営していると、特定のページやURLを404エラーページにリダイレクトしたい場面が出てくることがあります。例えば、古いコンテンツや無効なページへのアクセスを防ぎたい場合や、セキュリティの観点から特定のページを隠したい場合です。本記事では、実際のコード例を用いながら、特定のURLを404エラーページにリダイレクトする方法を詳しく解説します。

コードの概要説明

まず、今回使用するコード全体を以下に示します。

add_action('template_redirect', 'redirect_multiple_pages_to_404');
function redirect_multiple_pages_to_404() {
    // ユーザーがログインしている場合はリダイレクトしない
    if (is_user_logged_in()) {
        return;
    }

    $urls_to_404 = array(
        'service/unavailable-feature/a12',
        'page/old-event/a34',
        'blog/outdated-post/a56',
        'product/discontinued-item/a78',
        // 他のリダイレクトしたいURLを追加
    );

    $current_url = untrailingslashit($_SERVER['REQUEST_URI']); // 現在のURLを取得し末尾のスラッシュを削除
    foreach ($urls_to_404 as $url) {
        if (strpos($current_url, $url) !== false) {
            global $wp_query;
            $wp_query->set_404();
            status_header(404);
            get_template_part(404); // 404テンプレートを表示
            exit();
        }
    }
}

このコードは、特定のURLにアクセスがあった場合にそのページを404エラーページにリダイレクトするものです。以下で各部分の詳細を解説していきます。

詳細なコード解説

add_actiontemplate_redirectの説明

add_action('template_redirect', 'redirect_multiple_pages_to_404');

この行は、WordPressのtemplate_redirectアクションにredirect_multiple_pages_to_404関数をフックしています。template_redirectは、テンプレートファイルが読み込まれる直前に実行されるアクションで、このタイミングでリダイレクトのロジックを実行することで、不要なページへのアクセスを防ぎます。

is_user_logged_inでのログイン状態の確認

if (is_user_logged_in()) {
    return;
}

この部分は、ユーザーがログインしている場合にはリダイレクトを行わないようにしています。サイト管理者や特定のユーザーがアクセスできるようにしたい場合に役立ちます。

$_SERVER['REQUEST_URI']での現在のURLの取得

$current_url = untrailingslashit($_SERVER['REQUEST_URI']);

ここでは、現在のURLを取得し、末尾のスラッシュを削除しています。untrailingslashit関数は、URLの末尾にスラッシュがある場合にそれを取り除くために使用します。

URLを配列で管理する方法

$urls_to_404 = array(
    'service/unavailable-feature/a12',
    'page/old-event/a34',
    'blog/outdated-post/a56',
    'product/discontinued-item/a78',
    // 他のリダイレクトしたいURLを追加
);

ここでは、リダイレクトしたいURLを配列として管理しています。この配列に新しいURLを追加することで、リダイレクト対象を簡単に増やすことができます。

404エラーページへのリダイレクトの仕組み

foreach ($urls_to_404 as $url) {
    if (strpos($current_url, $url) !== false) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
        get_template_part(404);
        exit();
    }
}

この部分では、現在のURLが配列内のいずれかのURLを含む場合に、404エラーページを表示するようにしています。strpos関数を使ってURLの一部が一致するかどうかを確認し、一致する場合には$wp_queryオブジェクトを使って404ステータスを設定し、404テンプレートを表示します。

応用例と注意点

他のリダイレクトしたいURLを追加する方法

新しいURLをリダイレクト対象に追加するには、$urls_to_404配列にそのURLを追加するだけです。例えば、'promo/expired-deal/a99'というURLを追加する場合は以下のようにします。

$urls_to_404 = array(
    'service/unavailable-feature/a12',
    'page/old-event/a34',
    'blog/outdated-post/a56',
    'product/discontinued-item/a78',
    'promo/expired-deal/a99', // 新しいURLを追加
);

セキュリティ対策としての利用方法

この方法は、特定のページへのアクセスを制限するために非常に有効です。例えば、管理者のみがアクセスできるページを誤って一般公開しないようにする場合などに使用できます。

SEOの観点からの考慮点

SEOの観点から見ると、404エラーページへのリダイレクトは慎重に行う必要があります。無効なページを削除することで検索エンジンの評価が下がるのを防ぐことができますが、適切にリダイレクトすることも重要です。場合によっては、301リダイレクトを使用して、関連する新しいページに誘導する方が良い場合もあります。

まとめ

この記事では、特定のURLを404エラーページにリダイレクトする方法について、具体的なコード例を用いて解説しました。この方法を用いることで、不要なページへのアクセスを防ぎ、サイトのセキュリティやSEOの最適化を図ることができます。実際のサイトでこのコードを応用し、より効果的なWebサイト運営を目指してみてください。

最後のアドバイス

このコードを実装する際には、必ずテスト環境で動作確認を行い、本番環境に影響が出ないように注意してください。また、サイトのバックアップを取っておくことも忘れずに。特定のページをリダイレクトすることで、サイト運営の効率化とセキュリティの強化が実現できます。ぜひ試してみてください。

この記事を書いた人

田島 佑清

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