Webサイトのリニューアルや移転など、さまざまな理由でリダイレクト設定が必要になることがあります。
本記事では、サーバーサイドでのリダイレクト設定方法、301と302リダイレクトの適切な使い方やSEOへの影響にも紹介していきます。
リダイレクトとは
リダイレクトとは、Webサイトや特定のページにアクセスしたユーザーを、強制的に別のページへ転送する設定のことです。
リダイレクトの重要性と目的
リダイレクトを行なう具体的なメリットは、以下の通りです。
ブックマークやリンクの維持:
リダイレクトを利用することで、URLが変更されても、以前のブックマークやリンクからアクセスできます。これにより、ユーザーは手動でブックマークを変更したり、リンクを修正したりする必要がありません。一時的なアクセス制御:
メンテナンスやリニューアルなどの作業中に、対象のページへのアクセスを制御したい場合、リダイレクトを使用することができます。リダイレクト設定によって、一時的にページへのアクセスを制限できます。検索エンジンの評価の引き継ぎ:
URLが変更されても、リダイレクトを適切に設定することで、検索エンジン(例: Google)からの評価やランキングを引き継ぐことができます。これにより、新しいURLでも以前のURLの評価や検索結果の順位を保持することができます。
リダイレクトは、ウェブサイトの管理や改善において非常に重要な役割を果たしています。
それによって、ユーザーエクスペリエンスを維持したり、アクセス制御を行ったり、検索エンジンの評価を保持したりすることができます。
リダイレクトの種類
リダイレクトには、301リダイレクト、302リダイレクト、303リダイレクトなど、様々なステータスコードを伴う形式が存在します。
これらのステータスコードはブラウザに対してリダイレクトの種類や意図を伝え、適切な動作を促します。
代表的なリダイレクトとしては、ステータスコードが「301」の場合は「301リダイレクト」と呼ばれ、ステータスコードが「302」の場合は「302リダイレクト」と呼ばれます。
それぞれ異なる役割や挙動を持っており、ウェブページのリダイレクトにおいて重要な役割を果たしています。
今回はこれらの代表的なリダイレクトについて詳しく説明していきます。
301リダイレクト
301リダイレクトとは、WebサイトやページのURLが完全に変更された場合に使用される仕組みです。主に以下のような状況で301リダイレクトが設定されます。
Webサイトがリニューアルや移転され、URLやドメインが変更された場合。
URLが正規化され、一貫性を持たせるために変更された場合
httpからhttpsへのSSL化が行われた場合
これらの場合、古いURLは将来的に使用されないため、301リダイレクトを設定する必要があります。
301リダイレクトを設定すると、Googleなどの検索エンジンは古いページの評価を新しいページに引き継いでくれます。
また、検索エンジンではリダイレクト後の新しいURLが表示されるようになります。
302リダイレクト
302リダイレクトは、一時的にページの転送が必要な場合に使用されるリダイレクト設定です。
301リダイレクトとは異なり、転送前のページを引き続き活用するため、検索エンジンでは古いページが表示されます。
以下のような場面で302リダイレクトが必要となります。
Webサイトやページのメンテナンス中の場合
WebサイトでA/Bテストを行う場合
ユーザーのデバイスに応じて異なるページを表示したい場合
メンテナンスやA/Bテストが終了したら、リダイレクトを解除して元のURLに戻します。
また、デバイスに応じてページを切り替える場合は、元のURLと転送先のURLの両方を使用します。
302リダイレクトは一時的なリダイレクトが必要な場合や、転送前と後の両方のページが必要な場合に適しています。
ただし、301リダイレクトが適切な場合に302リダイレクトを設定するのは、検索エンジンからのマイナス評価につながってしまいます。
そのため、どちらのリダイレクト設定が適切であるか注意が必要です。
リダイレクト設定方法
リダイレクトの設定方法には、次のような方法があります。
「サーバーサイドリダイレクト」:
.htaccessやPHPを使用する方法です。サーバーサイドでの処理によってリダイレクトを行います。「クライアントサイドリダイレクト」:
meta refreshやJavaScriptを使用する方法です。クライアント(ウェブブラウザ)側での処理によってリダイレクトを行います。
ただし、クライアントサイドリダイレクトは、検索エンジンの評価やアクセス解析などにおいて不具合のリスクがあります。
そのため、サーバーサイドリダイレクトが設定できる場合は、できるだけクライアントサイドリダイレクトは避けるべきです。
今回は、サーバーサイドリダイレクト設定の方法をご紹介します
「.htaccess」を使ったリダイレクト設定
.htaccessファイルの有効範囲と設置場所について説明します。.htaccessファイルは、配置したディレクトリとそのサブディレクトリ全体に適用されます。
例えば、ウェブサイト全体でリダイレクトを有効にする場合、.htaccessファイルをウェブサイトのトップレベル(ルート)に配置します。
しかし、AとBというサブディレクトリが存在する場合、Aに.htaccessファイルを配置してもBにはリダイレクトは適用されません。
この場合、AおよびAのサブディレクトリのみにリダイレクトが適用されます。
単体ページのリダイレクト
1 2 3 4 5 6 7 8 9 10 11 12 | <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^ファイル名$ 転送後のフルパス [リダイレクトの種類] </IfModule> #before.htmlをbrisk.jp/after.htmlに飛ばしたいときの記述は以下のようになります。 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^before.html$ https://brisk.jp/after.html [R=301,L] </IfModule> |
ディレクトリをリダイレクト
1 2 3 4 5 6 7 8 9 10 11 12 | <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^ディレクトリ名/(.*)$ /転送先ディレクトリ名/$1 [リダイレクトの種類] </IfModule> #/before/をすべて/after/に転送する場合は、以下のようになります。 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^before/(.*)$ /after/$1 [R=301,L] </IfModule> |
http://からhttps://にリダイレクト(SSL化)
1 2 3 4 5 6 7 | <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> |
特定のファイルタイプのリダイレクト
1 2 3 4 5 6 7 | #media/ディレクトリ内の.jpg、.png、.gifファイルを/images/ディレクトリにリダイレクトしています。 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^media/(.*\.(jpg|png|gif))$ /images/$1 [R=301,L] </IfModule> |
URLパラメータを含むリダイレクト
1 2 3 4 5 6 7 | <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ # クエリパラメータ id の値が数値である条件を指定 RewriteRule ^article.php$ /new-article/%1? [R=301,L] # article.php へのリクエストを /new-article/{id} へリダイレクト </IfModule> |
特定のIPアドレス以外をメンテナンスページへリダイレクト
1 2 3 4 5 6 7 8 | <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000$ # ホワイトリスト以外のIPアドレス RewriteCond %{REQUEST_URI} !/maintenance\.html$ # メンテナンスページ以外のリクエスト RewriteRule ^(.*)$ /maintenance.html [R=302,L] # メンテナンスページへリダイレクト </IfModule> |
スマホなら/sp/へリダイレクト
1 2 3 4 5 6 7 8 | <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} !/sp/ # /sp/ ディレクトリ以外のリクエストに適用(ループ防止) RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC] #デバイスがスマホである条件を指定 RewriteRule ^(.*)$ /sp/$ [R=302,L] # /sp/ ディレクトリへリダイレクト </IfModule> |
PHPを使ったリダイレクト設定
PHPを使用したリダイレクト設定において、リダイレクトは実行されたPHPファイル内でのみ有効です。
具体的な手順は以下の通りです。
まず、PHPファイル内でheader関数を利用してリダイレクトを行います。この際、適切なステータスコード(例: 301、302)とリダイレクト先のURLを指定します。リダイレクトが行われた後は、それ以降のプログラム処理は不要なので、exit関数を使用してプログラムを終了します。
また、文字列の出力が発生すると自動的にheaderが送信されてしまうため、header関数の前に改行やスペースなどの文字列が出力されないように注意しましょう。
以下の例では、共通ファイルにリダイレクト設定を記述する方法を紹介します。
単体ページ・ディレクトリをリダイレクト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $redirects = array( #before.htmlをbrisk.jp/after.htmlに飛ばしたいときの記述は以下のようになります。 '^/before.html$' => 'https://brisk.jp/after.html', #/before/をすべて/after/に転送する場合は、以下のようになります。 '^/before/(.*)$' => '/after/$1', ); foreach ($redirects as $pattern => $target) { if (preg_match('@'.$pattern.'@', $_SERVER['REQUEST_URI'])) { $redirect_target = preg_replace('@'.$pattern.'@', $target, $_SERVER['REQUEST_URI']); if (strpos($redirect_target, 'http' ) === FALSE ) { $redirect_target = 'https://' . $_SERVER['HTTP_HOST'] . $redirect_target; } header('HTTP/1.1 301 Moved Permanently'); header('Location: '.$redirect_target); exit; } } |
このコードでは、$redirects配列にリダイレクトのパターンと対応するターゲットを定義します。
foreachループを使用して、リクエストされたURLがパターンに一致するかどうかを確認し、一致する場合はリダイレクトを行います。
http://からhttps://にリダイレクト(SSL化)
1 2 3 4 5 6 7 8 | if (empty($_SERVER['HTTPS'])) { //SSLでなかったらSSLのページにリダイレクトする header("HTTP/1.1 301 Moved Permanently"); header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"); exit; } |
使い分け
最も効率的なリダイレクト設定を行う場合、ウェブサーバーレベルでの迅速な応答が重要です。
そのため、基本的には(Apacheを使用している場合).htaccessファイルにリダイレクトを記述することが推奨されています。
しかし、複雑な設定や条件分岐が必要な場合は、.htaccessの制約により限定されることがあります。
そのような場合には、より柔軟な表現が可能なPHPを使用してリダイレクト処理を行うことになります。PHPを使うことで、複雑な条件や処理を行うことができます。
まとめ
リダイレクト自体はSEOに影響を与えることはありませんが、誤った設定方法を適用するとサイトの評価を失ったり悪影響を与える可能性があります。
そのため、正しい知識を持ってリダイレクトを行うことが重要です。301リダイレクトは永久的な移転を表し、302リダイレクトは一時的な転送を表します。
どちらのリダイレクトも目的に合わせて適切に使用しましょう。
また、複数の箇所でリダイレクト設定をするとサイト内のリダイレクトを管理することが難しくなるため、注意が必要です。
双方にコメントを残したり、適切な工夫を行うことで管理のしやすさを向上させましょう。
正確なリダイレクト設定とその管理は、サイトの移行や改善において重要な要素になると思います。