WordPressのパーマリンク変更したときに私を襲ったアクシデントまとめ

昨日、WordPressの全ての記事のパーマリンク変更を断行したわけですが、予想外のことが色々起こりバタバタしたので備忘録。

その1. WordPressの自動301リダイレクトが効かない

大昔、日本語スラッグの記事URLを半角英数字に変更した際はWordPressが自動でリダイレクトしてくれてたので、「WordPressすげー」と思った記憶があったのと、他者ブログさんで自動リダイレクトしてくれたって記事を見たので、てっきり自動でリダイレクトしてくれるもんだと思ってました。

が、

wp-permalink_003

なにいいいいぃぃぃ。

解決方法

そこで私はプラグインの力を借りることにしました。事前にWordPressパーマリンク変更関連の記事を読み漁っていたので、Redirectionというプラグインがあることはチェック済。すぐ導入を決意。

やや正規表現でてこずったものの、元々「記事URLは必ず3種類のサブディレクトリのどれかに属する」というルールで運用していたので、それぞれにリダイレクトルールを設定して何とか対策をする。

プラグインRedirectionはこちら。
Redirection : WordPress Plugins

その2. 管理画面がリダイレクトループ

これは相当マヌケな話なんですが、上のRedirectionでの設定が管理画面URLにも影響したらしく、管理画面が表示できない事態に。

解決方法

  1. ftpでRedirectionのフォルダごと削除
  2. ログインできるようになる
  3. もう1回Redirectionをアップしなおす
  4. 悪さをしてる(俺のミスやけど)設定を修正する

ふぅ。

その3. カテゴリーfeedのURLまでリダイレクトがかかる

Redirectionのログを見て気付きました。記事はちゃんとリダイレクトされてるけど、ついでにカテゴリーfeedのURLまでリダイレクトされてる模様。

ソースURL : /works/.*/
ターゲットURL: /

と設定してたら、カテゴリーfeedのURL
/category/works/website/feed が
/category/feed
にリダイレクトされてしまって、404に。

これも設定ミスですね…。

解決方法

正規表現の「後方参照」という技を用いる(初めて知った)。

wp-permalink_004

一応解説しとくと、「リダイレクト元URLをもうちょっとちゃんと指定しましょう」ということです。
(.*)はなんでもいい文字列の組です。左から1つ目が「\1」、2つ目が「\2」に格納されます。
元のパーマリンクが「/親カテゴリースラッグ/子カテゴリースラッグ/記事スラッグ.html」だったので、この場合「\1」が子カテゴリースラッグ、「\2」が記事スラッグに該当します。
元のパーマリンクから、「親カテゴリースラッグ」と「子カテゴリースラッグ」を削除して、「記事スラッグ」だけ残しましょう、ということです。

意味があるのか分かりませんが、図にしてみました。

wp-permalink_005

これでfeedのURLはリダイレクトされないようになりました。

その4. 古いURLが残っている

これが一番てこずりました。パーマリンク変更、管理画面で変更したら一瞬で反映されるかと思ってたのですが、古いURLが残っている。症状としては、WordPressに未ログイン状態のブラウザでも、古いURLでも記事が見れてしまうというものです。

Google Analytics見ても、古いURLでガンガン記録されてる。月末のPV集計をシンプルにするためにわざわざ月初を選んだのに変更したのに意味ないやんけ。

  • キャッシュかと思って、WP File Cacheのキャッシュを削除しても残る。
  • いっそのことWP File Cacheを停止しても残る。
  • ブラウザのキャッシュを消しても残る。

これは困った。

解決方法

どう考えてもキャッシュがたまってるとしか思えない。ん?キャッシュ?もしかして…先月停止したWP Super Cacheが原因でした。予想外すぎるわ。

  • WP Super Cacheを有効化
  • キャッシュを全部消す
  • また停止する

これで直りました。

まとめと懸念

これでなんとか思い通りの挙動になったかと思います。ああ疲れた…。ようやくカテゴリーの再整理ができるわ。

で、ちょっと思ったんですが、301リダイレクトルールをごろごろ変えまくったんですが、これってSEO的に大丈夫なんですかね?Googleに「どれがホンマのURLやねん!」って怒られそうですが。

しばらく経過を見てみます。