押さずに、押したことにする
広告リンクが押されたことを数える仕組みを入れました。動くかどうかは、押してみれば分かります。
ただ、その1回が向こう側に記録されます。
自分の広告リンクを押さずに、押したときの動きだけを確かめた話です。なぜ押せないのか、どうやって押さずに試したのか、そしてこの方法で何が確かめられて何が確かめられないのかを書きます。
押すと、記録が残る
広告リンクは、押された時点で相手側に1件のクリックとして記録されます。そこから買われたかどうかに関わらず、クリックの数には入ります。
そして、自分で自分のリンクを押す行為を禁止している提携先があります。
| 起きること | 程度 |
|---|---|
| クリック数が1増える | 数字が少し汚れる |
| 規約の禁止事項に触れる可能性 | 提携そのものに関わる |
1回くらいは、と思える場面ですが、確かめるたびに押すことになります。テストの回数は1回では終わりません。押さずに済む方法を先に用意しておくほうが筋が通っています。
何を確かめたいのか
そもそも、押して確かめたいのは何だったか。分けてみると、広告の相手は関係ありませんでした。
| 確かめたいこと | 相手先が要るか |
|---|---|
| 押されたことを拾えているか | 要らない |
| どのリンクかを判別できているか | 要らない |
| 記事のスラッグが付いているか | 要らない |
| 相手のページが開くか | 要る(が、確かめる必要が無い) |
最後の行は、普通のリンクが開くかどうかの話です。こちらで作った部分ではありません。確かめる対象から外せます。
押さずに、押したことにする
やったのは2つです。
ひとつめは、リンクの既定の動作を止めること。ページ全体で、クリックの既定動作を1回だけ打ち消すようにしておきます。
document.addEventListener("click", (e) => e.preventDefault(), true);
最後の true が効いています。これは「他より先に受け取る」という指定で、これを付けると、本文に置いた聞き役より先にこちらが呼ばれます。
既定の動作を打ち消しても、クリックが伝わること自体は止まりません。本文に置いた聞き役にはちゃんと届きます。
「移動させない」と「無かったことにする」は別で、ここで要るのは前者だけでした。
ふたつめは、クリックを自分で起こすこと。マウスで押す代わりに、押されたことにします。
link.dispatchEvent(
new MouseEvent("click", { bubbles: true, cancelable: true })
);
bubbles を付けないと、上の階層に伝わりません。本文の塊に聞き役を置く作りなので、ここが無いと届かず、何も起きないのに「動いていない」と判断するところでした。
結果
楽天のリンクとAmazonのリンクで、それぞれ試しました。積まれた中身はこうです。
affiliate_network rakuten
affiliate_product nape-pro
affiliate_label 楽天で見る(Keychron公式ストア)
article_slug nape-pro-trackball
affiliate_network amazon
affiliate_product nape-pro
affiliate_label Amazonで見る
article_slug nape-pro-trackball
行き先のドメインから提携先を判別する部分も、商品のIDを拾う部分も、意図どおりでした。そしてページは記事に留まったままで、相手側には何も届いていません。
この方法で確かめられないこと
正直に書いておくと、押した本物のクリックと完全に同じではありません。
| 本物のクリック | 作ったクリック | |
|---|---|---|
| 聞き役に届く | 届く | 届く |
| 押した座標などの情報 | 入っている | 入っていない |
| 信頼できる操作かの印 | 付く | 付かない |
| 別タブが開く | 開く | 開かない(止めている) |
今回の仕組みは、押された場所から祖先を辿ってリンクを探し、その行き先を見るだけです。座標も、信頼できる操作かどうかも使っていません。だから同じ結果になります。
逆に、座標を使う仕掛けや、新しいタブを開く処理を試すときには、この方法は使えません。何を使っていないかを把握していないと、同じにならないところです。
テスト用のリンクを置く手もあった
別の案として、提携先ではないURLを指す確認専用のリンクを、一時的にページへ置く方法もあります。
選ばなかったのは、確かめたいものと違うものを確かめることになるからです。本物のリンクには提携用のURLが入っていて、その文字列から提携先を判別しています。別のURLを置いたら、そこを通りません。
本物のリンクのまま、移動だけを止める。確かめる対象を変えないほうが、分かることが多くなります。
今回の学び
まず、試すこと自体に副作用があるものがあるということ。コードの動作確認は普通ただですが、外部と繋がっている部分では、押すたびに向こうに記録が残ります。回数が増える前提で考えると、最初からただで試せる形を用意するほうが安くつきます。
次に、確かめたいことから、相手先を外せる場合があること。「リンクを押したときの動作」とひとまとまりで見ていると相手が必要に見えますが、分けてみると、自分で書いた部分には相手が出てきませんでした。
そして、作ったクリックが本物と同じになる条件は、使っていない情報が無いことだということ。座標も、信頼の印も使っていないから同じ結果になります。何かを使っていれば、同じ方法は使えませんでした。
この記事を共有する
関連記事

自分のブラウザでは、一度も動いていなかった
タグマネージャーの設定を足したので、公開する前に動きを確かめようとしました。プレビューを起動して、サイトのURLを入れて、接続を待つ。 繋がりませんでした。そして原因を追ったら、プレビューの話では終わりませんでした。 こ […]

名前が、開かなくても分かる形になっていた
広告リンクのクリックを数えるために、タグマネージャーに5つのものを足しました。変数が3つ、トリガーが1つ、タグが1つです。 作っている途中で、足そうとしていた変数の1つが、すでにあることに気づきました。一覧を眺めただけで […]

除外しているつもりで、1件も除外していなかった
アクセス解析に、自分のアクセスを入れないための設定があります。ずっと「テスト」のままになっていたので、「有効」に切り替えました。 それでも、何も除外されません。設定がもう一段、奥にありました。 この記事で扱うこと 自分の […]