> ## 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.

# Marcar usuários por tópico de página e origem da assinatura

> Marque usuários no OneSignal com base nas páginas que visitam e na página em que se inscrevem para notificações push, depois segmente para campanhas direcionadas.

Você pode marcar usuários no OneSignal com base nas páginas com as quais interagem em seu site ou aplicativo, e então segmentar essas tags para mensagens direcionadas. Esta página cobre dois padrões distintos — escolha o que corresponde ao seu objetivo, ou execute ambos lado a lado.

## Escolha seu padrão

| Padrão                          | Quando o código é executado              | O que é definido                                     | Plataformas       |
| ------------------------------- | ---------------------------------------- | ---------------------------------------------------- | ----------------- |
| **Marcar por tópico de página** | A cada visita de página ou tela          | Uma tag contadora por tópico (`gaming = 5`)          | Web, Android, iOS |
| **Marcar na assinatura**        | Uma vez, quando um usuário opta por push | Uma tag de atribuição (`subscription_page = gaming`) | Apenas Web        |

**Marcar por tópico de página** constrói um perfil de interesse comportamental que cresce com o engajamento — útil para recomendações de conteúdo, campanhas de re-engajamento e segmentação baseada em categoria, incluindo para usuários que nunca optam explicitamente por um tópico.

**Marcar na assinatura** captura um sinal único no momento da opt-in — útil para mensagens de boas-vindas conscientes da origem e campanhas de gotejamento onde a página a partir da qual um usuário se inscreveu prevê o que ele quer ler a seguir.

## Pré-requisitos

* OneSignal [Web SDK](./web-sdk-setup) e/ou [SDK móvel](./mobile-sdk-setup) instalado e inicializado.
* Familiaridade com [Tags](./add-user-data-tags) e [Segmentos](./segmentation).

***

## Marcar por tópico de página (a cada visita)

Marque usuários com os tópicos com os quais mais se envolvem para que você possa entregar mensagens mais personalizadas — aumentando relevância, taxas de clique e satisfação.

Exemplos de casos de uso:

* Em um site de moda, um usuário está interessado apenas em sapatos masculinos — não em vestidos femininos.
* Em um aplicativo de notícias, um usuário visita consistentemente artigos de finanças e esportes — mas nunca entretenimento ou política.

### 1. Definir sua taxonomia de tópicos

Comece identificando as categorias de conteúdo ou tópicos que você deseja rastrear. Estes podem ser:

* Verticais amplas como `sports`, `finance` ou `entertainment`
* Tipos de produtos como `laptops`, `accessories` ou `premium`
* Autores ou marcas

<Note>
  - Comece com 3–8 tópicos para manter o gerenciamento simples.
  - Fique abaixo de 20 tópicos no total para evitar inchaço.
</Note>

### 2. Adicionar código para rastrear visitas a tópicos

Os exemplos abaixo fazem três coisas:

* Rastrear um ou mais tópicos por página ou tela.
* Incrementar a contagem de visitas toda vez que o tópico é visualizado.
* Marcar o usuário com a contagem atualizada em cada visualização.

<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. Segmentar e enviar mensagens personalizadas

Uma vez que as tags são aplicadas aos usuários, você pode direcioná-los usando:

* [Segmentos](./segmentation) para construir grupos baseados em regras (por exemplo, usuários com `gaming >= 3`).
* [Filtros de API](/reference/create-message#filters) para incluir dinamicamente usuários em uma única campanha.

Exemplos de casos de uso:

* Enviar mensagens a usuários sobre tópicos específicos somente quando visitaram páginas relacionadas 5 ou mais vezes.
* Promover posts para usuários que leram mais de 3 posts de um autor específico.
* Oferecer descontos a compradores que continuam retornando a uma categoria de produto específica.

### Melhores práticas

Faça:

* Teste sua lógica de tags usando `console.log()` (web) ou o logger da sua plataforma antes de lançar campanhas.
* Use convenções consistentes de nomenclatura de tópicos entre páginas.
* Mantenha a lista de tópicos em um local central (arquivo de configuração ou configuração remota) para que você possa ajustar sem tocar em cada página.

Evite:

* Chaves de tag longas ou excessivamente específicas (títulos completos de artigos, URLs longas).
* Exceder os [limites de tags](https://onesignal.com/pricing) do OneSignal.
* Marcar com informações pessoalmente identificáveis (PII).

***

## Marcar na assinatura (única vez, apenas web)

Marque assinantes de web push com dados contextuais — como o tópico da página ou o caminho de URL a partir do qual se inscreveram — para entregar campanhas de acompanhamento direcionadas. Este padrão detecta o opt-in, aplica tags e alimenta segmentos para mensagens estilo gotejamento.

### 1. Marcar usuários no opt-in

Quando um usuário se inscreve em notificações push, use o [listener `PushSubscription` change](./web-sdk-reference#addeventlistener-push-subscription-changes) para detectar o opt-in e aplicar tags com dados contextuais sobre a página que estava visualizando.

```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);
});
```

**Como isso funciona:**

* O evento `change` é acionado quando o estado de assinatura push do usuário muda (opt-in, opt-out, atualização de token).
* `event.current.optedIn` é `true` quando o usuário tem uma assinatura ativa. Verificar `!event.previous.optedIn` garante que as tags sejam aplicadas apenas no opt-in inicial, não a cada mudança de estado.
* `window.location.pathname.split('/')[1]` captura o primeiro segmento de caminho como o contexto de assinatura. Por exemplo, se a URL for `https://example.com/gaming/article-123`, a tag `subscription_page` é definida como `gaming`.
* `pageTopic` é extraído de uma tag `<meta>`, com fallback para `'general'`. Ajuste para corresponder à estrutura de metadados do seu site.

### 2. Segmentar usuários por tag

Assim que as tags são aplicadas, use [Segmentos](./segmentation) ou [Filtros de API](/reference/create-message#filters) para direcionar usuários com base nessas tags. Por exemplo:

* Enviar uma campanha para usuários onde `subscription_page` é `gaming`.
* Criar segmentos dinâmicos baseados em valores de tag e tempo (por exemplo, horas desde a primeira sessão).

### 3. Automatizar mensagens de acompanhamento

Construa campanhas estilo gotejamento que acionam mensagens com base em quando o usuário se inscreveu e sob qual conteúdo ele se inscreveu.

**Exemplo: Campanha de gotejamento para assinantes de gaming**

| Nome do segmento | Filtros                                                           | Descrição                              |
| ---------------- | ----------------------------------------------------------------- | -------------------------------------- |
| Gaming 1         | `subscription_page` = `gaming` AND First Session > 2h AND \< 24h  | Alcançar 2–24 horas após a assinatura. |
| Gaming 2         | `subscription_page` = `gaming` AND First Session > 24h AND \< 48h | Acompanhamento 1 dia depois.           |
| Gaming 3         | `subscription_page` = `gaming` AND First Session > 72h AND \< 96h | Verificação final após 3 dias.         |

<Info>
  Use limites de tempo superiores (`<`) para evitar que os usuários permaneçam em segmentos uma vez que a janela de mensagens tenha passado.
</Info>

### 4. Combinar segmentos com modelos de mensagem

Assim que os segmentos são criados:

* Construa [Templates](./templates) para cada estágio da campanha (introdução, lembrete, promoção).
* Use [Journeys](./journeys-overview) para enviar essas mensagens quando os usuários entrarem no segmento apropriado.

Ideias de mensagens de exemplo:

* Convite para uma comunidade ou grupo social de gaming.
* Recomendar artigos em alta relacionados ao tópico deles.
* Enviar uma oferta exclusiva ou código de desconto.

### Melhores práticas

* Use nomes e valores de tag significativos que reflitam a intenção real do usuário.
* Extraia valores de tag dinamicamente a partir de metadados de página quando possível.
* Marque apenas no opt-in inicial — o exemplo do listener acima verifica `!event.previous.optedIn` para evitar remarcar a cada mudança de estado.

<Warning>
  Não inclua informações de identificação pessoal (PII) como nomes ou endereços de e-mail nos valores de tag. Evite codificar valores de tag em todo o seu site — extraia-os dinamicamente do contexto da página.
</Warning>

***

## Perguntas frequentes

### Qual padrão devo usar?

Use **Marcar por tópico de página** para construir um perfil de interesse comportamental ao longo do tempo. O contador cresce a cada visita, então os segmentos podem ser ajustados pela profundidade do engajamento (`gaming >= 5`). Use **Marcar na assinatura** para capturar uma única atribuição pontual no opt-in, útil para mensagens de boas-vindas conscientes da origem onde você quer reagir a *onde* o usuário se inscreveu antes que ele tenha um longo histórico de visitas. Ambos os padrões podem ser executados lado a lado no mesmo site — eles definem tags diferentes e respondem a perguntas diferentes.

### As tags persistem se o usuário limpar os dados do navegador?

Não. Limpar os dados do navegador na web cria uma nova Assinatura, e os contadores por tópico armazenados em `localStorage` são redefinidos junto. Se o usuário se re-inscrever (manualmente ou via [re-inscrição automática](./web-push-setup#auto-resubscribe)), o listener `change` é acionado novamente e reaplica a tag de assinatura com base na página atual, mas os contadores de visita começam do zero.

### Posso atualizar as tags após a assinatura inicial?

Sim. Você pode chamar `OneSignal.User.addTag()` ou `OneSignal.User.addTags()` a qualquer momento para adicionar ou atualizar tags. O listener de assinatura é útil para o contexto inicial, mas você também pode marcar usuários com base no comportamento contínuo.

### Devo usar esses padrões em vez de filtros de evento de mensagem?

Eles servem a propósitos diferentes. Use os padrões nesta página quando quiser segmentar por **quais páginas um usuário visitou ou se inscreveu** — ou seja, sinal que se origina no seu site ou aplicativo. Use [Filtros de evento de mensagem](./segmentation#message-event-filters) quando quiser segmentar por **com quais mensagens do OneSignal um usuário interagiu** (entregue, clicado, etc.). Eles são complementares, não redundantes.

### O padrão de origem da assinatura funciona em dispositivos móveis?

Não diretamente. A API `PushSubscription.addEventListener("change", ...)` é específica para web. No iOS e Android, você pode obter uma atribuição similar chamando `addTag` de dentro do seu fluxo de opt-in — por exemplo, imediatamente após o usuário aceitar um [prompt de permissão](./permission-requests), marque-o com a tela ou recurso em que estava.

***

## Páginas relacionadas

<Columns cols={2}>
  <Card title="Tags" icon="tags" href="./add-user-data-tags">
    Adicione propriedades personalizadas aos usuários para personalização e segmentação.
  </Card>

  <Card title="Segmentos" icon="users" href="./segmentation">
    Agrupe usuários por propriedades, tags e comportamento para mensagens direcionadas.
  </Card>

  <Card title="Referência do Web SDK" icon="code" href="./web-sdk-reference">
    Referência completa do OneSignal Web SDK incluindo listeners de assinatura e métodos de marcação.
  </Card>

  <Card title="Referência do SDK móvel" icon="mobile" href="./mobile-sdk-reference">
    Referência completa do OneSignal SDK móvel incluindo métodos de marcação.
  </Card>

  <Card title="Journeys" icon="route" href="./journeys-overview">
    Construa fluxos de mensagens em múltiplas etapas acionados por entrada em segmento ou eventos personalizados.
  </Card>
</Columns>
