WordPressを運営していると、途中でパーマリンク構造を変更したくなることがあります。
例えば、最初はシンプルに「/%post_id%/
」で運用していたけれど、記事が増えるにつれて「カテゴリ」もURLに入れた方が整理しやすい…というケースです。
今回は、旧URL /post_id/
を新URL /category/post_id/
へリダイレクトする方法を解説します。
1. リダイレクトが必要な理由
パーマリンクを変えると、当然ながら過去に公開した記事のURLも変わってしまいます。
もし旧URLにアクセスがあった場合、そのままでは「404エラー」になってしまい、SEOにも悪影響です。
そこで「301リダイレクト」を設定して、旧URLから新URLへ自動転送してあげる必要があります。
これにより、検索エンジンにも「恒久的にURLが変わった」と伝えられます。
2. .htaccessでの設定(Apache環境)
もっともシンプルなのが、.htaccess
にルールを書く方法です。
RewriteEngine On
# /12345/ → /カテゴリ/12345/
RewriteRule ^([0-9]+)/?$ /カテゴリ/$1/ [R=301,L]
これで「https://example.com/12345/
」へアクセスがあった場合、自動的に「https://example.com/カテゴリ/12345/
」へ転送されます。
3. Nginxでの設定
サーバーがNginxの場合はこちら。
location ~ ^/([0-9]+)/?$ {
return 301 /カテゴリ/$1/;
}
4. WordPressのfunctions.phpで処理する方法
サーバーの設定を触れない場合は、WordPressのテーマ(または子テーマ)のfunctions.php
に書くこともできます。
add_action('template_redirect', function() {
$request_uri = $_SERVER['REQUEST_URI'];
// /数字/ → /カテゴリ/数字/ へ転送
if (preg_match('#^/([0-9]+)/?$#', $request_uri, $m)) {
wp_redirect(home_url("/カテゴリ/{$m[1]}/"), 301);
exit;
}
});
5. 固定カテゴリか、動的カテゴリか?
ここで注意したいのは「カテゴリ部分」をどう扱うか。
- 固定で
/カテゴリ/
にする場合 → 上記の方法でOK。 - 記事ごとに違うカテゴリを反映させたい場合 →
get_the_category()
を使って記事IDからカテゴリを取得し、リダイレクト先を動的に生成する必要があります。
まとめ
- パーマリンクを変えたら必ずリダイレクト設定が必要
.htaccess
orfunctions.php
で301リダイレクトを設定- SEOのためにも「301」で恒久的に転送するのがベスト
これで、旧URLからアクセスが来ても新URLへスムーズに誘導でき、検索エンジンからの評価も引き継げます。