> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ページトピックとサブスクリプションソースでユーザーをタグ付け

> ユーザーが訪問するページとプッシュ通知をサブスクライブするページに基づいて、OneSignalでユーザーにタグ付けし、ターゲットキャンペーン用にセグメント化します。

サイトやアプリでユーザーが操作するページに基づいてOneSignalでユーザーにタグ付けし、それらのタグをターゲットメッセージング用にセグメント化できます。このページでは2つの異なるパターンを取り上げます — 目標に合うものを選ぶか、両方を並行して実行できます。

## パターンを選択

| パターン                | コードの実行タイミング           | 設定内容                                      | プラットフォーム        |
| ------------------- | --------------------- | ----------------------------------------- | --------------- |
| **ページトピック別タグ付け**    | ページまたは画面の訪問ごと         | トピックごとのカウンタータグ（`gaming = 5`）              | Web、Android、iOS |
| **サブスクリプション時にタグ付け** | ユーザーがプッシュにオプトインしたとき1回 | アトリビューションタグ（`subscription_page = gaming`） | Webのみ           |

**ページトピック別タグ付け**は、エンゲージメントとともに成長する行動関心プロファイルを構築します — コンテンツ推薦、再エンゲージメントキャンペーン、カテゴリベースのセグメンテーションに有用で、トピックに明示的にオプトインしないユーザーにも適用できます。

**サブスクリプション時にタグ付け**は、オプトイン時の単一時点のシグナルをキャプチャします — ユーザーがサブスクライブしたページが次に読みたいコンテンツを予測する、ソース対応のウェルカムメッセージングおよびドリップキャンペーンに有用です。

## 前提条件

* OneSignal [Web SDK](./web-sdk-setup) および/または [モバイルSDK](./mobile-sdk-setup) がインストールおよび初期化されていること。
* [タグ](./add-user-data-tags) と [セグメント](./segmentation) の使い方を理解していること。

***

## ページトピック別タグ付け（毎回の訪問）

ユーザーが最も多くエンゲージするトピックでタグ付けして、よりパーソナライズされたメッセージングを提供し、関連性、クリック率、満足度を向上させます。

ユースケースの例：

* ファッションサイトでは、ユーザーは男性用の靴にのみ興味があり、女性用のドレスには興味がありません。
* ニュースアプリでは、ユーザーは金融とスポーツの記事を常に訪れますが、エンターテイメントや政治には興味がありません。

### 1. トピック分類を定義する

追跡したいコンテンツカテゴリまたはトピックを特定することから始めます。これらには以下が含まれる可能性があります：

* `sports`、`finance`、`entertainment`などの広範な分野
* `laptops`、`accessories`、`premium`などの製品タイプ
* 著者またはブランド

<Note>
  - 管理をシンプルに保つために、3〜8つのトピックから始めてください。
  - 肥大化を避けるため、全体で20トピック未満に抑えてください。
</Note>

### 2. トピック訪問を追跡するコードを追加する

以下の例では3つのことを行います：

* ページまたは画面ごとに1つ以上のトピックを追跡します。
* トピックが表示されるたびに訪問カウントを増やします。
* 各ビューで更新されたカウントでユーザーにタグ付けします。

<CodeGroup>
  ```javascript JavaScript theme={null}
  const topics = ["sports", "entertainment"]; // One or many

  if (typeof localStorage !== "undefined" && Array.isArray(topics)) {
    topics.forEach(topic => {
      let count = parseInt(localStorage.getItem(topic), 10);
      count = isNaN(count) ? 1 : count + 1;
      localStorage.setItem(topic, count);
      OneSignal.User.addTag(topic, count.toString());
    });
  }
  ```

  ```kotlin Kotlin theme={null}
  val topics = listOf("sports", "entertainment") // One or many
  val sharedPrefs = context.getSharedPreferences("TopicPrefs", Context.MODE_PRIVATE)

  topics.forEach { topic ->
      val count = sharedPrefs.getInt(topic, 0) + 1
      sharedPrefs.edit().putInt(topic, count).apply()
      OneSignal.User.addTag(topic, count.toString())
  }
  ```

  ```swift Swift theme={null}
  let topics = ["sports", "entertainment"] // One or many
  let defaults = UserDefaults.standard

  for topic in topics {
      let count = defaults.integer(forKey: topic) + 1
      defaults.set(count, forKey: topic)
      OneSignal.User.addTag(key: topic, value: "\(count)")
  }
  ```
</CodeGroup>

### 3. セグメント化してパーソナライズされたメッセージを送信する

ユーザーにタグが適用されたら、以下を使用してターゲットを設定できます：

* [セグメント](./segmentation)を使用してルールベースのグループを構築（例：`gaming >= 3`のユーザー）。
* [APIフィルター](/reference/create-message#filters)を使用して単一のキャンペーンに動的にユーザーを含める。

ユースケースの例：

* 関連ページを5回以上訪問したユーザーにのみ特定のトピックについてメッセージを送信。
* 特定の著者から3つ以上の投稿を読んだユーザーに投稿を宣伝。
* 特定の製品カテゴリに何度も戻ってくる買い物客に割引を提供。

### ベストプラクティス

すべきこと：

* キャンペーンを開始する前に、`console.log()`（Web）またはプラットフォームのロガーを使用してタグロジックをテストします。
* ページ全体で一貫したトピック命名規則を使用します。
* すべてのページを変更せずに調整できるよう、トピックリストを中央の場所（設定ファイルまたはリモート設定）に保持します。

避けるべきこと：

* 長すぎるまたは過度に具体的なタグキー（完全な記事タイトル、長いURL）。
* OneSignalの[タグ制限](https://onesignal.com/pricing)を超えること。
* 個人を特定できる情報（PII）でタグ付けすること。

***

## サブスクリプション時にタグ付け（一回限り、Webのみ）

サブスクライバーがサブスクライブしたページトピックやURLパスなどのコンテキストデータでWebプッシュサブスクライバーにタグ付けし、ターゲットを絞ったフォローアップキャンペーンを提供します。このパターンは、オプトインの検出、タグの適用、ドリップスタイルメッセージング用のセグメントへのフィードを行います。

### 1. オプトイン時にユーザーにタグ付けする

ユーザーがプッシュ通知にサブスクライブしたとき、[`PushSubscription` change リスナー](./web-sdk-reference#addeventlistener-push-subscription-changes) を使用してオプトインを検出し、閲覧していたページに関するコンテキストデータを含むタグを適用します。

```javascript theme={null}
function pushSubscriptionChangeListener(event) {
  if (event.current.optedIn && !event.previous.optedIn) {
    // User just opted in — tag with subscription context
    var pathSegment = window.location.pathname.split('/')[1] || 'home';
    var pageTopic = document.querySelector('meta[name="article-topic"]')?.content || 'general';

    OneSignal.User.addTags({
      subscription_page: pathSegment,
      subscription_page_topic: pageTopic,
    });
  }
}

OneSignalDeferred.push(function(OneSignal) {
  OneSignal.User.PushSubscription.addEventListener("change", pushSubscriptionChangeListener);
});
```

**仕組み：**

* `change` イベントは、ユーザーのプッシュサブスクリプション状態が変化したとき（オプトイン、オプトアウト、トークンの更新）に発生します。
* ユーザーがアクティブなサブスクリプションを持つ場合、`event.current.optedIn` は `true` です。`!event.previous.optedIn` を確認することで、タグが最初のオプトイン時にのみ適用され、状態変化のたびに適用されないことが保証されます。
* `window.location.pathname.split('/')[1]` は、サブスクリプションコンテキストとしてパスの最初のセグメントをキャプチャします。たとえば、URLが `https://example.com/gaming/article-123` の場合、`subscription_page` タグは `gaming` に設定されます。
* `pageTopic` は `<meta>` タグから抽出され、`'general'` にフォールバックします。サイトのメタデータ構造に合わせて調整してください。

### 2. タグでユーザーをセグメント化する

タグが適用されたら、[セグメント](./segmentation)または [APIフィルター](/reference/create-message#filters)を使用して、それらのタグに基づいてユーザーをターゲットにします。例：

* `subscription_page` が `gaming` のユーザーにキャンペーンを送信。
* タグ値とタイミング（例：最初のセッションからの経過時間）に基づいて動的セグメントを作成。

### 3. フォローアップメッセージングを自動化する

ユーザーがいつサブスクライブし、どのコンテンツでサブスクライブしたかに基づいてメッセージをトリガーするドリップスタイルのキャンペーンを構築します。

**例：ゲームサブスクライバー向けのドリップキャンペーン**

| セグメント名   | フィルター                                                             | 説明                       |
| -------- | ----------------------------------------------------------------- | ------------------------ |
| Gaming 1 | `subscription_page` = `gaming` AND First Session > 2h AND \< 24h  | サブスクリプション後2〜24時間でリーチアウト。 |
| Gaming 2 | `subscription_page` = `gaming` AND First Session > 24h AND \< 48h | 1日後にフォローアップ。             |
| Gaming 3 | `subscription_page` = `gaming` AND First Session > 72h AND \< 96h | 3日後に最終チェックイン。            |

<Info>
  メッセージングウィンドウが過ぎた後、ユーザーがセグメントに留まるのを防ぐために、上限時間制限（`<`）を使用してください。
</Info>

### 4. セグメントをメッセージテンプレートと組み合わせる

セグメントが作成されたら：

* キャンペーンの各段階（イントロ、リマインダー、プロモーション）用の[テンプレート](./templates)を構築します。
* ユーザーが適切なセグメントに入ったときに、[Journeys](./journeys-overview)を使用してこれらのメッセージを送信します。

メッセージアイデアの例：

* ゲームコミュニティまたはソーシャルグループへの招待。
* トピックに関連するトレンド記事の推薦。
* 独占オファーまたは割引コードの送信。

### ベストプラクティス

* 実際のユーザーの意図を反映する意味のあるタグ名と値を使用する。
* 可能な限りページメタデータからタグ値を動的に抽出する。
* 最初のオプトイン時にのみタグ付けする——上記のリスナー例では、状態変化のたびに再タグ付けされないよう `!event.previous.optedIn` を確認しています。

<Warning>
  タグ値に名前やメールアドレスなどの個人識別情報（PII）を含めないでください。サイト全体でタグ値をハードコーディングすることは避け、ページコンテキストから動的に抽出してください。
</Warning>

***

## よくある質問

### どちらのパターンを使うべきですか？

時間とともに行動関心プロファイルを構築するには、**ページトピック別タグ付け**を使用します。カウンターは訪問ごとに増えるため、エンゲージメントの深さ（`gaming >= 5`）でセグメントを調整できます。オプトイン時に単一時点のアトリビューションをキャプチャするには、**サブスクリプション時にタグ付け**を使用します。ユーザーが長い訪問履歴を持つ前に、彼らがサブスクライブした*場所*に対応したいソース対応のウェルカムメッセージングに有用です。両方のパターンを同じサイトで並行して実行できます — 異なるタグを設定し、異なる質問に答えます。

### ユーザーがブラウザデータをクリアした場合、タグは持続しますか？

いいえ。Webでブラウザデータをクリアすると新しいサブスクリプションが作成され、`localStorage`に保存されているトピック別のカウンターもリセットされます。ユーザーが再サブスクライブした場合（手動または[自動再サブスクライブ](./web-push-setup#auto-resubscribe)経由）、`change` リスナーが再び発生し、現在のページに基づいてサブスクリプションタグが再適用されますが、訪問カウンターは新たに始まります。

### 最初のサブスクリプション後にタグを更新できますか？

はい。`OneSignal.User.addTag()` または `OneSignal.User.addTags()` はいつでも呼び出してタグを追加または更新できます。サブスクリプションリスナーは初期コンテキストに役立ちますが、継続的な行動に基づいてユーザーにタグ付けすることもできます。

### メッセージイベントフィルターの代わりにこれらのパターンを使うべきですか？

それぞれ異なる目的があります。**ユーザーが訪問またはサブスクライブしたページ**でセグメント化する場合 — つまり、サイトやアプリで発生するシグナル — このページのパターンを使用します。**ユーザーがどのOneSignalメッセージと相互作用したか**（配信、クリックなど）でセグメント化する場合は、[メッセージイベントフィルター](./segmentation#message-event-filters)を使用します。これらは補完的であり、冗長ではありません。

### サブスクリプションソースパターンはモバイルで動作しますか？

直接的には動作しません。`PushSubscription.addEventListener("change", ...)` APIはWeb専用です。iOSとAndroidでは、オプトインフロー内で `addTag` を呼び出すことで、同様のアトリビューションを実現できます — 例えば、ユーザーが[権限プロンプト](./permission-requests)を受け入れた直後に、彼らがいた画面または機能でタグ付けします。

***

## 関連ページ

<Columns cols={2}>
  <Card title="タグ" icon="tags" href="./add-user-data-tags">
    パーソナライゼーションとセグメンテーションのためにユーザーにカスタムプロパティを追加します。
  </Card>

  <Card title="セグメント" icon="users" href="./segmentation">
    ターゲットメッセージングのためにプロパティ、タグ、行動でユーザーをグループ化します。
  </Card>

  <Card title="Web SDK リファレンス" icon="code" href="./web-sdk-reference">
    サブスクリプションリスナーとタグ付けメソッドを含む OneSignal Web SDK の完全リファレンス。
  </Card>

  <Card title="モバイル SDK リファレンス" icon="mobile" href="./mobile-sdk-reference">
    タグ付けメソッドを含む OneSignal モバイル SDK の完全リファレンス。
  </Card>

  <Card title="Journeys" icon="route" href="./journeys-overview">
    セグメント進入またはカスタムイベントによってトリガーされるマルチステップメッセージワークフローを構築します。
  </Card>
</Columns>
