CocoonでPV数が「1」から増えない場合の対処【解決】

Blog Admin
Blog Admin

アクセス集計でうまく数字を記録できていませんでしたが、PHPを少しだけ変えることで、解決できたと思います。

PHP

Cocoon
アクセス集計が1になる件

テーマ独自のアクセス集計機能を使って、人気投稿を表示しております。
管理ページでもなんとなくの数字が見えて、分かりやすく、便利に使っていた機能でした。
急に使えなくなって困るということもありますが、アクセス数がずっと「1」というのを見ていると、なんとも悲しい気持ちになるのですよ。。

コード変更を伴う修正を施しましたので、記録を残します。

カウントが1から増えませんでした

発生していた事象です。
アクセス集計できなかったのではなく、1から増えないという状態でした。

1日のうち1まではカウントされていました。

カウント
1日1ずつ

1件のアクセスでも1。
10件のアクセスでも1。
毎日数十件のアクセスがあったとしても、1週間のアクセス数は7。
そういった状態でした。

テーマが提供してくれている機能ですし、簡易版ということも理解した上ですが。
集計できたほうが何かと便利なので、何とかしたかったのです。

分かったこと と 対策

PHP

ネット情報を調べていくうちに、ある程度のことが分かってきました。
仮定を導き出すことができ、幸いなことに、対策にもたどり着けました。おかげで問題解決でしょう。

今回の事象は解決できたので、仮定は実証されたはずです。

アクセス集計機能では、同一IPからのアクセスはカウントしないことになっています。
1日1までしかカウントしてくれていなかったので、アクセス元IPが同一となってしまっていたのですね。

アクセス集計用のPHPコードがある

Cocoonテーマでの独自集計です。
body の最後に読み込んでいることが分かりました。

実体は「lib/analytics/access.php」です。
ただ、これがどこにどうつながっているのかまでは分かりませんでした。

重複カウントを避けるためIPを使っている

もうひとつ、ページアクセスの集計に関係しそうなファイルたちがあります。
そちらが当たりでした。

page-access というフォルダー内にいくつかのファイルがあります。

ウェブの情報から、ページ情報とIPアドレスを取得してDBに保存し、同じIPからの連続アクセスはカウントしていないことが分かってきました。
上記フォルダー内の access-func.php にて、そのようなコメントやコードを見つけました。
ここでのポイントは、取得しているIPですね。これで、1日の最大値が1という説明がつきます。

サーバー環境がリバプロかLB(仮定)

質問マーク

これは仮定の話です。(が、当たりでしょう。)

アクセス元IPの取得では、PHPの定義済み変数を使っています。
phpMyAdminで集計用のテーブルを見たとき、IPに入っている値がすべて同じでした。
つまり、変数で取得できるIPが毎回同じになっていると仮定できます。
もちろん「IP」項目に入っている値の詳細仕様は分かりませんでしたが、これくらいしか思いつかなかったというのが正直なところです。

毎回同じIPからのアクセスだと判断されて、どれだけアクセスが来ても、1日1アクセスまでしかカウントされないという状態だと想像できました。

おそらく、サーバーが不調になった時に仕様変更したものと考えられます。
ロードバランサー(LB)を導入したのかもしれないと思っています。
サービス提供社に確認したわけではないので詳細は不明ですが。。
リバースプロキシ(リバプロ)で解決するような問題だったとは思えないのです。

対策コードを実装

仮定を導き出せたところで、対策も分かりました。
PHPの定義済み変数の引数を調整すればよさそうです。

テーマファイルを編集しました。
編集前にはバックアップをとりましょう。
できれば動作検証してから本番適用しましょう。

テーマエディターで編集しました。
1行変更のみですが、慎重に。
部分コピペでなるべくリスクを少なく。

マスター側を変えてしまっているので、更新があると先祖返りするかもしれませんね。。

対象ファイル

access-func.php というファイルを変更しました。
パスは「lib/page-access/access-func.php」です。

変更内容

アクセス元IPを記録しているところです。

184行目にある $_SERVER の引数を変更です。
SERVER_ADDR (バージョンアップで 「 REMOTE_ADDR 」になった模様)を HTTP_X_FORWARDED_FOR に変えます。
その他のところには決して触らないように。

変更後
$last_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
変更前
$last_ip = $_SERVER['SERVER_ADDR'];

もくしは

$last_ip = $_SERVER['REMOTE_ADDR'];

動作検証

WordPress

おまけのお話です。
当サイトには、2つの検証環境があります。

  1. ステージング環境
  2. 兄弟サイト

そして、サーバーサービスにて提供されているバックアップ機能があります。

今回はやってみるしかなかったので、兄弟サイトをバックアップして、本番適用してみました。
ちゃんと動いたので、当ブログにも適用という運びでした。
どきどきしましたが。。w

カウントされるようになりました

対策を施してしばらく経つと、アクセス集計で値が増えていることを確認できました。
もっと長い時間で検証していきますが、これで問題ないでしょう。

アクセス集計
対策前
対策後
対策後

人気投稿のランキングも正常化するでしょう。
PC画面で最下部に設置しているものです。

サイトが壊れたりしなくてよかったです。

この投稿を書いたのは・・・
Blog Admin

ガジェットが大好きで、ほぼ毎月何かしら調達しております。
無駄遣い扱いされたくないのと、何かの役に立つかと思い、記録を書くことにしたのでした。

お出かけのときには、スマホを複数台とタブレットとパソコンを持ち歩きます。
両手首にはスマートウォッチです。
こんなスタイルで生活している中での備忘録を書いています。

「Blog Admin」をフォローしてみる
ブログ関連
「Blog Admin」をフォローしてみる

ご意見やご感想などお聞かせください! コメント機能です。

タイトルとURLをコピーしました