[試] WordPress Popular Postsで読者からのアクセスのみカウントさせる方法

[試] WordPress Popular Postsで読者からのアクセスのみカウントさせる方法
photo credit: Ѕolo via photopin cc

当サイトでは、人気記事を表示させるためにWordPressプラグイン WordPress Popular Postsを使用しています。

当サイトでの事例ですが、読者ではなくプログラムからのアクセスもカウントされてしまい、本来なら全く見られていない記事が人気記事として上位表示される事象が発生しました。

そこで、回避方法としてより正確にアクセス数をカウントする方法(WebブラウザやRSSクライアントからのアクセスのみをカウントする方法)を紹介したいと思います。

この問題は、誰もが直面するわけではありません。このエントリは、あくまで当サイトで発生した事象に対する回避策の紹介です。同じ問題が発生していない場合は、手を入れない方がよいので注意して下さい。

SPONSORED LINK

アウトライン

WordPress Popular Postsとは

WordPress Popular Postsは、WordPressで人気記事を表示させるための有名なプラグインです。おそらくWordPressを使用している方なら一度は耳にしたことがあるかと思います。

このプラグインは、クライアントからアクセスがあった際にページビュー数やコメント数などをデータベースに保存し、そのデータを利用することで人気のある記事を順番に表示してくれます。

読者以外からのアクセスもカウントされ、人気記事の順位が不正な状態に

発生事象

当サイトでの事象ですが、ある時からアクセスの少ない記事が人気記事として上位表示されるようになりました。Google Analyticsのレポートからも大きく乖離していて、想定していたものとは大きく異なる状態となりました。

method-count-only-number-of-access-from-person-with-wordpress-popular-posts-02

原因

アクセス解析を行った結果、WordPress Popular Postsが、読者(WebブラウザやRSSリーダー等)からのアクセスだけでなく、プログラム(BOTやプラグイン)からのアクセスをカウントしてしまっていることが原因でした。

プログラムからのアクセス数が含まれた結果、本来とは異なる記事のPV数が多くなり、読者からのアクセスが少ない記事でも人気記事として表示されるというオチでした。

これは、WordPress Popular Posts(当記事投稿時の最新バージョン)にこれらのアクセスを判別するロジックが含まれていないためです。

対応

アクセス元の判別ロジックを追加し、BOTやプラグイン以外、つまりWebブラウザやRSSリーダ経由のアクセスのみをカウントする様にWordPress Popular Postsのコードを修正します。

クライアントを判別するためのモジュールは自作しても良いのですが、出来合いの実績のある物を利用した方が効率的なので、以下WordPressのアクセス解析プラグインであるWassUp Real Time Analyticsのモジュールを活用します。

WassUp Real Time Analyticsのモジュールを活用したWordPress Popular Postsの修正の流れは、以下の通りとなります。

  1. WassUp Real Time Analyticsをダウンロード
  2. ユーザエージェント判別モジュール uadetector.class.phpの取得とアップロード
  3. WordPress Popular Postsのwordpress-popular-posts.phpのロジック修正
  4. WordPress Popular Postsの蓄積されたデータの初期化

コードの修正及びWordPress Popular Postsのデータの初期化を行うので、実施する場合は事前にバックアップを行い、万が一問題が発生した場合にすぐに復旧できる様、準備しておくことをおすすめします。

WassUp Real Time Analyticsをダウンロード

下記ページよりWassUp Real Time Analyticsのプラグインをダウンロードします。

WordPress › WassUp Real Time Analytics « WordPress Plugins

ユーザエージェント判別モジュール uadetector.class.phpの取得とアップロード

ダウンロードしたWassUp Real Time Analyticsのアーカイブを解凍すると、libフォルダ内にuadetector.class.phpというファイルがあるので、それをFTP等でWordPress Popular Postsのディレクトリ直下にアップロードします。

WordPress Popular Postsのディレクトリは、通常だと/wp-content/plugins/wordpress-popular-postsになります。

WordPress Popular Postsのwordpress-popular-posts.phpのロジック修正

WordPress Popular Postsのアクセス数をデータベースに保存する部分に上記モジュールを用いたアクセス元のチェックロジックを追加し、プログラムによるアクセスの場合はカウントしないようコードを修正します。

具体的には、WordPress Popular Postsのディレクトリ直下にあるwordpress-popular-posts.phpのwpp_ajax_update()関数とwpp_update($content)関数を修正します。

上記の更新ロジックにユーザエージェント判別モジュール uadetector.class.phpを使用したクライアントの判別ロジック(下記)を追加します。

実際にクライアントの判別ロジックを追加し、修正したコードが以下になります。

WordPress Popular Postsの蓄積されたデータの初期化

各記事のPVデータが不正なままだと本来の順位表示に戻るまで時間がかかるので、WordPress Popular Postsの設定画面よりキャッシュ(WordPress Popular Postsのテーブルに保存されているデータ)を初期化します。

注意:WordPress Popular Posts用のこれまで蓄積された各記事のPVデータが消去されます。

以下の赤枠のボタンをクリックします。

method-count-only-number-of-access-from-person-with-wordpress-popular-posts-03

対応した結果

以上の修正で読者(Webブラウザ、RSSリーダ等)からのアクセスのみカウント反映されるようになります。この対応により本来あるべき順位で人気記事が表示される様になりました。

まとめ

WassUp Real Time Analyticsのユーザエージェント判別モジュール uadetector.class.phpを適用し、WordPress Popular Postsにおいて読者からのアクセスのみをカウントする方法を紹介しました。