WordPressの自動補完リダイレクトを解除する方法(勝手にリダイレクトさせない)

著者:牧野健人

WordPressには、存在しないURLにユーザーがアクセスした際に、正しいURLを自動的に探して転送する仕様が存在します。これにより、404ページが表示されて欲しい場面でも他のページにリダイレクトされてしまうことがあります。

本コラムでは、このような意図しないリダイレクトを解決したい方に向けて、そのための具体的なコードとその意味を解説します

牧野健人

記事の著者牧野健人

株式会社リラクス 代表取締役。CRO・SEOを専門とし、デザイン・実装のスキルも活かしながら、クライアントの成果向上のための取組に尽力。
慶應義塾大学卒業後、行政機関を経て、デジタルマーケティングエージェンシーのアイレップにて運用型広告のクリエイティブプランニングに従事。2019年にリラクスを創業。

お問い合わせはフォームよりお願いいたします。

WordPressの自動補完リダイレクトを無効にするPHP

WordPressの自動補完リダイレクトを無効化し、404の時はそのまま404ページが表示されるようにするには、functions.phpに下記のPHPを追記します。

function disable_auto_complete_redirect( $redirect_url ) {
    if ( is_404() ) return false;
    return $redirect_url;
}
add_filter( 'redirect_canonical', 'disable_auto_complete_redirect' );

これだけで、対応は完了です。

以下で、コードの意味を解説します。

redirect_canonical

redirect_canonical フィルターを使うことで、「WordPressがURLへのリクエストを処理し、それを正規の(= カノニカルな)URLにリダイレクトする処理」に介入できます。

今回はdisable_auto_complete_redirectという関数を作成し、それにより「ステータスが404の場合は、自動的なリダイレクトを実行しない」という処理を用意した上で、redirect_canonical フィルターに渡しています。

if ( is_404() ) return false;

「ステータスが404の時に、自動補完リダイレクトを実行せずに、そのまま404ページを表示させること」が目的なので、まずif ( is_404() )で404かを判定します。

その上で、404であれば、redirect_canonical フィルターにfalseを返して、リダイレクトを無効にします。

なお、PHPではif文が1行で完結する場合は{}を省略できるためif ( is_404() ) return false;としています。省略せず下記のようにしてももちろん問題ありません。

function disable_auto_complete_redirect( $redirect_url ) {
    if ( is_404() ) {
        return false;
    }
    return $redirect_url;
}
add_filter( 'redirect_canonical', 'disable_auto_complete_redirect' );

return $redirect_url;

ステータスが404ではない場合には、デフォルトのリダイレクト処理を維持するために$redirect_url;を返します。

これは要するに、404でなければ何もしないということです。

以上により、404の時は自動リダイレクトを無効化し、そうでない場合はデフォルトのリダイレクト処理を維持することができます。

お気軽にご相談ください

Webサイトに関する課題をお持ちの方はお気軽にご連絡ください。
課題が曖昧な状態でのご相談でも大丈夫です。

サイト改善のプロが無料で分析無料のWebサイト診断 無料相談・見積もり依頼
サイト改善のプロが無料で分析無料のWebサイト診断