# アクティビティトラッキング

{% hint style="danger" %}

## ほとんどのパートナーでは不要です

この機能が必要なのは、次のいずれかに該当するパートナーのみです：

* SRI（Subresource Integrity）を使用しており、Pushly ローダーが更新された SDK アセットを自動的に取得することを許可できない場合、または
* Pushly SDK をセルフホストしている場合（自社のサーバー/CDN から配信している場合）
  {% endhint %}

### 概要

Pushly SDK は、サイトから Pushly へ “content context” シグナルを送信することをサポートしています。これらのシグナルにより、購読者が何を閲覧したか、どのくらいの頻度で閲覧したか、どれくらい最近閲覧したかに基づいて、Pushly はコホートを構築できます。

これにより、次のようなセグメンテーションが可能になります：

* 過去30日間に “Astrology” タグの付いたページを少なくとも4回訪問した購読者
* 過去7日間に “Elections” タグの付いたコンテンツを訪問した購読者
* 過去14日間に複数のカテゴリ（例：「sports」AND「politics」）を訪問した購読者

これらのタグは実行時にあなたが定義し、コンテンツの分類体系（カテゴリ、セクション、キーワード、著者、トピックなど）にきれいに対応させる必要があります。

### 前提条件

1. 標準の Pushly 統合スニペットは、すでにページにインストールされ、実行されている必要があります。
2. `window.PushlySDK` は、これらのメソッドを呼び出す前に利用可能でなければなりません。

SDK の準備ができる前に呼び出した場合でも、キューイングは引き続き機能します（下記の使用例を参照）が、統合スニペットが先に実行されていることを必ず確認してください。

### 呼び出すタイミング

ページのタグを判定した後にこれを呼び出してください（通常はページビューごとに1回）：

* 従来の複数ページサイト：タグが判明した後、ページ読み込み時に1回呼び出します。
* SPA / クライアントサイドルーティング：表示コンテンツが変わるたびに、ルート変更のたび呼び出します。

同じ表示に対して繰り返し呼び出すのは避けてください（例：スクロール時、タイマー時、再レンダリングループ内）。

***

### メソッド： `page_tag_visit`

現在の購読者が、1つ以上のタグに関連付けられたページを閲覧したことを記録します。

#### シグネチャ

```js
window.PushlySDK.push(['page_tag_visit', [tags]]);
```

#### パラメータ

* `tags` （文字列の配列） – 必須\
  このページビューに関連付ける1つ以上のタグの一覧。

#### タグのルール / 推奨事項

* 安定した、人間が読めるスラッグを使用してください（推奨）： `["astrology", "sports", "politics"]`
* タグはできるだけ短く保ってください（キーワード一覧を丸ごと詰め込むのは避ける）
* 1ページビューあたり最大20タグです。最初の20件を超えるタグは無視されます。
* PIIを含めないでください（メールアドレス、個人名、ユーザーIDなどは不可）

### 例

#### 基本例

```js
window.PushlySDK.push(['page_tag_visit', ['sports', 'politics', 'custom_tag_1']]);
```

#### ページから実行時タグを使う例

```js
var tags = window.pageTags || []; // サイトがタグを公開している方法に応じて
if (tags.length) {
  window.PushlySDK.push(['page_tag_visit', tags]);
}
```

#### SPA の例（ルート変更）

```js
function trackCurrentRouteTags() {
  var tags = getTagsForCurrentRoute(); // あなたの実装
  if (tags && tags.length) {
    window.PushlySDK.push(['page_tag_visit', tags]);
  }
}

// 初回読み込み時に呼び出す
trackCurrentRouteTags();

// ルート変更時に呼び出す
window.addEventListener('popstate', trackCurrentRouteTags);
```

（ルーターにフック／イベントがあるなら、それを使ってください； `popstate` は一般的な基本例にすぎません。）

### 注意事項とよくある落とし穴

* 順序は関係ありません： `['sports','politics']` は次と同じです： `['politics','sports']`
* CMS が重複を出力する可能性がある場合は、送信前にタグを重複排除してください。
* Pushly スニペットが実行される前に呼び出さないでください。これを `<head>`内にインラインで書くと、早すぎるタイミングで発火することがあります。Pushly スニペットの後、またはタグデータが利用可能になった後に配置してください。

***

### トラブルシューティング

コホートが期待どおりに作成されない場合：

1. Pushly のベーススニペットが存在し、正常に読み込まれていることを確認してください（ブロックされたリクエストや JS エラーがないこと）。
2. 確認してください `window.PushlySDK` が存在し、呼び出しがキューイング／実行されていることを確認してください。
3. 渡しているタグがオブジェクトではなく文字列であり、期待どおりの形式になっていることを確認してください。
4. 関連する各ページビューでタグを送信していることを確認してください（特に SPA の場合）。
