.htaccessでのURL正規化(301リダイレクトなど)書き方のまとめ

ドメインが変わったり、カテゴリーが途中で変わったり、止むを得ず記事を削除しないといけなくなるなど、ブログを運営しているとページURLが変わる場面というのがけっこう出てきます。

以前のサーチコンソールの記事の中でも少し触れていますが、ブログの引越しなどでURLが変わったときには、新しいURLヘと適切にリダイレクトしておかないと、SEOにも影響が出てくることがあります。

また、URL正規化はブログの移転だけではなく、例えばwwwをつけないURLに統一したり、http://のアクセスをhttps://へ統一(常時SSL)するといったように、ほかにも利用シーンはけっこうあります。

なので今回、なるべくよく利用するものに絞って.htaccessの具体的な書き方をまとめていますので、ちょっとややこしい話も出てきますが、ぜひ参考にしてみてくださいね★
(※なお、今回もWordPressのブログを使っているという前提で進めます。)

ページURL変更時の.htaccessでのリダイレクトについて

まずはページURLの変更が発生した場合、.htaccessでどのようなリダイレクトの書き方をしたら良いのか?からまとめていきます。

先に、リダイレクトのポイントからおさえておきましょう。

ブログURL変更時のリダイレクトのポイント
  • 現在のページURLを新しいURLへ引き継ぐ必要がある場合は、リダイレクトする
  • 新しいURLにリダイレクトさせないページについては、404を返すなどする

しかし、「現在のページURL」一口にいっても、以下のパターンごとにリダイレクト方法が変わってきます。

リダイレクトパターンの例
  • ブログ全体
  • ディレクトリ単位(特定のディレクトリ)
  • ページ単位(特定のページ)

また、リダイレクトには「301」と「302」のようなステータスコードがよく使われるので、ここも必要に応じて使い分けないとSEO上、思わぬ悪影響を受ける可能性があります。

ステータスコード意味と使い方
301恒久的な移転(もう旧URLには戻らない前提)
302一時的な移転(やがて旧URLに復旧する前提)
503サービス停止中(メンテナンス画面を一時的に出す場合)
404Not Found(ページが存在しない場合)

と、色々書いてきましたが、

  1. まず、そもそも新しいページURLへのリダイレクトが必要かどうか?
  2. リダイレクトが必要な場合、ブログ全体なのか、もしくはディレクトリやページ単位での転送になるのか?
  3. あと、その転送は「恒久的」でもう昔のURLに戻すことはないのかどうか?もしくは「一時的」なものなのか?

この辺りの条件に応じて、以下の.htaccessの書き方で該当するものを参考にしてもらえればと思います。

.htaccessで301リダイレクトの書き方

非常によく使われる.htaccessでの301リダイレクトの例から、いくつか紹介させていただきます。

別ドメイン(sample.com)へブログ全体のリダイレクト

ブログのURLが変わってしまう場合のリダイレクトです。

ブログ内の構造(パーマリンクとか、カテゴリーのスラッグとか)には変更はなく、主にドメインが変わる際のお引越しに必要なリダイレクトです。

旧URLhttp://old_domain.com/
新URLhttp://sample.com/
.htaccessの書き方 RewriteEngine On
RewriteRule (.*) http://sample.com/$1 [R=301,L]

ディレクトリ単位でのリダイレクト

ディレクトリというのは、http://sample.com/old_dir/index.htmlというページURLであればold_dirの部分に当たります。

このディレクトリ単位で新しいURLに301リダイレクトする場合は、以下のような書き方になります。

旧URLhttp://sample.com/old_dir/
新URLhttp://sample.com/new_dir/
.htaccessの書き方 RewriteEngine On
RewriteRule ^old_dir(.*)$ /new_dir$1 [R=301,L]

ページ単位でのリダイレクト

item.html、page.htm、privacy.phpなど、ページ単位で新しいURLへとリダイレクトする方法です。

旧URLhttp://old_domain.com/old_page.html
新URLhttp://sample.com/new_page.html
.htaccessの書き方 RewriteEngine On
RewriteRule old_page.html$ http://sample.com/new_page.html [R=301,L]

メンテナンス画面へ503リダイレクトするときの.htaccessの書き方

WordPressの場合はメンテナンス画面を出すためのプラグインが存在するので、自分で.htaccessを編集する機会は少ないかもしれませんね。

ただ、リダイレクトさせたくないディレクトリやIPアドレスといった除外パターンも存在するため、.htaccessでメンテナンス画面へ一時的にアクセスを集中させる書き方もまとめておきます。

.htaccessでメンテナンス画面へ503リダイレクト
  • 全てのアクセスをメンテナンス画面へリダイレクトさせる
  • 特定のディレクトリ(wp-adminだけ)はリダイレクトさせない
  • 特定のIPアドレスだけ、メンテナンス画面にリダイレクトさせない
メンテナンスのように、ホントに一時的な転送をやりたいときは、302よりも503の「サービス停止中」の方が適切だと言われています。

全てのアクセスをメンテナンス画面へリダイレクト

元URLhttp://sample.com/
転送先URLhttp://sample.com/maintenance/
.htaccessの書き方 ErrorDocument 503 http://sample.com/maintenance/
RewriteEngine On
RewriteRule ^.*$ – [R=503,L]

特定のディレクトリ(wp-adminだけ)はリダイレクトさせない

RewriteCond %{REQUEST_URI} !(^/wp-admin/)の部分で除外するディレクトリを指定しています。

この指定は複数行にわたって指定できるので、いくつか除外したいディレクトリがあれば改行して追記していくようにします。

元URLhttp://sample.com/
転送先URLhttp://sample.com/maintenance/
.htaccessの書き方 ErrorDocument 503 http://sample.com/maintenance/
RewriteEngine On
RewriteCond %{REQUEST_URI} !(^/wp-admin/)
RewriteRule ^.*$ – [R=503,L]

特定のIPアドレスだけ、メンテナンス画面にリダイレクトさせない

RewriteCond %{REMOTE_ADDR} !=192.168.1.1のように、リダイレクトの対象外となるIPアドレスを指定することができます。

また、こちらも複数のIPアドレスを指定するうことができます。

元URLhttp://sample.com/
転送先URLhttp://sample.com/maintenance/
.htaccessの書き方 ErrorDocument 503 http://sample.com/maintenance/
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !=192.168.1.1
RewriteRule ^.*$ – [R=503,L]

.htaccessで404リダイレクトの書き方

WordPressの場合は404のエラーページが用意されているので、特に気にする必要はないんですが、.htaccessで書くとなると以下のような記述になります。

.htaccessの書き方 ErrorDocument 404 /404.html
過去にあったページがなくなったとか、ブログのお引越しで必要ないディレクトリがいっぱい出てきたとか、そんな時はTOPページに301でアクセスを集約させるのではなく、できれば404を返すようにします。

この理由は、301リダイレクトの目的はあくまで重複コンテンツの集約であって、どこにでもやたら滅多らリダイレクトして良いというものではないからです。

.htaccessでそのほかのURL正規化の方法

過去の記事でもいくつか紹介済みのものもありますが、改めてここでまとめてご紹介します。

.htaccessでのそのほかのURL正規化例
  • wwwあり/なしで統一
  • HTTPSへのアクセス統一(常時SSL)
  • index.html(index.php)なしに統一

wwwありでURLを統一

まずはURLをwwwありに統一するための.htaccessの書き方です。

旧URLhttp://sample.com/
新URLhttp://www.sample.com/
.htaccessの書き方 RewriteEngine on
RewriteCond %{HTTP_HOST} ^sample\.com$
RewriteRule ^(.*)$ http://www.sample.com/$1 [R=301,L]

エックスサーバーで.htaccessを編集してwwwあり無しを統一する方法

2018年10月26日

wwwなしでURLを統一

続いて、wwwなしでURLを統一するには、.htaccessに以下のような記述を足します。

旧URLhttp://www.sample.com/
新URLhttp://sample.com/
.htaccessの書き方 RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.sample\.com$
RewriteRule ^(.*)$ http://sample.com/$1 [R=301,L]

エックスサーバーで.htaccessを編集してwwwあり無しを統一する方法

2018年10月26日

HTTPSへのアクセス統一

http://でのアクセスをhttps://へとリダイレトする方法です。

「常時SSL」とも呼ばれ、このブログでも以下の関連記事でその方法などを詳しく説明していますが、レンタルサーバーを借りたらなるべく早くこのSSL対応をやっておいた方が良いでしょう。

旧URLhttp://sample.com/
新URLhttps://sample.com/
.htaccessの書き方 RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

エックスサーバーでWordPressブログを常時SSL化する方法(htaccessの編集)

2019年1月25日

URLをindex.htmlなしに統一

http://ドメイン名/index.html(index.php)でやってくるアクセスを、http://ドメイン名/へとリダイレクトさせる方法です。

これもWordPressだとあまり気にすることがないリダイレクトですが、htaccessの書き方だけここで紹介するようにします。

旧URLhttp://sample.com/index.html
新URLhttp://sample.com/
.htaccessの書き方 RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.(html|php)
RewriteRule ^(.*)index.(html|php)$ http://%{HTTP_HOST}/$1 [R=301,L]

ほかにもまだ使えそうな転送設定があれば、この記事で追加していくようにします。
最後まで読んでいただき、ありがとうございました★

関連記事

コメントを残す