こんにちは。でぐっち(@de_gucci)です。
500記事ものパーマリンクの変更、めんどくさそうじゃないですか?今回やってみたら案外カンタンだったので、私がやった方法を紹介しますね。
パーマリンクを変更したい!けど、500記事以上ある…orz
de-gucci.comは、当初、www.de-gucci.comとしてMovable Typeで運用してました。
が、途中からWordPressが優勢&情報が多くなったため、Movable TypeからWordPressに移行しました。
そのとき、相当パーマリンクをどうしようか悩んだんですが、その時点では、直で別々のリンクにした方が良いと思って、https://de-gucci.com/%postname%にしたんです。
しかし、日本語のタイトルをつけるとURLに日本語がエンコードされて入り見辛くなることが判明したため、イチイチ手動でそれらしき英語ローマ字の名前に変更してました。
しばらくずっとその状態でやってきたんですが、ここ最近、月に45、75と投稿数が増えてくると変更し忘れて投稿してしまい、投稿直後に慌てて変更し直すことが多くなり、また、面倒くさくなってきました。
なので、パーマリンクを変更しよう!と思ってはみたものの、単純に変更しただけでは変更後、検索結果や過去のSNSなどから元のリンクへのアクセスが来た際に、「404: ページが見つかりません」というメッセージが出まくりアクセスしてもらえなくなってしまいます。
Google Search Consoleのインデックスが不正となってしまい、ヘタすると今後インデックスされなくなるなど、ペナルティを受ける可能性があります。
それには元のリンクを新しいリンクへ恒久的に変わったよ。と転送してあげる301リダイレクトする必要があるんですが、、、
どうしよう。と思った時点で450記事以上。そして、どんどん記事が増えています。
さらにどのようにしようか考えている間にもどんどん記事が増え、500記事を超えてしまいました。
見つけた!
ググって調べてみたら、さすがインターネットの世界。探せばあるものです。私にぴったりだと思ったのが i商店βさんのこの記事↓
[blogcard url=”http://ishoten.com/web/wordpress/wordpress-301-redirection-settings”]
基本路線、というか、ほとんどこの記事の通りに作業して、500記事以上のパーマリンクを301リダイレクトすることができました。
i商店βさん、ありがとうございましたm(_ _)m
ただ、i商店βさんの記事は2014年の記事ということもあり、PHP7に対応してなかったのと、Excelが前提ということで、Excelを持っていないと厳しいかな、、、と思ったので、ちょっとだけ変えてやりました。
一括301リダイレクトに必要なもの
一括で301リダイレクトをするのに必要なものは2つのWordPressプラグインとMicrosoft Excelです。
- Redirectionプラグイン
- PHP Everywhereプラグイン
- Googleスプレッドシート(Microsoft Excel)
一括301リダイレクトする手順の流れ
- どのパーマリンクにするかの検討
- Redirectionプラグインのインストールと有効化
- PHP Everywhereプラグインのインストールと有効化
- 投稿した記事の一覧を表示する固定ページの作成
- 現在のパーマリンクでのURL一覧の表示=旧URL
- Googleスプレッドシート(Excel)にsourceとして旧URLの貼り付け
- パーマリンクの変更
- 変更したパーマリンクでのURL一覧の表示=新URL
- Googleスプレッドシート(Excel)にtargetとして新URLの貼り付け
- Googleスプレッドシート(Excel)を整形し、CSV形式でファイルに保存
- RedirectionでCSVファイルの取り込み
一括301リダイレクトする手順の詳細
どのパーマリンクにするかの検討
現在のパーマリンクをどのように変更するか検討します。
この手順で比較的簡単に新しいリンクへの転送設定することができますが、頻繁にやるものではないと思うので慎重に決めてください。
今回、私は https://de-gucci.com/%postname%(または個別リンク)から https://de-gucci.com/archives/%post_id% に変更しました。
Redirectionプラグインのインストールと有効化
プラグイン→新規追加で、「プラグインの検索」にRedirectionと入力するとRedirectionプラグインが出てくるので「今すぐインストール」しすぐに「有効化」して利用できるようにしてください。

PHP Everywhereプラグインのインストールと有効化
i商店βさんの記事では「Exec-PHP」が紹介されてますが、残念ながらExec-PHPがPHP7に対応しておらず、私の環境では利用できなかったため、私は「PHP Code For Posts」を利用しました。
が、今見たら(2017年4月8日)、PHP Core For Postsが公式プラグインページから消えてしまっていたので、PHP Everywhereプラグインを利用します。
プラグイン→新規追加で、「プラグインの検索」にPHP Everywhereと入力するとPHP Everywhereプラグインが出てくるので「今すぐインストール」しすぐに「有効化」して利用できるようにしてください。

投稿した記事の一覧を表示する固定ページの作成
目的別の新しい固定ベージを作成し、パーマリンクを変更したいURL一覧を表示するためのコード(後述)を固定ベージ編集画面右側の「PHP Everywhere」ウィジェットの中に貼り付けます。

そして固定ベージ画面にはショートコードを記述します。

固定ベージを公開します。
1.投稿記事URL一覧を表示するコード
<ul> <?php query_posts('posts_per_page=1000'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php the_permalink(); ?></a> </li> <?php endwhile; endif; ?> <?php wp_reset_query(); ?> </ul>
2.固定ページURL一覧を表示するコード
<ul> <?php global $post; $args = array( 'post_type' => 'page', 'number' => 1000 ); $myposts = get_pages( $args ); foreach( $myposts as $post ) : setup_postdata($post);?> <li><a href="<?php the_permalink(); ?>"><?php the_permalink(); ?></a></li> <?php endforeach; ?> </ul>
3.カテゴリURL一覧を表示するコード
<ul> <?php $cat_all = get_terms( "category", "fields=all&get=all" ); foreach($cat_all as $value): ?> <li><a href="<?php echo get_category_link($value->term_id); ?>"><?php echo get_category_link($value->term_id); ?></a></li> <?php endforeach; ?> </ul>
4.タグURL一覧を表示するコード
<ul> <?php $tag_all = get_terms("post_tag", "fields=all"); foreach($tag_all as $value): ?> <li><a href="<?php echo get_tag_link($value->term_id); ?>"><?php echo get_tag_link($value->term_id); ?></a></li> <?php endforeach; ?> </ul>
現在のパーマリンクでのURL一覧の表示=旧URL
公開した固定ベージを表示します。
Googleスプレッドシート(Excel)にsourceとして旧URLの貼り付け
リスト表示されているので、Googleスプレッドシート(Excel)のA列に貼り付けます。

パーマリンクの変更
設定→パーマリンクの変更画面で、パーマリンクの設定を変更します。
今回私は数字ベースに変更し、変更を保存しました。

※変更を保存した時点で旧URLへのアクセスができなくなりますので実施する時間などご注意ください。
変更したパーマリンクでのURL一覧の表示=新URL
再度、固定ページを表示(リロード)すると新しいURLでの一覧が表示されます。

Googleスプレッドシート(Excel)にtargetとして新URLの貼り付け
リスト表示された一覧をコピーし、GoogleスプレッドシートのB列に貼り付けます。

Googleスプレッドシート(Excel)を整形し、CSV形式でファイルに保存
Redirectionに読み込めるようにGoogleスプレッドシートを整形し、CSV形式でファイルに保存します。
まず、1行目に1行追加し、セルA1に「source」、セルB1に「target」と入力します。

編集メニューから検索と置換を選択し、ドメイン名の部分を削除します。
私の場合だと、「検索」には https://de-gucci.com を入力し、置換後の文字列は空欄にした状態で、「すべて置換」を選択します。

するとドメイン名が削除されます。

この表をCSV形式でファイルに保存します。
ファイル→形式を指定してダウンロード、カンマ区切りの値(.csv、現在のシート) を選択するとファイルに保存されます。

RedirectionでCSVファイルの取り込み
ダッシュボードで、ツール→Redirectionを選択します。
まず、グループを選択します。

グループを追加で、適当なグループ名を入力し、追加を選択します。実際には転送方式として、WordPress側で転送する方法とApache/nginx側で転送する方法を選べるんですが、ここではWordPress側で転送するようにします。

グループが作成されます。

続いて設定を選択します。

インポートのファイルの選択で保存したCSV形式ファイルを指定し、インポート先として先ほど作成したグループを選択して、アップロードを選択します。

正しく読み込まれると転送ルールに一覧が表示されます。先ほどのグループでWordPressを選択しておくと、何回転送されたかがヒット数で、また前回アクセスされたのがいつかを確認することができます。

最後に
WordPressの固定ページや記事内にPHPコードを書くことができるのはセキュリティ的にはあまり望ましい状況ではありません。
Exec-PHPプラグインやPHP Code for Postsプラグインが公式プラグインページから消えたのもその辺が一因としてあるのかもしれません。
今回のPHP Everywhereもいつ消えるかわからない状況です。
移行が終わったらレビュー待ちにする、非公開にする、削除するなどの対応をしてください。
逆に言うなら制限が厳しくなる前の今がチャンスなのかもしれません。
PHPコードの取り扱いには十分注意してくださいね。