【WordPress】記事URL変更後に自動リダイレクトされる問題の対処法

ブログ運営

こんにちは。

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つ紹介しました。

困っている方は参考にしてください。

ブログ運営技術系

コメント一覧

タイトルとURLをコピーしました