ドメインが変わったり、カテゴリーが途中で変わったり、止むを得ず記事を削除しないといけなくなるなど、ブログを運営しているとページURLが変わる場面というのがけっこう出てきます。
以前のサーチコンソールの記事の中でも少し触れていますが、ブログの引越しなどでURLが変わったときには、新しいURLヘと適切にリダイレクトしておかないと、SEOにも影響が出てくることがあります。
また、URL正規化はブログの移転だけではなく、例えばwwwをつけないURLに統一したり、http://のアクセスをhttps://へ統一(常時SSL)するといったように、ほかにも利用シーンはけっこうあります。
なので今回、なるべくよく利用するものに絞って.htaccessの具体的な書き方をまとめていますので、ちょっとややこしい話も出てきますが、ぜひ参考にしてみてくださいね★
(※なお、今回もWordPressのブログを使っているという前提で進めます。)
目次
ページURL変更時の.htaccessでのリダイレクトについて
まずはページURLの変更が発生した場合、.htaccessでどのようなリダイレクトの書き方をしたら良いのか?からまとめていきます。
先に、リダイレクトのポイントからおさえておきましょう。
- 現在のページURLを新しいURLへ引き継ぐ必要がある場合は、リダイレクトする
- 新しいURLにリダイレクトさせないページについては、404を返すなどする
しかし、「現在のページURL」一口にいっても、以下のパターンごとにリダイレクト方法が変わってきます。
- ブログ全体
- ディレクトリ単位(特定のディレクトリ)
- ページ単位(特定のページ)
また、リダイレクトには「301」と「302」のようなステータスコードがよく使われるので、ここも必要に応じて使い分けないとSEO上、思わぬ悪影響を受ける可能性があります。
ステータスコード | 意味と使い方 |
---|---|
301 | 恒久的な移転(もう旧URLには戻らない前提) |
302 | 一時的な移転(やがて旧URLに復旧する前提) |
503 | サービス停止中(メンテナンス画面を一時的に出す場合) |
404 | Not Found(ページが存在しない場合) |
と、色々書いてきましたが、
- まず、そもそも新しいページURLへのリダイレクトが必要かどうか?
- リダイレクトが必要な場合、ブログ全体なのか、もしくはディレクトリやページ単位での転送になるのか?
- あと、その転送は「恒久的」でもう昔のURLに戻すことはないのかどうか?もしくは「一時的」なものなのか?
この辺りの条件に応じて、以下の.htaccessの書き方で該当するものを参考にしてもらえればと思います。
.htaccessで301リダイレクトの書き方
非常によく使われる.htaccessでの301リダイレクトの例から、いくつか紹介させていただきます。
別ドメイン(sample.com)へブログ全体のリダイレクト
ブログのURLが変わってしまう場合のリダイレクトです。
ブログ内の構造(パーマリンクとか、カテゴリーのスラッグとか)には変更はなく、主にドメインが変わる際のお引越しに必要なリダイレクトです。
旧URL | http://old_domain.com/ |
---|---|
新URL | http://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リダイレクトする場合は、以下のような書き方になります。
旧URL | http://sample.com/old_dir/ |
---|---|
新URL | http://sample.com/new_dir/ |
.htaccessの書き方 |
RewriteEngine On RewriteRule ^old_dir(.*)$ /new_dir$1 [R=301,L] |
ページ単位でのリダイレクト
item.html、page.htm、privacy.phpなど、ページ単位で新しいURLへとリダイレクトする方法です。
旧URL | http://old_domain.com/old_page.html |
---|---|
新URL | http://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でメンテナンス画面へ一時的にアクセスを集中させる書き方もまとめておきます。
- 全てのアクセスをメンテナンス画面へリダイレクトさせる
- 特定のディレクトリ(wp-adminだけ)はリダイレクトさせない
- 特定のIPアドレスだけ、メンテナンス画面にリダイレクトさせない
全てのアクセスをメンテナンス画面へリダイレクト
元URL | http://sample.com/ |
---|---|
転送先URL | http://sample.com/maintenance/ |
.htaccessの書き方 |
ErrorDocument 503 http://sample.com/maintenance/ RewriteEngine On RewriteRule ^.*$ – [R=503,L] |
特定のディレクトリ(wp-adminだけ)はリダイレクトさせない
RewriteCond %{REQUEST_URI} !(^/wp-admin/)
の部分で除外するディレクトリを指定しています。
この指定は複数行にわたって指定できるので、いくつか除外したいディレクトリがあれば改行して追記していくようにします。
元URL | http://sample.com/ |
---|---|
転送先URL | http://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アドレスを指定するうことができます。
元URL | http://sample.com/ |
---|---|
転送先URL | http://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 |
---|
この理由は、301リダイレクトの目的はあくまで重複コンテンツの集約であって、どこにでもやたら滅多らリダイレクトして良いというものではないからです。
.htaccessでそのほかのURL正規化の方法
過去の記事でもいくつか紹介済みのものもありますが、改めてここでまとめてご紹介します。
- wwwあり/なしで統一
- HTTPSへのアクセス統一(常時SSL)
- index.html(index.php)なしに統一
wwwありでURLを統一
まずはURLをwwwありに統一するための.htaccessの書き方です。
旧URL | http://sample.com/ |
---|---|
新URL | http://www.sample.com/ |
.htaccessの書き方 |
RewriteEngine on RewriteCond %{HTTP_HOST} ^sample\.com$ RewriteRule ^(.*)$ http://www.sample.com/$1 [R=301,L] |
wwwなしでURLを統一
続いて、wwwなしでURLを統一するには、.htaccessに以下のような記述を足します。
旧URL | http://www.sample.com/ |
---|---|
新URL | http://sample.com/ |
.htaccessの書き方 |
RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.sample\.com$ RewriteRule ^(.*)$ http://sample.com/$1 [R=301,L] |
HTTPSへのアクセス統一
http://でのアクセスをhttps://へとリダイレトする方法です。
「常時SSL」とも呼ばれ、このブログでも以下の関連記事でその方法などを詳しく説明していますが、レンタルサーバーを借りたらなるべく早くこのSSL対応をやっておいた方が良いでしょう。
旧URL | http://sample.com/ |
---|---|
新URL | https://sample.com/ |
.htaccessの書き方 |
RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] |
URLをindex.htmlなしに統一
http://ドメイン名/index.html(index.php)でやってくるアクセスを、http://ドメイン名/へとリダイレクトさせる方法です。
これもWordPressだとあまり気にすることがないリダイレクトですが、htaccessの書き方だけここで紹介するようにします。
旧URL | http://sample.com/index.html |
---|---|
新URL | http://sample.com/ |
.htaccessの書き方 |
RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.(html|php) RewriteRule ^(.*)index.(html|php)$ http://%{HTTP_HOST}/$1 [R=301,L] |
ほかにもまだ使えそうな転送設定があれば、この記事で追加していくようにします。
最後まで読んでいただき、ありがとうございました★