自分のブログを運営する以上、アクセスがどれくらいあるのかは知りたい物です。無料で使えるアクセス解析はありますが、どうもデータが正確に取得できていないような気がするので自作したことがあります。

作成方法ですが、JavaScriptとPHPを組み合わせます。JavaScriptならアクセス元のページや実際にスクロールされたかどうかもわかります。

以下のスクリプトを書くことでページへのアクセスがあったこと、リンクがクリックされたこと、スクロールされたことを検出することができます。スクロールされるたびに記録しようとするとサーバーに負荷がかかるのでスクロールされたら30秒間は記録しないことにします。アクセスが多いサイトの場合はこの時間は長めにとったほうがよいと思われます。

またjQueryを使うので、この1行が必要です。

これをHTMLの最後の方に書きます。記述例として

analyze.jsの内容を示します。

次にPHPですが、$_GETをつかってアクセスされたページ、アクセス元(ブックマークなどの場合はなにも取得されない)、リンクがクリックされた場合はリンク先のurlを取得することができます。

それから$_SERVER[‘HTTP_REFERER’]でリファラーを取得しています。これなら不正なリクエストがおこなわれた場合、おかしなログが記録されることがありません。

これでアクセス解析をおこなうことができていたのですが、ある日を境にアクセスが激減。1年半にわたって運営してきた当サイトもついにGoogleから嫌われたのかと思ったら、Googleアナリティクスではアクセスはこれまで同様に存在することがわかりました。それからJavaScriptで作成したゲームを公開しているページは何の問題もなく動いています。

なぜだろう? このかんやったことといえば

PHPを8.0にアップデート
ワードプレスを5.8にアップデート

などがありました。

それからサーチコンソールで CLS(Cumulative Layout Shift)が0.1を上回っていると指摘されたので、それを解消するプラグインを入れたのもこの頃です。

それでこれまで動いていたものが動かなくなったのかな?

トップページのHTMLをそのままコピーして別の場所にアップロードしてアクセス解析ができるかやってみると動かない。そこで1行ずつ削除して調べていると、ある行が原因であることがわかりました。JavaScriptを読み込んでいる部分なのですが、それをみてみると、その先頭部分にこんなものが・・・。

jQuery.noConflict()

これは$関数の動作が先に定義されている動作に戻るというもので、$関数を定義する複数のライブラリを用いた際に衝突することを防ぐものです。noConflictを使った場合、jQueryオブジェクトの呼び出しには明確に’jQuery’と書かなければなりません。

ということで以下のように書き直すと動くようになりました。めでたしめでたし。