本記事ではPHPのリダイレクトについて解説します。
ブログやWebサイトを構築する際はリダイレクトを行いユーザーを誘導する場面が多くあります。
PHPの機能の中でも頻出なのでやり方を覚えておきましょう。
リダイレクトとは?
リダイレクトとは特定のページに訪れたユーザーを他のページに自動的に転送させることです。
たとえば、ブログのURLを変更した際にリダイレクト処理を使って、ユーザーを新しいページに誘導させたい場合があります。
リダイレクト処理を行わないと、古いページを訪れた際に404エラーが表示されてしまいます。
せっかく自サイトに訪れたユーザーが去ってしまい、機会損失が発生してしまいます。
また、「新しいサイトはこちらです」とリンクを貼っておく手もありますが、それよりもリダイレクトによって自動遷移させた方が、ユーザーの離脱率を下げることが可能です。
PHPでリダイレクトを行う方法
PHPでリダイレクト処理を行う方法について解説します。
以下の2つの手順に従って解説していきましょう。
- 通常のリダイレクトを行う
- 301リダイレクトを行う
1)通常のリダイレクトを行う
まず、通常のリダイレクト処理を行う方法について解説します。
リダイレクト処理をPHPで行う場合はheader関数を使います。
関数って何?という方は、PHP基礎編8:頻繁に使う処理は関数としてまとめようを併せてお読みいただけると幸いです。
○コード例
<?php
header("Location:https://www.canit.jp/");
exit();
?>
○実行結果
header関数の引数に「Location:【URL】」と記述することで、そのURLに自動遷移させることが可能です。
上記ではCANITのトップページに自動遷移させるようにしています。
これがリダイレクトのもっとも基本的な処理です。
2)301リダイレクトを行う
続いて、301リダイレクト処理を行う方法について解説します。
301リダイレクト処理とは遷移先のURLが今後も使われ続けるときに利用する転送処理のことです。
また、302リダイレクトというものもあります。
302リダイレクトは遷移先のURLを一時的に使う場合に利用する転送処理です。
301リダイレクトと302リダイレクトはどちらも自動遷移ですが、「遷移させる理由」が異なるというわけです。
301リダイレクトには1つのメリットがあります。
それは、旧ページのSEO的評価を新規ページに引き継がせられるということです。
つまり、旧ページが上位表示されていれば、新規ページも上位表示されやすくなります。
301リダイレクトを使わない場合、新規ページはSEO的評価をまったくされず、0から評価を上げなくてはいけなくなります。
そのため、301リダイレクトであることを明示する必要があります。
PHPで301リダイレクトを行うには次のようにします。
○コード例
<?php
header("Location:https://www.canit.jp/", true, 301);
exit();
?>
○実行結果
上記ではheader関数の第2引数に「True」を指定し、第3引数に「301」を指定しています。
こうすることで301リダイレクト処理を行うことが可能です。
PHPでリダイレクトを行う際の注意点
PHPでリダイレクト処理を行う場合、いくつか気をつけるべき点があります。
気をつけるべき点は次の3つです。
- リダイレクト処理の後はexitを
- リダイレクト前にHTMLタグを置くのはNG
- リダイレクト前にechoで出力するのはNG
1つ1つの注意点について詳しく解説していきます。
1)リダイレクト処理の後はexitを
先程のソースコードにはheader関数の後に「exit();」が書かれています。
exit関数を使うと、PHPの処理をそこで終了させることが可能です。
リダイレクト処理の後はexitを行い、PHPの処理を終了させるのが一般的です。
exitしなくてもリダイレクトは行われますが、すでにユーザーはそのページにいないのにPHPが動き続けている意味はありません。
Webサーバのリソースの無駄遣いになりますので、exitして処理を終了するのが良いです。
2)リダイレクト前にHTMLタグを置くのはNG
PHPはHTMLの中に組み込んで書くことが可能です。
ただし、リダイレクト処理を行う場合、リダイレクト処理の前にHTMLタグを記述するのはNGです。
たとえば次のようにです。
○コード例
<B>aaa</B>
<?php
header("Location:https://www.canit.jp/");
exit();
?>
なぜ駄目かというと、何らかの情報が出力された段階でHTTPヘッダが送信されてしまうためです。
header関数を使う前にHTTPヘッダを送信してしまうと、リダイレクトされなくなってしまいます。
3)リダイレクト前にechoで出力するのはNG
同じように、リダイレクト処理の前にechoやprintなどで文字列を出力するのはNGです。
文字列を出力した段階でHTTPヘッダが送信されてしまいます。
○コード例
<?php
echo “Hello World!!”
header("Location:https://www.canit.jp/");
exit();
?>
上記のようにheader関数の前でechoを使ってはいけません。
まとめ
本記事ではPHPのリダイレクトについて解説しました。
リダイレクトとはどういった処理なのかお分かりいただけたかと思います。
リダイレクト処理はJavaScriptでも可能ですが、PHP側でもheader関数を使えば可能です。
ただし、header関数の前に出力を行ったりHTML文を書いたりすると、エラーが表示される可能性があるので注意してください。