Google Tag Managerを使ってStats4Uカウンターを追加する
これについては2015年のブログ記事に案内がある。そのスクリーンショットに写っているTag Managerは、もう今の見た目とは違う。そして七つのステップのうちの一つ——document.writeにチェックを入れる作業——はまったく不要になっている。本稿はその記事を置き換えるものだ。
本稿は、以前のガイドが諦めていた問いにも答える。あのガイドは、「Statsの画像がどこに表示されるかは制御できない」という理由で、Tag Managerでは透明カウンターを使うべきだとしていた。実際には制御できる。その方法はこのページの下のほうにある。
手短に言うと
Tag Manager内でTags → New → Custom HTMLと進み、HTMLフィールドに次の1行を貼り付ける。
<script src="https://www.stats4u.net/s4u.js"
data-id="YOUR-ID" data-style="981" async></script>
トリガーをAll Pagesに設定し、保存してコンテナを公開する。YOUR-IDの部分は、統計ページで確認できるカウンター番号に置き換える。
これで作業はすべて終わりだ——2015年には七つのステップが必要だったところを、三つのフィールドとトリガー一つで済む。document.writeについて何かにチェックを入れる必要もない。スクリプトがもうそれを使っていないからだ。
実際には何が起きるのか、そしてなぜそれが望み通りではないかもしれないか
このスクリプトは、ページ内で自分自身の直後にカウンターを配置する。HTMLに直接貼り付けた場合は、これでまさに正しい動作になる。コードを置いた場所にカウンターが表示される。
Tag Manager経由では事情が異なる。コードがどこに置かれるかを、もはや自分では決めていないからだ。決めるのはコンテナのほうであり、たいていはドキュメントのhead内か、コンテナのスニペットを設置した場所になる。つまりカウンターはそこに挿入される——フッターでもサイドバーでもなく、Tag Managerがたまたまタグを注入した場所に。
透明カウンターにとっては、これはまったく問題にならない。だからこそ、以前のガイドはそれを勧めていた。デザイン980は何も表示せず、デザイン981は統計ページにリンクする小さなアイコンだけを表示する。それだけで十分なら、上の「手短に言うと」で説明は完結しており、ここから先を読む必要はない。
特定の場所に見えるカウンターを置く場合は、この先が必要になる。
カウンターの表示位置を制御する
このスクリプトには、以前のガイドが一度も触れていなかった、もう一つのモードがある。data-id属性を使う代わりに、リストを渡すと、スクリプトはIDでプレースホルダー要素を探しに行く。
手順一——カウンターを置きたい場所に、プレースホルダーをページに配置する。これはテンプレート側に書くものであり、Tag Manager側には書かない。なぜなら、この決定からTag Managerを締め出そうとしているからだ。
<div id="s4u_cp0"></div>
手順二——Tag Managerでは、一行版の代わりに次を使う。タグの種類は同じくCustom HTMLだ。
<script>
(function () {
// No placeholder on this page? Then no counter, and no request either.
if (!document.getElementById('s4u_cp0')) { return; }
window.s4uid = ['YOUR-ID'];
window.s4u_paramsarr = [{ s4ustyleid: '100' }];
var s = document.createElement('script');
s.src = 'https://www.stats4u.net/s4u.js';
document.head.appendChild(s);
})();
</script>
手順三——トリガーを変更する。ここが、みんなが引っかかる部分だ。All PagesはTag Managerができる限り早いタイミングで発火するため、多くの場合プレースホルダーがドキュメント内にまだ存在しないうちに発火してしまう。代わりに組み込みのDOM Readyトリガーを使う。カウンターはdivより前ではなく、後に到着しなければならない。
これでカウンターは、そのdivの中にだけ表示されるようになる。
どのページに表示するかを制御する
互いに独立した二つのレバーがあり、それぞれ別々に理解しておく価値がある。
その一つがプレースホルダーだ。決め手は関数の最初の行にある。ページ上にs4u_cp0がなければ、そこで処理は止まり、スクリプトはダウンロードすらされない。つまり、divを含むテンプレートにはカウンターが表示され、含まないテンプレートには表示されない——これはテンプレート側で決まることであり、Tag Manager側の変更も公開作業も要らない。
もう一つがトリガーだ。Tag Manager側で決めたいなら、トリガーに条件を与えればよい——Page Pathが希望の条件に一致する場合にのみ、DOM Readyで発火するようにする。ルールがURLに関するものならこちらを使い、ルールがテンプレートに関するものならプレースホルダーを使う。
1ページに複数のカウンターを置く
リストにはいくつでも入れることができる。リスト内の位置が、プレースホルダーIDの番号に対応する。
window.s4uid = ['ID-ONE', 'ID-TWO'];
window.s4u_paramsarr = [{ s4ustyleid: '981' }, { s4ustyleid: '100' }];
1つ目はs4u_cp0に、2つ目はs4u_cp1に入る。本稿を書く際、両方ともブラウザで確認済みだ。1つ目は20×20のアイコンとして、2つ目は162×25のストリップとして描画され、それぞれ自分のプレースホルダーの中にのみ表示され、ページの他の場所には表示されなかった。
つまずきやすい四つの点
- 二つの方法の同時使用は不可。タグにdata-id属性があり、なおかつリストも設定されていると、カウンターが二つになり、二つのヒットが別々にカウントされてしまう。
- リストではs4ustyleidの設定が必須。data-style属性は、指定を省略すると黙ってデザイン30にフォールバックする。リスト版にはそのようなフォールバックがなく、空のデザインを要求することになる。
- プレースホルダーが欠けていると、静かに失敗する。カウンターも表示されず、エラーもなく、コンソールにも何も出ない。何も表示されない場合、まず疑うのはIDだ——s4u_cp0はゼロであり、アルファベットのOではない。
- 透明カウンターには意図的にリンクがない。デザイン980はリンクなしで描画される。他人のページ上にある透明な1ピクセルのクリック領域は、機能ではなく罠になってしまうからだ。リンクが必要な場合に使うのは、小さなアイコンであるデザイン981だ。
正しく動作しているか確認する
Tag ManagerのPreviewモードでページを読み込む。DOM Readyイベントで発火したタグの一覧に、そのタグが表示されるはずだ。次に統計ページを確認する——Preview経由の訪問もほかの訪問と同じようにカウントされるため、数秒以内に数字が動くはずだ。
タグは発火しているのに何も表示されない場合、原因はプレースホルダーかトリガーのどちらかであり、その順に疑う可能性が高い。