WordPressには、自動的にリダイレクトをする機能があり、リダイレクトの設定をして無いのに、Google Search Consoleで「ページにリダイレクトがあります。」の表示が出たり、変なページが開いたりすることがある。
WordPressの自動補完リダイレクト機能は3つある

WordPressの自動補完リダイレクト機能には2種類+1種類あるらしいよ。

「スラッグに前方一致する記事を見つけて補完リダイレクトする」と「過去のスラッグ情報を元に現在のスラッグに補完リダイレクトする」の二つのことだよね。
あと一つは何?

「投稿などのURLにカテゴリー名が入るサイトのカテゴリースラッグ部分の自動リダイレクト」という機能もあるんだってさ。

えーと、でもうちの場合は関係ないよね。
とりあえず、「スラッグに前方一致する記事を見つけて補完リダイレクトする」と「過去のスラッグ情報を元に現在のスラッグに補完リダイレクトする」について勉強したいな。

じゃあ、「投稿などのURLにカテゴリー名が入るサイトのカテゴリースラッグ部分の自動リダイレクト」についてはまたの機会ということで。
「スラッグに前方一致する記事を見つけて補完リダイレクトする」とは?

「スラッグに前方一致する記事を見つけて補完リダイレクトする」ってどういうこと。

このサイトを例に「スラッグに前方一致する記事を見つけて補完リダイレクトする」例を挙げてみよう。
アドレスバーに「https://wordpress.0hs.org/ABC/●●●」と打ち込んだとする。

「https://wordpress.0hs.org/ABC/●●●」というページは存在しないので、本来401ページが表示されるよね。
本来は、ページが存在しないので、401が表示されるはず。
だが、WordPressの「スラッグに前方一致する記事を見つけて補完リダイレクトする」機能は401ページを表示せず、「https://wordpress.0hs.org/×××/ABC/△▼▼」というページを表示する。

え、なんでそうなるの?
全然違うページだよね。

二つのURLの中にある共通部分へWordPressの補完機能が反応して自動的にリダイレクトしてしまうんだ。
この場合は「ABC」の部分に反応している。

素直に401ページでよくない?

WordPressの自動補完リダイレクト機能は「function.php」にコードを書き加えれば止めることができるよ。
「過去のスラッグ情報を元に現在のスラッグに補完リダイレクトする」とは?
GoogleSearchConsole(サーチコンソール)で“ページにリダイレクトがあります”が出るのは大体、この「過去のスラッグ情報を元に現在のスラッグに補完リダイレクトする」機能が原因になっている。

WordPressはスラッグを変えると「過去のスラッグ情報を元に現在のスラッグに補完リダイレクトする」機能がついているんだ。

便利ではあるよね。

でも、この「過去のスラッグ情報を元に現在のスラッグに補完リダイレクトする」機能って、永遠に機能し続けるんだよ。

うーん、それはいいのか悪いのか…。
微妙。

こちらの自動補完リダイレクト機能も「function.php」にコードを書き加えれば止めることができるんだ。
WordPressのバージョンによって自動補完リダイレクトを止めるコードが違う

今、テーマファイルの「function.php」を見てみたら、「自動補完リダイレクト機能」を止めるコードが記載されてたんだ。

それ、古いコードで、「自動補完リダイレクト機能」を止めるコードが機能していないんじゃないかな。
一度確認してみたほうがいいよ。
WordPressの自動補完リダイレクト機能は「function.php」にコードを書き加えれば止めることができる。
ただし、WordPressのバージョンによって自動補完リダイレクト機能を止めるコードが違うので要注意。

「function.php」の書き換えは、子テーマでしてね。
書き換え前に「BackWPup」等でバックアップを取るのも忘れずに。
古い又は非推奨の自動補完リダイレクト機能を止めるコード
以下のコードは古かったり、非推奨だったりする。
もし、以下のコードを使っているようなら、新しいコードにした方がいいよ。
【Wordpress2.3の「スラッグに前方一致する記事を見つけて自動補完リダイレクトする」機能を止めるコード】
//Wordpress2.3の「スラッグに前方一致する記事を見つけて自動補完リダイレクトする」機能を止めるコード
function remove_redirect_guess_404_permalink( $redirect_url ) {
if ( is_404() )
return false;
return $redirect_url;
}
add_filter( 'redirect_canonical', 'remove_redirect_guess_404_permalink' );
【非推奨のコード】
//非推奨のコード(リダイレクトを担う関数自体を無効化する)
//remove_action('template_redirect', 'redirect_canonical');
WordPress5.5以降の自動補完リダイレクトを止めるコード
Wordpress5.5以降の自動補完リダイレクトを止めるコードはとても簡単。
//「スラッグに前方一致する記事を見つけて自動補完リダイレクトする」機能を止めるコード add_filter( 'do_redirect_guess_404_permalink', '__return_false' );
//旧スラッグからの自動補完リダイレクトを停止 remove_action( 'template_redirect', 'wp_old_slug_redirect' );

ちなみに昔のスラッグの情報は「Wordpress用データベース > wp_postmetaテーブル > _wp_old_slugレコード」に入ってるんだって。
知識のある人は、phpMyAdminを使ってデータベースから_wp_old_slugレコードの情報を削除すると、データベースがすっきりしていいかも。

データベースをいじるのは、大変でしょ?

「Slugs Manager」というプラグインを使っても古いスラッグの情報を削除できるらしいよ。

プラグインが使えるなら、余裕がある時に試してみるといいかもね。




コメント