Matomoに限らずアクセス解析では避けて通れないいわゆる1ページ素通りのアクセス。そのほとんどが海外の通常回線からのアクセスで、例えばフォームプラグインに脆弱性が見つかれば「/contact」や「/問い合わせ」といった、企業サイト以外では設置しないことの多いページを類推してアクセスして、何かを探るのが目的という場合も多いですね。
それらを除外して、できるだけきちんとアクセスしてきたものだけをレポートで見たい!今回はMatomo On-Premise(インストール型のMatomo)のトラッキングコードを少し改造して、ページ表示後にパソコンやスマートフォンで何かしらの操作があった場合にのみデータを送信する(アクセス解析に含める)方法を紹介します。
まずは以下が通常のMatomoのトラッキングコードです。
MatomoのサイトアドレスとIDを変更してフッターなどに設置すればOKですし、Matomoのサイト管理ページからも正確なトラッキングコードを得ることができます。
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="MatomoのURL";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', 'トラッキングコード内のID']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
そして以下が、アクションがあった場合にのみMatomoへデータを送るためのコード。
通常のトラッキングコードを出力するのは同じですが、前述したようにページを表示した後で、例えばマウスのスクロール動作やスマホのスクロールやタップ動作などがあった場合のみデータを送るようにしています。
<!-- Matomo (Delayed Loading) -->
<script>
(function() {
var loaded = false;
function loadMatomo() {
if (loaded) return;
loaded = true;
// イベントリスナーの解除(1度発火したら監視を終了)
var events = ['keydown', 'mousemove', 'wheel', 'touchmove', 'touchstart'];
events.forEach(function(e) {
window.removeEventListener(e, loadMatomo, {passive: true});
});
// --- ここから元の Matomo コード ---
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
var u = "MatomoのURL";
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', 'トラッキングコード内のID']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true;
g.src = u + 'matomo.js';
s.parentNode.insertBefore(g, s);
// --- ここまで ---
}
// ユーザーアクションの監視(一度でも操作があれば発火)
var events = ['keydown', 'mousemove', 'wheel', 'touchmove', 'touchstart'];
events.forEach(function(e) {
window.addEventListener(e, loadMatomo, {passive: true, once: true});
});
})();
</script>
<!-- End Matomo Code -->
実はこれ、結構海外からの1ページ離脱アクセスに対して何とかならないかと某AIと対話して作ったものです。
テストしてみたところ、ある程度の1ページ離脱アクセスを除外することはできたものの、結構その操作自体も機械的に偽装するみたいで100%ではないようです。
従って、海外からのアクセス自体を拒否して、Matomoのレポートからも排除したいということであれば、そうしたサービスを使うか、海外からのIPアドレスをAIなどに投げてClassless Inter-Domain Routing (CIDR)形式にして拒否コードにした上で、サイトの.htaccessへ追加するか、public_html直下の.htaccessへ追加するのが妥当かも知れません。
お使いのサーバーの管理ソフトがcPanelで、IPブロッカーという機能が使えるようであれば、それを使うことで簡単にpublic_html直下の.htaccessへ拒否情報を追加したり削除したりできるので便利です



コメントを残す