リダイレクタを利用した値の取得
たまには技術的なことだけを書いてみることをしたみたいなぁと思います。今回はこのブログに気分転換に実装したリダイレクタを利用した外部からの計測パラメータの取得方法についてです。
何をしようとしたか?
RSSやメール、Facebookなどいくつかのチャネルからの流入を計測していたりします。通常のサイトであればさほど気にする必要もないのですが、ブログの性質上ブックマークもされたりします。
最近ではCanonicalタグが設定されていればそれを利用しますよというSocial Bookmark サービスもありますが、とはいえGetパラメータごとURLとして設定されてしまうことは多い模様。
Getパラメータごと設定されてしまうと、別のURLとして認識されてしまうので、ちょっともったいないんですよね。今回はそれをクリアするための第一歩としてリダイレクタを利用してパラメータを取得してしまおうという方法です。
リダイレクタの作成
今回は、先ほどあげたようなURLがコントロール出来るものについては、リダイレクタにパラメータを設定して遷移をさせてパラメータ取得をしてしまおうというものです。具体的な動きは下記のような感じです。
- リダイレクタに記事番号とチャネルコードをGetパラメータとして設定して遷移
- リダイレクタでそれぞれのパラメータを取得
- チャネルコードについてはCookieに値をセット
- 記事番号のURLへ301リダイレクト
こうすることでリダイレクト先(誘導したい先)では余計なGetパラメータを表示しなくて済むことになります。今回はPHPで行っていますが、似たようなものはHTML作れたりします。
//GETパラメータの取得 $archiveID = $_GET["entryid"]; $refChannel = $_GET["refchannel"]; //Cookieへの値の設定 if($refChannel){ setcookie('ref_channel', $refChannel, 0, '/'); } //リダイレクト処理 if($archiveID){ $strRedirectURL = "http://an-k.jp/blog/archives/".$archiveID; }else{ $strRedirectURL = "http://an-k.jp/blog/"; } $strRedirectURL = "Location:".$strRedirectURL; header("HTTP/1.1 301 Moved Permanently"); header($strRedirectURL);
受け側の処理は簡単。セットしたCookieがあればそれを取得して、Cookieは削除してしまうだけ。JavaScriptで簡単に出来ます。
RSSの設定
FacebookやTwitter、メールでURLを記載する場合は手動なのでそのたびにURLを生成すれば良いのですが、このブログの場合はWordpressを利用しているのでRSSの場合は記事を更新するごとに自動的に出力されることになります。
ということでそこの修正について。Wordpressをインストールしているディレクトリにwp-includesというのがあります。RSSを生成するモジュールはその中に含まれています。RSSのフォーマットによっていくつか修正する必要があるのですが、まずはfeed-rss.phpを修正します。
このファイルを開いて各エントリの部分を修正しました。Ver3.1の場合は下記のような感じで修正しました。(Blogルートとか取ってくればもっとかっこいいはず)
<?php while (have_posts()) : the_post(); ?> <item> <title><?php the_title_rss() ?></title> <description><![CDATA[<?php the_excerpt_rss() ?>]]></description> <link>http://an-k.jp/blog/red.php?refchannel=rss&entryid=<?php the_ID() ?></link> <?php do_action('rss_item'); ?> </item> <?php endwhile; ?>
注意点は1つだけです。Getパラメータを複数設定する時に&を利用するのですが、XMLで出力する際に、&をそのまま出力するとエラーになります。ここは&を設定することで回避できます。
まとめ
という感じで取り急ぎのリダイレクタを気分転換に作ってみました。Getパラメータについてはソーシャルブックマークを頻繁にされるようなサイトでなければそれほど気にするものでもありません。
なのであくまでこれは個人的な実装であるのは確かなのですよ。そしてここまで書いてみてから気づいたのですが、SiteCatalyst前提で書いてました。。まぁたまにはいいか。
2011年3月24日追記
すっかり書くのを忘れてしまっていたのですがPHPなどのプログラムを利用した301リダイレクトの場合はリファラはリダイレクト前のものが引き継がれます。また、戻るボタンもきちんと機能します。
HTMLで行う場合はMETAリフレッシュやらJavaScriptを利用してリダイレクトを行うことになるのですが、この場合は遷移先で取得されるリファラはリダイレクトのHTMLのURLとなってしまいます。ここ注意点です。
ちなみにSiteCatalystであればs.referrerってのを利用するとリファラを上書きできるのでHTMLの場合はこのあたりを駆使すれば似たようなことが出来ます。