こんにちは。
WordPressでは記事編集画面から簡単にURL(URLスラッグ)を変更することができますが、変更前URLにアクセスすると勝手に変更後URLにリダイレクトされる仕様になっています。
この自動リダイレクト機能を停止し、404を返すようにする方法を紹介します。
問題の詳細
まず問題の内容を詳しく説明します。
問題の内容を知っている場合は読み飛ばして構いません。
WordPressではURLの構造を自分で決定することができます。
(設定 > パーマリンク設定 から設定可能)
URLのカスタム構造が例えば以下のように設定してあるとします。
/%year%/%postname%
この場合、記事URLは次のように設定されます。
URLスラッグ: url-slug
URL: https://example.com/2021/url-slug
さて、この状況で、ある記事のURLスラッグを以下のように変更したとします。
変更前URLスラッグ: old-slug
変更後URLスラッグ: new-slug
すると、URLは次のように変更されます。
変更前URL: https://example.com/2021/old-slug
変更後URL: https://example.com/2021/new-slug
この後、変更前URLにアクセスすると、勝手に変更後URLにリダイレクトされてしまいます。
自動リダイレクトによって起こる可能性のある問題としては、Googleに変更前URLがインデックスされて変更後URLは重複しているとみなされる問題などがあげられます。
対処法
解決策1: 機能停止
変更前URLの自動リダイレクト機能を停止させます。
functions.php に以下のコードを追記することで機能が停止します。
remove_action('template_redirect', 'wp_old_slug_redirect');
参考: WordPress development – Removing the redirect after changing a page’s slug
この方法では、リダイレクト機能自体が停止するため、すべての変更前URLから変更後URLへのリダイレクトが停止します。
選択的にリダイレクトを停止したい場合は、解決策2を使ってください。
解決策2: データベース消去
データベースに変更前URLが保存されているため、これを消去することでリダイレクトしなくなります。
wp_postmeta
テーブルの中に、meta_key
の値が _wp_old_slug
で、meta_value
の値が変更前URLのレコードがあります。
リダイレクトさせたくないレコードを削除すれば、削除したURLだけリダイレクトされなくなります。
確認コマンド
select * from wp_postmeta where meta_key = ‘_wp_old_slug’;
| meta_id | post_id | meta_key | meta_value |
+———+———+——————-+————–+
| 1 | 2 | _wp_old_slug | old-slug |
削除コマンド
delete from wp_postmeta where meta_id = 1;
最後に
変更前URLの自動リダイレクトを停止して404を返すようにする方法を2つ紹介しました。
困っている方は参考にしてください。
コメント
Hello, did you know that there are 241,120 internet directories in the world.
These websites are what drive traffic to YOUR business.
Want more traffic? Want more Sales? We can help – today.
Your website diary-039.com is listed in only 1 of these directories.
Get more traffic for your Global audience.
Our automated system adds your website to all of the directories.
You can find it here: getlisted.directory/diary-039.com
Act today, and we will expedite your listings and waive the processing charge!
We have a special going on. Use “FRIENDS” on checkout for a 50% discount valid today.
I got good info from your blog