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

# Etiquetar usuarios por tema de página y origen de suscripción

> Etiqueta usuarios en OneSignal según las páginas que visitan y la página desde la que se suscriben a notificaciones push, luego segmenta para campañas dirigidas.

Puedes etiquetar usuarios en OneSignal según las páginas con las que interactúan en tu sitio o aplicación, y luego segmentar esas etiquetas para mensajería dirigida. Esta página cubre dos patrones distintos — elige el que coincida con tu objetivo, o ejecuta ambos en paralelo.

## Elige tu patrón

| Patrón                           | Cuándo se ejecuta el código              | Qué establece                                             | Plataformas       |
| -------------------------------- | ---------------------------------------- | --------------------------------------------------------- | ----------------- |
| **Etiquetar por tema de página** | En cada visita a página o pantalla       | Una etiqueta contadora por tema (`gaming = 5`)            | Web, Android, iOS |
| **Etiquetar en la suscripción**  | Una vez, cuando un usuario opta por push | Una etiqueta de atribución (`subscription_page = gaming`) | Solo web          |

**Etiquetar por tema de página** construye un perfil de interés conductual que crece con el engagement — útil para recomendaciones de contenido, campañas de reactivación y segmentación basada en categorías, incluso para usuarios que nunca optan explícitamente por un tema.

**Etiquetar en la suscripción** captura una señal única en el momento del opt-in — útil para mensajería de bienvenida consciente del origen y campañas de goteo donde la página desde la que un usuario se suscribió predice lo que quiere leer a continuación.

## Requisitos previos

* OneSignal [Web SDK](./web-sdk-setup) y/o [SDK móvil](./mobile-sdk-setup) instalado e inicializado.
* Familiaridad con [Etiquetas](./add-user-data-tags) y [Segmentos](./segmentation).

***

## Etiquetar por tema de página (en cada visita)

Etiqueta usuarios con los temas con los que más se involucran para que puedas entregar mensajes más personalizados — aumentando la relevancia, las tasas de clics y la satisfacción.

Casos de uso de ejemplo:

* En un sitio de moda, un usuario solo está interesado en zapatos de hombre — no en vestidos de mujer.
* En una aplicación de noticias, un usuario visita constantemente artículos de finanzas y deportes — pero nunca entretenimiento o política.

### 1. Definir tu taxonomía de temas

Comienza identificando las categorías de contenido o temas que deseas rastrear. Estos podrían ser:

* Verticales amplios como `sports`, `finance` o `entertainment`
* Tipos de productos como `laptops`, `accessories` o `premium`
* Autores o marcas

<Note>
  - Comienza con 3–8 temas para mantener la gestión simple.
  - Mantente por debajo de 20 temas en general para evitar saturación.
</Note>

### 2. Agregar código para rastrear visitas a temas

Los ejemplos a continuación hacen tres cosas:

* Rastrear uno o más temas por página o pantalla.
* Incrementar el recuento de visitas cada vez que se visualiza el tema.
* Etiquetar al usuario con el recuento actualizado en cada vista.

<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 y enviar mensajes personalizados

Una vez que se aplican etiquetas a los usuarios, puedes orientarlos usando:

* [Segmentos](./segmentation) para construir grupos basados en reglas (por ejemplo, usuarios con `gaming >= 3`).
* [Filtros de API](/reference/create-message#filters) para incluir dinámicamente usuarios en una sola campaña.

Casos de uso de ejemplo:

* Enviar mensajes a usuarios sobre temas específicos solo cuando hayan visitado páginas relacionadas 5 o más veces.
* Promocionar publicaciones a usuarios que han leído más de 3 publicaciones de un autor específico.
* Ofrecer descuentos a compradores que siguen regresando a una categoría de producto específica.

### Mejores prácticas

Hacer:

* Prueba tu lógica de etiquetas usando `console.log()` (web) o el logger de tu plataforma antes de lanzar campañas.
* Usa convenciones de nomenclatura de temas consistentes en todas las páginas.
* Mantén la lista de temas en un lugar central (archivo de configuración o configuración remota) para que puedas ajustar sin tocar cada página.

Evitar:

* Claves de etiquetas largas o demasiado específicas (títulos completos de artículos, URLs largas).
* Exceder los [límites de etiquetas](https://onesignal.com/pricing) de OneSignal.
* Etiquetar con información de identificación personal (PII).

***

## Etiquetar en la suscripción (única vez, solo web)

Etiqueta suscriptores de push web con datos contextuales — como el tema de la página o la ruta URL desde la que se suscribieron — para entregar campañas de seguimiento dirigidas. Este patrón detecta el opt-in, aplica etiquetas y alimenta segmentos para mensajería estilo goteo.

### 1. Etiquetar usuarios en el opt-in

Cuando un usuario se suscribe a notificaciones push, usa el [listener `PushSubscription` change](./web-sdk-reference#addeventlistener-push-subscription-changes) para detectar el opt-in y aplicar etiquetas con datos contextuales sobre la página que estaban viendo.

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

**Cómo funciona esto:**

* El evento `change` se activa cuando cambia el estado de suscripción push del usuario (opt-in, opt-out, actualización de token).
* `event.current.optedIn` es `true` cuando el usuario tiene una suscripción activa. Verificar `!event.previous.optedIn` asegura que las etiquetas solo se apliquen en el opt-in inicial, no en cada cambio de estado.
* `window.location.pathname.split('/')[1]` captura el primer segmento de ruta como contexto de suscripción. Por ejemplo, si la URL es `https://example.com/gaming/article-123`, la etiqueta `subscription_page` se establece en `gaming`.
* `pageTopic` se extrae de una etiqueta `<meta>`, con fallback a `'general'`. Ajústalo para que coincida con la estructura de metadatos de tu sitio.

### 2. Segmentar usuarios por etiqueta

Una vez que se aplican las etiquetas, usa [Segmentos](./segmentation) o [Filtros de API](/reference/create-message#filters) para orientar usuarios según esas etiquetas. Por ejemplo:

* Enviar una campaña a usuarios donde `subscription_page` es `gaming`.
* Crear segmentos dinámicos basados en valores de etiquetas y tiempos (por ejemplo, horas desde la primera sesión).

### 3. Automatizar mensajería de seguimiento

Construye campañas de goteo que activen mensajes según cuándo se suscribió el usuario y bajo qué contenido se suscribió.

**Ejemplo: Campaña de goteo para suscriptores de gaming**

| Nombre del segmento | Filtros                                                           | Descripción                                     |
| ------------------- | ----------------------------------------------------------------- | ----------------------------------------------- |
| Gaming 1            | `subscription_page` = `gaming` AND First Session > 2h AND \< 24h  | Contactar 2–24 horas después de la suscripción. |
| Gaming 2            | `subscription_page` = `gaming` AND First Session > 24h AND \< 48h | Seguimiento 1 día después.                      |
| Gaming 3            | `subscription_page` = `gaming` AND First Session > 72h AND \< 96h | Verificación final después de 3 días.           |

<Info>
  Usa límites de tiempo superiores (`<`) para evitar que los usuarios permanezcan en segmentos una vez que ha pasado la ventana de mensajería.
</Info>

### 4. Combinar segmentos con plantillas de mensajes

Una vez que se crean los segmentos:

* Construye [plantillas](./templates) para cada etapa de la campaña (introducción, recordatorio, promoción).
* Usa [Journeys](./journeys-overview) para enviar estos mensajes cuando los usuarios ingresen al segmento apropiado.

Ideas de mensajes de ejemplo:

* Invitar a una comunidad de gaming o grupo social.
* Recomendar artículos populares relacionados con su tema.
* Enviar una oferta exclusiva o código de descuento.

### Mejores prácticas

* Usa nombres y valores de etiquetas significativos que reflejen la intención real del usuario.
* Extrae valores de etiquetas dinámicamente desde metadatos de página cuando sea posible.
* Solo etiqueta en el opt-in inicial — el ejemplo del listener anterior verifica `!event.previous.optedIn` para evitar re-etiquetar en cada cambio de estado.

<Warning>
  No incluyas información de identificación personal (PII) como nombres o direcciones de correo electrónico en los valores de etiquetas. Evita codificar valores de etiquetas en todo tu sitio — extráelos dinámicamente del contexto de la página.
</Warning>

***

## Preguntas frecuentes

### ¿Qué patrón debo usar?

Usa **Etiquetar por tema de página** para construir un perfil de interés conductual a lo largo del tiempo. El contador crece con cada visita, por lo que los segmentos pueden ajustarse por la profundidad del engagement (`gaming >= 5`). Usa **Etiquetar en la suscripción** para capturar una sola atribución puntual en el opt-in, útil para mensajería de bienvenida consciente del origen donde quieres reaccionar a *dónde* se suscribió el usuario antes de que tenga un largo historial de visitas. Ambos patrones pueden ejecutarse en paralelo en el mismo sitio — establecen etiquetas diferentes y responden preguntas diferentes.

### ¿Persisten las etiquetas si el usuario borra los datos del navegador?

No. Borrar los datos del navegador en la web crea una nueva Suscripción, y los contadores por tema almacenados en `localStorage` se restablecen junto con ella. Si el usuario vuelve a suscribirse (manualmente o mediante [auto-resubscripción](./web-push-setup#auto-resubscribe)), el listener `change` se activa nuevamente y vuelve a aplicar la etiqueta de suscripción según la página actual, pero los contadores de visita comienzan desde cero.

### ¿Puedo actualizar las etiquetas después de la suscripción inicial?

Sí. Puedes llamar a `OneSignal.User.addTag()` o `OneSignal.User.addTags()` en cualquier momento para agregar o actualizar etiquetas. El listener de suscripción es útil para el contexto inicial, pero también puedes etiquetar usuarios según el comportamiento continuo.

### ¿Debo usar estos patrones en lugar de los filtros de eventos de mensaje?

Sirven para propósitos diferentes. Usa los patrones de esta página cuando quieras segmentar por **qué páginas un usuario ha visitado o desde dónde se ha suscrito** — es decir, señal que se origina en tu sitio o aplicación. Usa [Filtros de eventos de mensaje](./segmentation#message-event-filters) cuando quieras segmentar por **con qué mensajes de OneSignal ha interactuado un usuario** (entregado, hecho clic, etc.). Son complementarios, no redundantes.

### ¿Funciona el patrón de origen de suscripción en móvil?

No directamente. La API `PushSubscription.addEventListener("change", ...)` es específica de web. En iOS y Android, puedes lograr una atribución similar llamando a `addTag` desde dentro de tu flujo de opt-in — por ejemplo, inmediatamente después de que el usuario acepte un [prompt de permiso](./permission-requests), etiquétalo con la pantalla o función en la que estaba.

***

## Páginas relacionadas

<Columns cols={2}>
  <Card title="Etiquetas" icon="tags" href="./add-user-data-tags">
    Agrega propiedades personalizadas a los usuarios para personalización y segmentación.
  </Card>

  <Card title="Segmentos" icon="users" href="./segmentation">
    Agrupa usuarios por propiedades, etiquetas y comportamiento para mensajería dirigida.
  </Card>

  <Card title="Referencia del Web SDK" icon="code" href="./web-sdk-reference">
    Referencia completa del OneSignal Web SDK, incluyendo listeners de suscripción y métodos de etiquetado.
  </Card>

  <Card title="Referencia del SDK móvil" icon="mobile" href="./mobile-sdk-reference">
    Referencia completa del OneSignal SDK móvil, incluyendo métodos de etiquetado.
  </Card>

  <Card title="Journeys" icon="route" href="./journeys-overview">
    Construye flujos de mensajería de múltiples pasos activados por entrada en segmentos o eventos personalizados.
  </Card>
</Columns>
