最近ブログを積極的に更新し始めたのですが、
記事が増えるとやはり見てくれる人も多くなるという事がわかり、少し驚いています。
と言っても、1日に2桁人数ぐらいの話なので、まだまだ低次元の世界観でやっています。
アナリティクスを見てみると、リファラーが(direct)になっているのがわりと多く、
検索以外でどこから人々が来ているのかが分からない状況です。
このブログ用のTwitterアカウントも先日作ったのですが、実質のフォロワーさんはまだ1人もいないような状態で、
Twitterでエゴサーチをしてみても、このブログのURLがツイートされてる感じもありません。
社内の共有ツールやチャットで共有されたりとか、可能性はいくらでもあると思いますので、考えてもきりがないのですが、
1つの可能性として、RSSリーダーからのアクセスというのもあるはずです。
このブログの場合だとRSSの可能性はかなり低いと思うのですが、とりあえずRSSからかどうかを判別できないか調べてみた所、
WordPressの場合、プラグインを使う方法を紹介しているブログが見つかったりしました。
そんな方法もあるのかと思いつつ、でもRSSに載るパーマリンクにパラメータを付ければいいだけでは?と思ったので、
この記事では、functions.phpを編集するやり方で紹介したいと思います。
プラグインでやる方法の方が便利な機能もあるかもしれませんので、場合によってはそちらの方が良いかもしれません。
functions.phpにさくっとコピペして、アナリティクスで単純に見分ける方法でよければ、この記事を参考にしてみてください。
前置きが長くなり、大変申し訳ございませんでした。
やりたいこと
RSS用のパーマリンクに独自のパラメータを付加すればいいだろうというのは容易に予想がついたのですが、
調べてみると、どうやらGoogleアナリティクスの「カスタムキャンペーン」という機能で使われるパラメータを利用すると、便利にデータを取る事ができそうです。
カスタムキャンペーン自体は正直あまり良くわからなかったので、カスタムキャンペーン用のパラメータだけをちょっとお借りするという感覚でやっていきます。
カスタムキャンペーンは、utm_source、utm_medium、utm_campaignという3つのパラメータを必ず使用しないといけないみたいなのですが、
今回はキャンペーンとして使用しませんので、とりあえず、パーマリンクに
utm_source=rss というパラメータを付ければ、RSSかどうかの判断はできそうです。
ですが、一応表示の確認のため、utm_mediumも使用してみます。適当に utm_medium=yeah としてみます。
ということで、RSS用のパーマリンクが下記のようになれば目的達成という事にします。
http://noze.space/〇〇〇?utm_source=rss&utm_medium=yeah
functions.phpを編集
RSSを作成しているWordPressのファイル(/wp-includes/feed-rss2.php)を見ると、パーマリンクの所に the_permalink_rss() というテンプレートタグが使われていました。
このテンプレートタグを調べてみると、やはり当然のようにフィルターフックが用意されていました。
このフックを利用して、RSSに使用されるパーマリンクを書き換えれば良さそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function custom_rss_permalink($url) { $rss_param = 'utm_source=rss&utm_medium=yeah'; $parse_url = parse_url($url); $result_url = $parse_url['host'] . $parse_url['path']; parse_str($parse_url['query'], $url_param); if(empty($url_param)) { $result_url .= '?' . $rss_param; } else { $result_url .= '?'; $i = 0; $length = count($url_param); foreach($url_param as $key => $value) { $result_url .= $key . '=' . $value . '&'; if($length === ++$i) { $result_url .= $rss_param; } } } return $result_url; } add_filter('the_permalink_rss', 'custom_rss_permalink'); |
これでRSS用のパーマリンクの末尾にutm_source=rss&utm_medium=yeahというパラメータが追加されたかと思いきや、問題が起こりました。
WordPressはURLを出力する際、エスケープしようとしますので、「&」という文字が「&」に変換されてしまいます。
http://noze.space/〇〇〇?utm_source=rss&utm_medium=yeah にアクセスされても正しくデータが取れませんので、このエスケープ処理を何とかしないといけません。
エスケープさせないためには、remove_filterを使うという手もありますが、これはあまりやるべきではないと思いますので、
RSSのパーマリンクのみ(URLにutm_source=rss&utm_medium=yeahという文字が入っている場合のみ)、パーマリンク内の「&」を「&」に置換するという処理を足してみます。
というわけで、最終的に下記のコードになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
function my_replace_rss_amp($good_protocol_url, $original_url, $_context) { if(preg_match('/utm_source=rss&utm_medium=yeah/', $original_url)) { $good_protocol_url = str_replace('&', '&', $good_protocol_url); } return $good_protocol_url; } add_filter('clean_url', 'my_replace_rss_amp', 10, 3); function custom_rss_permalink($url) { $rss_param = 'utm_source=rss&utm_medium=yeah'; //ここでパラメータを設定 $parse_url = parse_url($url); $result_url = $parse_url['host'] . $parse_url['path']; parse_str($parse_url['query'], $url_param); if(empty($url_param)) { $result_url .= '?' . $rss_param; } else { $result_url .= '?'; $i = 0; $length = count($url_param); foreach($url_param as $key => $value) { $result_url .= $key . '=' . $value . '&'; if($length === ++$i) { $result_url .= $rss_param; } } } return $result_url; } add_filter('the_permalink_rss', 'custom_rss_permalink'); |
このコードをfunctions.phpにコピペすれば、RSSで使用されるパーマリンクの末尾に「utm_source=rss&utm_medium=yeah」というパラメータが追加されるようになります。
「http://ブログのアドレス/feed」を開けば、そのブログのRSSを確認できます。
<item> の中の <link> の中にパーマリンクが入っていますが、その末尾に「utm_source=rss&utm_medium=yeah」が付いているか確認してみてください。
アナリティクスを確認
スマホに適当なRSSリーダーアプリをインストールして、このブログのRSSを登録して、適当な記事を開いてみました。
アナリティクスを確認してみた所、ありました。
■リアルタイム > コンテンツ
■リアルタイム > トラフィック
■集客 > 参照元/メディア
■行動 > すべてのページ(等)> セカンダリ ディメンションで、「集客 > 参照元/メディア」を指定
■行動 > すべてのページ(等)> セカンダリ ディメンションで、「行動 > 完全なリファラー」を指定
「ソース」又は「参照元」に、utm_sourceの値が、
「メディア」にutm_mediumの値が入っている事がわかります。
utm_medium=yeahというパラメータは、どこにどう表示されるかが知りたかっただけなので、実際にはutm_mediumは必要ないのかなと思います。
パラメータのutm_mediumを省くと(
http://〇〇〇?utm_source=rss の状態)、
参照元/メディアの所は、「rss / (not set)」と表示されるようになります。
とにかく、これでRSSから来てるかどうかがわかるようになりました。
この設定を試みてから数日経ちましたが、RSSから来ている人は、驚きの0人でした。
ちなみに
今回の事をやってみて知った事ですが、
RSSリーダーで単にページを開いただけでは、アナリティクスに反映されない場合があるんですね。
これはそのアプリにもよるようですが、
適当に入れたシンプルなRSSリーダーの場合は、普通にアナリティクスに反映されました。
Feedlyで試した所、そのままではアナリティクスに反映されないのですが、タイトルをタップしてFeedly内のブラウザで記事を開くと、アナリティクスに反映されました。
なので、きっちりアクセス解析をしたい場合は、RSSリーダーでは本文を全て表示させないようにする等の工夫が必要になるのかもしれません。
ユーザーにとってはうっとおしいだけですけどね。
One thought to “【WordPress】RSSからのアクセスをアナリティクスで判別できるようにする方法【カスタムキャンペーン機能を少し利用】”