こんにちは。
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つ紹介しました。
困っている方は参考にしてください。
コメント一覧