だれかのなにかに役立てるウェブ制作者YoTaの趣味ブログ

スラッグ変更時、URLと違う記事ページに飛ぶ時は、DB「_wp_old_slug」をチェック!

wordpress

先日、ブログリニューアルの作業でwordpressのカテゴリースラッグの変更をしたり、パーマリンクの設定を変更していると、ある一部の記事のURL(スラッグ・パーマリンク)をクリックした時、目的のページとは違う記事ページに飛んでしまうエラーに遭遇しました。

結論は、データベースの「_wp_old_slug」をチェックすることで、無事に修正できました。以下に、詳しく説明してまいります。

WordPressでスラッグ変更した時、URLと違う記事ページに飛んでしまう時の対処法

URL(パーマリンク)と違う記事ページに遷移してしまうエラー

下記は、ローカル環境でwordpress構築していた時の本ブログのアーカイブページです。赤枠部の記事をクリックした時、正しくは「~/gurume/hobby7/」へ移動しなくてはならないのですが・・・

wp_url_error1

移動した先のページは「~/neta/hobby13a/」のパーマリンクとなってしまいました。つけ麺が出ないといけないのに・・・。

wp_url_error2

エラーの原因

原因としては、wordpressのリダイレクト設定のバッティングでした。wordpressでは、別の投稿記事で過去のスラッグが同じものが存在した場合は、先に過去のスラッグが登録された記事のほうに優先してリダイレクトされます。今回はそのケースだったと思います。

どうもリニューアルに伴い、あれこれスラッグ変更とパーマリンク設定の更新などをしたのがまずかったようです。基本的にはスラッグ・パーマリンクは後から変更しないほうがいいです。

ちなみにwordpressには下記の特徴があります。

Wordpressには、
・変更前のスラッグでもアクセスできる親切な機能がある
・変更前のスラッグは、削除も変更もできない
・スラッグは、全記事で一意でないとダメ

この条件があるために、
過去に一度使ったスラッグ(記事URL)があると、それを変更したとしてもその情報が残り
新しい記事で、現在は使ってないはずの記事URLを使用しているのに、うまく動作しないということになります。
引用:http://blog2.k05.biz/2014/11/_wp_old_slug.html

そのため、wordpressの中で、リダイレクト設定をしている箇所について調べていきました。

wordpressでは、データベースの「_wp_old_slug」で、スラッグ変更後などのリダイレクト設定をしている。

「_wp_old_slug」は、wp_post_metaのテーブルに格納されています。実際に見てみましょう。

wp_url_error3

この「_wp_old_slug」を削除すればOKです。

こちらのSQL文でも削除できます。
SELECT *
FROM `wp_postmeta`
WHERE `meta_key` LIKE '_wp_old_slug'

_wp_old_slugのデータがたくさん増えていくと、サイト全体への読込速度にも大きく影響するので、スラッグ変更することの多い人は、マメに掃除しておくと良さそうです。

関連リンク

【WordPress】記事URL(スラッグ)を変更しているのに、違う記事が表示される 【_wp_old_slug】

WordPressでリンクをクリックすると違うページに飛んでしまう

パーマリンクの設定がうまく反映されない時の対処法

WordPress 投稿記事のスラッグを変更しても旧URLでアクセスできる仕組み

まとめ

いかがでしたでしょうか。記事ページのURL移動で、違うページに飛び始めるようになったら、データベースの「_wp_old_slug」を確認してみてください!

ただし、データベースの作業は自己責任。事前にバックアップをとっておくようにしましょう。

ページ上部に戻る