WordPressでいうパーマリンクとは、URLの中のドメイン以下の部分のことで、URLの一部という意味なので若干違うとは思いますがスラグと呼ばれることもあり、どちらも同じ意味を持つと考えて差し支えないと思います。
WordPressの初期状態では、「?p=xx(xxは投稿のID)」という形か、「公開日」+「投稿タイトル」になっていて、何も変更せずにある程度投稿や固定ページの公開を行ってから変更できることに気づく人も多いと思います。
一生懸命コンテンツを増やしているのになかなかサイトへの訪問者が増えず、いろいろ調べていると、パーマリンクにはその投稿や固定ページの内容を示す単語(キーワード)を含めた方がいいという情報を見るかも知れません。
パーマリンクに気を遣うことでアクセスアップが図れるかどうかの真偽については少し横に置いておくとして、悪い影響がなければ変更したいと考える方も多いでしょう。
しかし、既に検索エンジンが訪問済のコンテンツではせっかくインデックス(検索対象として登録)されたものを変更することになりますし、どこかのサイトのコンテンツでせっかく張られたリンクを台無しにしてしまうことにもつながるため、パーマリンクの変更は安易に行わない方がいいと思います。
そこで本ページでは、ある程度コンテンツの多くなったこのサイトで実際に行った、諸所の問題を最小限にするパーマリンク設定変更の手順を紹介しますので、誰かの参考になれば幸いです。
サイトのパーマリンク変更を行う際に留意すべきポイント
まずは、ある程度投稿コンテンツの公開が進んだWordPressサイトでパーマリンク(URLの一部=「スラグ」ともいう)設定を変更する際には以下のような悪影響や問題点が発生します。
- 既に登録されている検索エンジンからの流入が、新しいURLで再登録されるまでの間「ページが見つかりません」となってしまう
- どこかのサイトから張られたリンク経由でアクセスした時、「ページが見つかりません」となってしまう
- パーマリンクとなる文字列を編集画面やクイック編集画面で変更することで最終更新日が変わってしまい、古い情報が最新の情報として誤認されてしまう可能性がある
そしてこれを解消するためには以下のような手順でパーマリンク変更を進める必要があります。
パーマリンクの文字列を任意のものに設定することができるのは、パーマリンク構造の設定を「投稿名(%postname%)」にしたときのみなので、以下は「投稿名」を使用する前提での手順です
- 編集画面やクイック編集画面でパーマリンクの文字列だけを変えた時に最終更新日が変更されないようにする
- スラグが正しい文字列で構成されているかを確認し変更していく
- 2と同時に古いURLから新しいURLへ自動で遷移(リダイレクト)されるようにする準備をしていく
- すべての投稿のパーマリンク文字列のメンテナンスが終わったら、パーマリンク設定を「投稿名」に変更する
- 3で準備したリダイレクト措置を稼働させる
- パーマリンク変更後の措置-内部リンクのURL修正
- パーマリンク変更後の措置-不要なデータの削除
このようにすることで、パーマリンク文字列のメンテナンスが完全に終わるまでは今のままのURLでアクセスすることができ、パーマリンク文字列の変更だけで更新日が変わるのを防ぐことができ、かつ、パーマリンク設定の変更を行った直後に旧URLから新URLへスムーズに遷移させることができます。
それでは次項以降で手順に従って追加する設定やコードを紹介していきますので、順番に行っていきましょう。
投稿の編集で最終更新日が変更されないようにする措置
通常の投稿編集画面と、クイック編集画面で行う措置が異なります。パーマリンク(スラグ)の文字列変更のみを行う場合はクイック編集を使った方が効率的ですから、必要であれば通常の投稿編集画面側の措置を追加するという感じでいいでしょう。
クイック編集で最終更新日が変わらないようにする
まずはクイック編集を使った変更時に最終更新日が書き換わらないようにする方法から紹介します。
有効化しているテーマのfunctions.phpへ以下のコードを追加することで実現できます。
//クイック編集で更新日を変更しない
function pwcn_insert_post_data( $data, $postarr ){
if ( isset( $_POST['action'] ) && $_POST['action'] == 'inline-save' ) {
if ( $data['post_status'] == 'publish' ) {
unset( $data['post_date'] );
unset( $data['post_date_gmt'] );
unset( $data['post_modified'] );
unset( $data['post_modified_gmt'] );
}
}
return $data;
}
add_filter( 'wp_insert_post_data', 'pwcn_insert_post_data', 10, 2 );
投稿や固定ページ編集画面で最終更新日をコントロールする
以下のページを参考に、有効化しているテーマのfunctions.phpへコードを追加することで、投稿編集画面でのパーマリンク文字列の編集時または投稿内容の軽微な編集時に最終更新日をどのように扱うのかを指定できるようになります。
この措置は誤字脱字の修正や文章のちょっとした修正時に最終更新日を変更しないようにできて便利ですから、本ページの主旨に関係なく追加しておくことをおすすめします。
パーマリンク文字列の見直しとリダイレクトの準備
パーマリンク文字列(スラグ)の確認と変更
現在のパーマリンク(スラグ)を投稿一覧に表示させる
現在個別の投稿に設定されているスラグはクイック編集や投稿編集画面を開かないと確認できないので、投稿一覧画面に情報を表示して簡単に確認ができるようにすると効率が上がります。
以下のコードを追加すると、スラグ情報を一覧に表示させることができます。
//スラグの列を追加
function pwcn_add_slug_column($columns) {
$columns['slug'] = 'スラグ';
return $columns;
}
add_filter('manage_posts_columns', 'pwcn_add_slug_column');
// スラグの内容を表示
function pwcn_show_slug_column($column_name, $post_id) {
if ($column_name == 'slug') {
// スラグを取得して表示
$slug = get_post_field('post_name', $post_id);
echo esc_html($slug);
}
}
add_action('manage_posts_custom_column', 'pwcn_show_slug_column', 10, 2);
日本語の場合、クイック編集のスラグ欄に見えているのは通常の日本語文字列なのですが、上記コードで表示させた列はURLエンコード(記号化)された文字列になります。リダイレクトの条件にはエンコードされた文字列、日本語表記した文字列のどちらでも動作しますので、日本語での表示のままリダイレクト条件を足したい場合には以下のコードを使用することもできます。
ただし、以下のコードを使用した場合、タイトルの中に絵文字や記号、空白などがある場合には正常に処理されない場合がありますのでご注意ください
function pwcn_add_slug_column($columns) {
$columns['slug'] = 'スラグ';
return $columns;
}
add_filter('manage_posts_columns', 'pwcn_add_slug_column');
// スラグの内容を表示
function pwcn_show_slug_column($column_name, $post_id) {
if ($column_name == 'slug') {
// スラグを取得して表示
$slug = get_post_field('post_name', $post_id);
// スラグをデコード
$decoded_slug = urldecode($slug);
// デコードしたスラグを表示
echo esc_html($decoded_slug);
//echo esc_html($slug);
}
}
add_action('manage_posts_custom_column', 'pwcn_show_slug_column', 10, 2);
いずれのコードを追加した場合でも、スラグ文字列の変更後、このコードを使って表示させたスラグの列は必要ないので、メンテナンス後コードを削除して大丈夫です
クイック編集を使って文字列を変えていく
投稿一覧に表示された現在のパーマリンク(スラグ)を確認して、必要であればクイック編集を開いて「スラグ」欄の文字列を任意のものへ変更しますが、古いURLへのアクセスを新しいURLへ正しく遷移させるため、以下のようにするといいでしょう。
- 投稿一覧の「表示」を右クリックし、「URLをコピー」をクリックして、メモ帳などに貼り付ける
- 1の中からドメインの部分を削除する(例:単独のサイトでhttps://example.com/abcであれば/abcの部分だけを残す)
- クイック編集を使ってスラグを変更し、変更後の文字列をメモ帳へコピーする(変更の必要のないものは「スラグ」欄の文字列をメモ帳へコピーする)
- メモ帳の内容(旧スラグと新スラグ)をリダイレクト用コードの条件に追加する(次項参照)
- ...1~4の措置を全投稿文繰り返す...
2.3の措置をせずにスラグ文字列をジャンジャン変更してしまうと、元のURLが分からなくなり、肝心のリダイレクト措置ができなくなりますのでご注意ください
余談:投稿IDのみをパーマリンクに設定している場合は..
このサイトがそうでしたが、パーマリンク設定を投稿ID(%post_id%)のみにしている場合は、以下のページを参考に投稿一覧にIDを表示させ、旧スラグはIDをコピーすれば済み、いちいちメモ帳にコピーしたり加工したりする手間が省けます。
余談:パーマリンクの文字列は日本語のまま?英語に書き換える?
URLは半角英数字と特殊な記号でなければなりません。WordPressでは、パーマリンク設定が投稿名の場合、日本語のようなタイトル文字列はURLとして扱えるようパーセントエンコーディングするようになっていて何だか暗号のような文字列になっていてびっくりする方もいるかも知れません。
このエンコードされた文字列はデコード(エンコードの逆)されて、日本語として認識されるため、基本的にそのままでも構いません。
ただし、スラグに使える文字の長さがWordPressでは200文字に設定されていますが、マルチバイト文字がエンコードされた場合で実際に検証するとだいたい日本語で40~50文字になってしまうので、最初の下書き保存時に書いていたタイトルが長いと端折られるので、思ったキーワードが含まれない可能性があります。
また、検索エンジンでの検索結果ではデコード(日本語化)されたURLがリンクとして表示されるので、海外の方から見ると怪しい文字列に見えてしまうかも知れない点にも注意が必要かも知れません。
それならば、確実に200文字まで使えて広く使われている英語に直せばよりよい形になるかも知れませんが、問題となるのが日本語のタイトルを英語に直す知識の部分。
自力では難しい..そんな時はGoogle翻訳などを使って実際のタイトルを英語にしてもらうのが一番手っ取り早いです。
URLはなるべく短い方がいいとされているので、翻訳ツール上で日本語で調整をして、翻訳された内容をそのままスラグ欄に貼り付けて更新すれば、WordPress側で自動的にURLに使える文字だけに変換してくれるので便利ですよ。
リダイレクトの準備
以下のページを参考に、最終的に旧URLへの流入を新URLへ永久的にリダイレクトさせるコードを追加します。
コード末尾にあるアクションフックの行は、この段階では以下のようにコメントアウトして稼働させないようにしておきます(スラグの変更とパーマリンク設定の変更後にコメントを外して稼働させます)。
//add_action('template_redirect', 'pwcn_301_redirects');
この状態にした上で、以下の行を逐次追加して、古いスラグと新しいスラグの組み合わせを追加していきます。
'/old-page-1/' => '/new-page-1/',//前者は古いパーマリンク、後者は新しいパーマリンク
末尾のスラッシュ(/)の有無は実際のサイトの状態に合わせます(コード例ではURLの末尾にスラッシュが入るという前提になっています)
スラグの変更をする/しないに関わらず、パーマリンク設定の変更で投稿一覧にある「スラグ」列の文字列がURLの末尾になりますから、旧スラグと新スラグの組み合わせ行を全投稿に対して追加していくことがポイントです
パーマリンク設定の変更とリダイレクトの実行
最後にパーマリンク設定を変更し、同時にリダイレクトの措置を開始します。この2つを間を置かずに行うことで、今までのURLへのアクセスが即座に新しいURLで表示されるようになります。
パーマリンク設定の変更
パーマリンク設定の変更は管理画面の「設定」→「パーマリンク」を開いて行います。
投稿名にする場合には「カスタム」を選択して「/%postname%/」と入力して更新します(右の例はURLの末尾にスラッシュを入れる書き方にしています)。
設定の変更が終わったら、投稿一覧を開き(別タブで開いていたらリロードして)、いくつかの投稿の「表示」をクリックしてページのURLが新スラグになっているかを確認しましょう
リダイレクトプログラムの発動(有効化)
先ほど挿入したリダイレクト用コードのうち、コメントアウトアウトした「//」を外してリダイレクトがかかるようにします。
//add_action('template_redirect', 'pwcn_301_redirects');
検索エンジンのインデックス再登録は、よほどクロールのないサイトでない限り半年程度で完了するので後々削除してもよさそうですが、他のサイトからのリンクが変更されることはほぼないと考えるとリダイレクトプログラムは稼働させたままにしておいた方がいいでしょう
スラグとパーマリンク設定変更後に行っておきたい処理
内部リンクや自己管理している外部サイトからのリンクURL修正
カード表示させている内部リンクURLの修正
WordPressでは、段落ブロックにURLを挿入するとカード表示される機能が備わっていますね(テーマによっては無効にしているものもあるかも..)。
今回のスラグ(パーマリンク)変更でURLが変わってしまうことから、このカードリンクはリンク切れとなり、カード化されないURLだけのリンクになってしまいます。
1つ1つリンクがあるかどうかを探すのはとても骨が折れるので、Search Regexというプラグインを使って検索すると容易に見つけることができます。
検索文字列に旧スラグ(今回の場合は投稿IDですね)を入れると、リンクを含めてその文字列がある投稿を検索して一覧表示してくれます。
投稿IDはスラグ変更時に同時進行させていたリダイレクト用のコードを見れば一目瞭然ですね。
ここでこのプラグインの機能を使って同じくリダイレクト用コードの新しいスラグへ書き換えてもいいのですが、ここは時間を使って1件ずつ修正していくことをおすすめします。
以下の画像ははSearch Regexプラグインで旧スラグを検索した結果、そのページのリンクがリンク切れになった状態、URL修正後に正常にリンクカード表示された例です。



なお、プラグインによる一括変更ではなく、リンク切れを起こしているページの内容を手動で修正する時は、修正したページの最終更新日が変わってしまうので、以下のページを参考にコントロールできるようにしておくといいでしょう。
データベース内の不要なデータを削除する
投稿編集画面のスラッグ項目やクイック編集のスラグ項目(どちらも同じデータベース内のpostsテーブルにある「post_name」という列の情報を参照)を編集すると、post_metaテーブル内で投稿IDに対して「_wp_old_slug」という直前のスラグを保存する行が追加されます。
調べた限りの不確かな情報ですが、これはページ内のリンクに対してリンク切れを起こさないようにするために利用されているもので、きちんとメンテナンスしてリンクが正しいURLになっていれば不要なデータです。
まあそのまま残しておいても構いませんが、不要なデータを参照させることはパフォーマンスの低下につながりますのでできればきれいにしておきたいところですね。
そこで役立つのが「Slugs Manager: Delete Old Permalinks from WordPress Database」というプラグイン。無料版では手動による「_wp_old_slug」の削除、有料版では自動での削除ができますので用途に合わせて無料/有料を使用するといいでしょう(今回のようにすべての投稿をメンテする場合は無料版で十分だと思います)。
あとがき
冒頭でも触れたように、今回紹介するパーマリンク変更に伴うさまざまな措置は、実際に当サイトで行った作業や使用したコードやツールを紹介したものです。
今回は、パーマリンク(スラグ)をIDから変更するものとして紹介してきましたが、それ以外の形態からの変更も同じですし、既に投稿名になっていて、日本語スラグになっているものをキーワードを含んだ英語スラグに書き換える時も基本的な手順は同じですので、以下にポイントを再掲しておきます。
- パーマリンク(スラグ)の変更はクイック編集で行う
- 1と同時に301リダイレクトの準備をしておく
- 1と2が終わったらパーマリンク設定を変更する
- 2のリダイレクト措置を稼働させる
- サイト内リンク(特に自動カード化されるもの)のリンクURL見直し
- 自身で管理している外部サイトへ挿入したリンクURLの見直し
そして注意すべきは、WordPressは個別投稿の編集・クイック編集共に更新ボタンをクリックすると同時に最終更新日の記録が更新されてしまうこと。
短期間に大量の投稿について、内容を何も変えていないのに日付の情報が変わってしまうのは検索エンジンクローラーの誤解を招く(無意味な更新スパムとして扱われてしまうかも)可能性がありますし、何より訪問した方に最終更新日を示すことで、古い情報のままなのに最新の情報であると誤認される可能性がありますから、最終更新日を変えない措置はマストでしょう。
なお、この方法で行うことにより、検索エンジンへの影響や被リンク経由でのアクセスへの配慮は最大限しているものの、パーマリンク構造の変更をした場合でも、サイト内の大量のコンテンツに関するURLが変わるという大きな変化があることには違いがないので悪い方に向かえばアクセスが大量に下がるということもありますから、どうするのかの判断は慎重にするようにしましょう。
また、スラグ変更以外の要素は編集しないようにした方が、パーマリンク構造変更後の推移を確認しやすいと思いますので、同時にタイトルや本文の内容を変更するといった作業はしばらく行わないようにした方がいいと思います。
本ページの内容は、2025年3月初旬に本サイトで実際に行った作業を公開したものです。2025年3月28日現在、リダイレクトは正常に効いていることが確認でき、site:コマンドで調べると数件のインデックス登録の変更が確認できているので間違いはないと思います。
この変更により、特にアクセスが激減するといった状態にはなっていないのですが、ページ個別の検索経由でのアクセス数に変化があるように感じます。
コメントを残す