前のページに戻る?戻らない?ボタンをphpで実装してみた。

JavaScript の history.back を使うと前のページに戻れるんですが・・

外から来た人は、外に出て行っちゃいます。元いたところに戻るのだから、そりゃそうだ。

サイトの中で他のページを見てくれるようにするには「前のページに戻る」ボタンはとても親切。
ですが、外から来てくれた人が「戻る」ボタンを押して外に出て行ってしまうのはちょっと・・ボタン隠したいな。せっかくサイトに来てくれたのにさよならの出口を用意することになっちゃうのでなんとかしたい。

どこから来たの?をリファラ情報で識別

サーバへリクエストした際に記録される、閲覧したページのURL情報。どのページからリクエストされたのかがリクエストヘッダの中、リファラに残っています。

jsやphpで取得できるので、流入経路の判定などアクセス解析でも使われているこのリファラを使ってみます。

ん?リファラ?
リクエストって何?という方、とってもわかりやすいこちらをどうぞ。

リファラ (referer) :: 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典、だいすきです。
難しいことをわかりやすく書いてくれていて、いつもお世話になってます。

phpでやるよ

スーパーグローバル変数「$_SERVER[‘HTTP_REFERER’]」使ってみました。

<?php 
if (!empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) !== false)) :?>
 <div class="post-detail-button is_prev"><a href="<?= $_SERVER['HTTP_REFERER'] ?>">前のページに戻る</a></div>
<?php endif ?>

サイト内のどこかのページから来た時は「前のページに戻る」ボタンを表示して、そうでない場合はボタンを非表示に。

そうでない場合というのは、ブックマーク、メール、他サイトなどのリンクから飛んで来たときや、検索からの流入で、サイトの中からではなく外から来たとき。そういうときは「前のページに戻る」ボタンを非表示にしています。

URLの情報は $_SERVER 変数の中に格納されていて、$_SERVER[‘HTTP_HOST’]; でドメイン名を取得。
リファラが取れないケースもあるので「!empty($_SERVER[‘HTTP_REFERER’])」っていうふうにして、「strpos」で文字列チェック、見つからなかった場合にはfalseを返しています。

記述短くしてみよう。

<?php
// これは上の方に書いたよ
$h = $_SERVER['HTTP_HOST'];
$r = $_SERVER['HTTP_REFERER']
?>
<?php
// これがボタンの記述だよ
if (!empty($r) && (strpos($r, $h) !== false)) :
?>
 <div class="post-detail-button is_prev"><a href="<?= $r ?>">前のページに戻る</a></div>
<?php endif ?>

前のページへ戻るときに、ブラウザバックで戻るユーザーも多いと思いますが、そこに押したくなるようなボタンがあったら押してくれるのかもしれません。

もっと見るとか、関連した記事が出てくるとか、サイトの中をずーっと見てくれるような楽しい道筋を用意しておくって大事なことなのかも。

SHARE

  • *
  • *
  • *