以前から当ブログのカテゴリーを変更したいと思っていたのですが、ブログ開設時にパーマリンク(記事のURL)にカテゴリー名が含まれるようにしていたので、URLが変わってしまうのがイヤで躊躇しておりました。が、変えるならはやく変えたほうがいい!と、思いきってパーマリンクの設定を変えることにしたのですが、旧URLから新URLへの301リダイレクトにだいぶ手間取って大変だったので、やったことなどをメモします。

今回やりたいこと

カテゴリーをあまりにもざっくり設定しているので、もう少しわかりやすい分類に変えたい!

問題点

ただ、当ブログではWordPressのパーマリンクにカテゴリー名が入るようにしてしまっていたので、カテゴリーを変えると各記事のURLまで変わってしまいます。そうすると、ちょっと困ることがでてきます。

  • リンクしていただいている場合にリンク切れが起こる
  • せっかくいただいたはてなブックマークやTweetやいいね!について、記事上で表示されるボタンの数字が「0」になってしまう
  • Googleなどの検索結果に影響がありそう(あまりくわしくないのですが)

対策

でも、このままだと今後もカテゴリーを付け替えたいときなどに困るので、思いきって、パーマリンク構造を変えることに決めました。

具体的には、下記の記事を参考に、次の対策を取ることにします(明快でとてもわかりやすい記事でした!)。
→ WordPress向けSEO上級編:適切なパーマリンクへの変更と複数言語への対応 | Web担当者Forum

  1. パーマリンク構造を変える
    • 現状:/%category%/%post_id%/
    • 変更後:/%postname%/

    → WordPress管理画面の[設定]>[パーマリンク変更]から変更できます

  2. 以前のURLから新しいURLへ301リダイレクトさせる
    → TwitterやFacebook、その他からいただいているリンクが切れないようにするためと検索エンジン対策として(当ブログの記事で表示されるソーシャルボタンの数字が「0」になるのは残念ですがしかたがないと思うことにしました ←いただいたブックマークやツイートが消えてしまうわけではないので)

  3. そのうえで、記事ごとに新たにカテゴリー名を付け直す

※WordPressで自動的に301リダイレクトできることもあるのですが、今回は試しにやってみたところうまくいきませんでした(こちらの記事を参考にさせていただきました。すごく共感できる記事でした。 → WordPressパーマリンクの変更に踏み切りました。悩んだ理由と、所感。 *Ateitexe

実際にやったこと

記事のスラッグを英語(半角英数字)に

まず、パーマリンク設定を「/%postname%/」にすると各記事のスラッグがURLに入るのですが、これまで特に手を加えていなかった(記事のタイトルの一部が日本語でスラッグに入っている)ので、日本語から英語(半角英数字)に全部書き換えました。日本語のままだと、エンコードされた文字列がURLに入って長くなるのと、なにか不具合が起きる可能性があるかもしれませんし、なにより、自分としてはちょっとうつくしくないなぁと思ったからです。(例:下記画像)。

スラッグを書き換えるのに、ひとつひとつの記事の編集画面を開いて修正するのはめんどうなので、[投稿一覧]から各記事の[クイック編集]を開いて手を加えました。

※スラッグを入力するときに文字の間に半角スペースを入れると自動的にハイフンが入るので、あまり深く考えずにどんどんざっくり入力しました

301リダイレクト

次に、いざパーマリンク設定を変える前に301リダイレクトをどのように行うかを決めておきたいので、いろいろ調べてやってみました(結果的にはこれにものすごく手間取りました)。

その1:.htaccessファイルにコードを書き込んで一括でリダイレクトを試してみた

できるなら全記事に対して一括でリダイレクト設定したいので、まず、下記の記事内にある「解決策その1:.htaccessファイルのコードを書き換える」方法をやってみました。

このツールは、あなたのWordPressサイトのパーマリンク構造を「/%postname%/」に変更した場合に、古いURLからのリダイレクトのための.htaccessコードを自動生成するものだ。
ー WordPress向けSEO上級編:適切なパーマリンクへの変更と複数言語への対応 | Web担当者Forum

くわしくは上記のサイトをご覧いただきたいのですが、こちらのサイトで自動生成された内容を.htaccessに記述する方法です。
→ How to change your WordPress Permalink Structure • Yoast

Screenshot of yoast.com

これだと、.htaccessに1行書くだけで解決するので便利だと思ったのですが、私の環境だと404エラーになってしまいました。ので、別の方法を試すことに。

その2:リダイレクト設定プラグイン(「Redirection」プラグイン)を試してみた

次に、プラグインに頼ることにしました。

これも、まず下記の記事を参考に「Redirection」というプラグインを試してみました。

代わりに薦めたいのが、WordPress用のプラグインを使って301リダイレクトの処理に必要な制御をするやり方だ。

もちろん、301リダイレクト用のプラグインは山ほど出回っているが、僕はジョン・ゴドレー氏の「Redirection」を推奨する(繰り返しておくが、僕は1人のユーザーに過ぎず、Redirectionプラグインともゴドレー氏ともそれ以外の関係は一切ない)。
ー WordPress向けSEO上級編:適切なパーマリンクへの変更と複数言語への対応 | Web担当者Forum

このプラグインです。
→ 「Redirection」

Screenshot of wordpress.org

こちらの記事内に、

このプラグインは、URLの変更を自動で301リダイレクトすることも、1つひとつ301リダイレクトを設定することもでき、正規表現に基づくリダイレクトのルールも作ることさえできる!
ー WordPress向けSEO上級編:適切なパーマリンクへの変更と複数言語への対応 | Web担当者Forum

とあり、プラグインの設定画面を見てみたところ、記事をひとつずつ、もしくは、ディレクトリ単位でリダイレクトする方法はすぐわかったのですが、「URLの変更を自動で301リダイレクトする方法」が私にはどうしてもわからず、今回は他の方法をさがしてみることにしました(別のドメインにリダイレクトする時や、ひとつひとつのページやディレクトリ単位でリダイレクトするときには便利なプラグインだと思います!)。

その3:リダイレクト設定プラグイン(「Permalink Redirect」プラグイン)を試してみた

次に、他のプラグインはないかと思い、検索して調べてみたところ、下記のプラグインがよさそうだったので試してみました。

こちらのプラグインです。
→ Permalink Redirect WordPress Plugin

Screenshot of scott.yang.id.au

※「Permalink Redirect」という同名のプラグインが他にもあるので、WordPress管理画面からプラグインを検索して新規追加する際はご注意ください。

※このプラグインに関しては、こちらの記事がとても参考になりました!
→ WordPressのパーマリンク設定を途中で変更する方法|ThePresentNote

ただ、このプラグインだと、私の環境では、リダイレクト自体はできるのですが、リダイレクト先(リダイレクトした後)のURLがどうしてもおかしくなってしまいます。「/%postname%/」のあとに、なぜか「/%postid%/」がくっついてしまうのです。記事はちゃんと表示されますが、こうなると、ひとつの記事に対して2つのURL(「/%postname%/のみ」のURL &「/%postname%/+/%postid%/」のURL)ができてしまうので、これは困るなぁと。

ということで、またちがう方法を試してみることにしました。

その4:.htaccessファイルに1記事ずつリダイレクト設定をしたら、なんとかうまくできました!

こうなったら、一括でリダイレクトする方法をいろいろ調べるよりも、1記事ずつリダイレクトさせる方法を選んだほうが早いのでは?と思い、やってみることにしました。上記の「Redirection」プラグインでも、1記事ずつのリダイレクト先を書いたCSVファイルなどをアップロードして設定できるようでしたが、結局1記事ずつ設定するなら.htaccessに書いても同じだろう、ということで、プラグインは使わないでやってみました。

この作業の時点で、当ブログの記事数は57記事なのでたいした数ではないのですが、リダイレクト前のURLとリダイレクト先のURLをひとつひとつ書かないといけないということは、記事IDやスラッグ名をひとつひとつ拾う必要があるということなので、それはとてもめんどうだ・・・と思っていたところ、ありがたい記事を発見しました!
→ 【wordpressサイト限定】リダイレクトのための.htaccessへの記述を表計算ソフトとget_postsで効率化|ウェブシュフ

くわしくは上記の記事をご覧いただきたいのですが、簡単に流れを書きますと、

  1. ダミー記事の下書きを作って、投稿の個別記事テンプレート(single.phpなど)にURL抽出用のコードを書く
  2. こんなかんじで現状の投稿記事のURL一覧ができるので、エクセルやテキストエディタなどにコピー&ペースト

    ※あとでリダイレクトができているかを検証するときにパーマリンク変更前のURLがあると便利なので、この一覧は一時的にどこかに保存しておくとよいかも、です。
  3. パーマリンク設定を変更して、再度投稿記事のURL(新しいURL)を取得して、エクセルやテキストエディタなどにコピー&ペースト
  4. エクセルやテキストエディタなどで加工して.htaccessファイルに貼りつけて、サーバにアップロード

こんなかんじで作業できます。上記「1」の「パーマリンク構造変更前の各投稿のURLを取得」するためのphpコードのおかげで、URLの抽出がものすごく簡単にできて、スラッグの確認もついでにできたので、ほんとうにありがたかったです(「公開中」の記事のみが抽出されて大助かりでした←下書き記事が多いので)。

※蛇足ですが、ちょっとだけ以下に上記の手順の補足させていただきます(ご参考まで)。

  • URL抽出用に作った下書き記事や、投稿の個別記事テンプレートに書いたコードは、作業が終わったら忘れずに削除しましょう(←私はうまくリダイレクトできた喜びで忘れそうになったので、念のため)
  • エクセルで列を区切った場合、テキストエディタにそのまま貼り付けると列の区切りのところに「タブ」が入ることがあるので、.htaccessファイルに貼り付ける前に、念のためテキストエディタ上で「列」の区切りのところを「半角スペース」に置換したほうがよいかもしれません

これで、無事、リダイレクト&パーマリンクの変更ができました。

リダイレクトの確認

リダイレクトができているかの確認は、目視だけだとちょっと心配なので、こちらの「リダイレクト検証ツール」を利用しました。
→ リダイレクト検証ツール | SEO 検索エンジン最適化

ツールの使いかた

パーマリンク変更前のURLを入力して「解析」ボタンをクリックすると、
140127_01

結果が表示されて、問題なくリダイレクトできているかを確認できます。

サイトマップの再構築&送信

また、記事のURLが変更になったので、XMLサイトマップを再構築しておきます。当ブログでは、「Google XML Sitemaps」というサイトマップ作成プラグインを使用していますので、それをつかって再構築&通知をしておきました。
→ Google用サイトマップを生成してくれるWordPressプラグイン。 | nekonomemo.net

内部リンクの修正

最後に、過去の記事の中に書いていた自ブログの他記事へのリンクをひとつひとつ手作業で修正しました。

参考にさせていただきました!

記事内でもご紹介いたしましたが、以下の記事を参考にさせていただきました。ありがとうございます!

まとめ

当初の目的だったカテゴリーの変更はまだできていないのですが、とにもかくにもうまくリダイレクトさせるまでがほんとうに大変だったので、今後は、パーマリンクの設定ははじめからよく考えて決めようとつくづく思いました。ただ、WordPressに不慣れなお客さまにサイトやブログを更新していただく際には、記事を投稿する際にスラッグをつけるはちょっと手間に感じられると思うので、その場合は、自動で採番されるpost_idを含めるパーマリンクにしたほうが便利かもしれませんね(日付+post_idなど)。