リンクの文字を読まずにクリックを数える
カウンターが答えるのは「何人来たか」です。より役に立つ問いはたいてい「何人が何かをしたか」——連絡先を押した、ダウンロードを開いた、ソーシャルのプロフィールへ行った。このサービスにはイベント機能が最初からあります。要素に data-s4u-event="kontakt" を付ければ、そこへのクリックがその名前で数えられます。
ほとんど誰も使っていませんでした。ほとんど誰も知らなかったからです。そこでチェックボックスを用意しました。属性なしで、リンクのクリックを自動的に数えます。面白いのはスイッチではありません。数えられたものに何という名前が付くか、そちらです。
リンクの文字ではない
クリックに名前を付けるとき、いちばん自然な候補は訪問者が押した言葉です。そしてそれが、間違った候補でもあります。
リンクの文字は自由な内容です。リンクには「注文 4711」や「アンナからのメッセージ」と書けますし、番地や予約番号やメールアドレスが入ることもあります。それらは name という名前のデータベース列に入り、そのまま居座ります。このサービスのプライバシーポリシーは統計に個人情報は含まれないと述べており、それはサイト運営者がリンクタグの中にたまたま何と書いたかに左右されずに、真であり続けなければなりません。
もう一つ、小さいけれど現実の問題があります。同じページ上の「こちら」というリンク二十本は、何も言わない一つの名前になり、同じリンクの十一言語版は、カウンターに割り当てられた五十枠のうち十一枠を占めてしまいます。
そこで名前はリンク先のパスから取ります。サイト運営者が自分で決めたもので、安定していて、しかもページ別統計がすでに使っている鍵と同じです。
三つの正規化、それぞれに理由があります
- 言語プレフィックスを外す。
/de/blogと/pl/blogは同じページです。外さないと、多言語サイトの言語切り替えだけで五十枠のうち十一枠が消えます。 - 五桁以上の連続した数字は
nにする。カウンター番号だけが違う二つの統計ページは、二つのページではなく、同じページの二回です。 - 外部リンクは
ex-とホスト名にする。他人のページのパスは運営者に何も伝えません。クリックがどこへ行ったかは伝えます。
アンカー、mailto:、tel:、javascript: は飛ばします——数字が欲しくなる行き先ではありません。すでに独自のイベント名を持つ要素も飛ばします。そうしないと同じクリックが二度数えられます。
費用はどれだけか
ブラウザスクリプトは圧縮後で 1022 バイト増えました。初回訪問の一度だけです。それ以外の費用はありません。フラグは、スクリプトがページ読み込みごとにどのみち送っているリクエストに相乗りします——これまで常に同じ定数だけを返していたリクエストです——なので往復は増えません。サーバー側では、スイッチが入ったカウンターの一覧はクエリではなく小さなファイルにあります。そのクエリは 166 433 行の全走査で、実測 143,9 ミリ秒かかるからです。
既定は無効で、これからも無効のままです。この規模で全体を有効にすると、ここでいちばん書き込みの多いテーブルに一日およそ九千行が増えます。これは自分でオンにするものであって、勝手に降ってくるものではありません。