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

# URLs, enlaces y deep links

> Configura URLs de lanzamiento, deep links, URLs dinámicas, seguimiento UTM y seguimiento de clics en mensajes push, email, in-app, SMS y RCS.

## Cómo funcionan los enlaces

Cada mensaje de OneSignal — push, email, in-app, SMS o RCS — puede incluir una URL que lleva al User a un destino al hacer clic. Ese destino puede ser una página web que se abre en un navegador o un [deep link](#deep-links) que se abre directamente en tu app.

La forma de configurar la URL depende del canal:

* **Push**: Usa el campo **Launch URL** en el panel o el parámetro `url` en la API.
* **Email**: Agrega enlaces usando el editor de email o HTML. OneSignal rastrea los clics automáticamente.
* **In-app**: Configura [Acciones de clic](./iam-click-actions) en botones, imágenes o fondos.
* **SMS/RCS**: Agrega enlaces en línea. Usa **Insert Trackable Link** en el panel para acortamiento y seguimiento automáticos. Consulta [enlaces rastreables de SMS/RCS](#sms%2Frcs-trackable-links).

### Deep links

Para abrir contenido dentro de tu app en lugar de un navegador, usa un deep link. La compatibilidad con deep links varía según el canal:

* **Push e in-app**: Compatible con esquemas de URL personalizados como `your-app://product/123` y enlaces universales `https://` / App Links.
* **Email y SMS**: Solo se admiten enlaces universales `https://` / App Links. Los esquemas de URL personalizados no funcionan porque los clientes de email y las apps de SMS no los manejan.

<Card title="Deep Linking" icon="link" href="./deep-linking">
  Guía completa de configuración para esquemas de URL personalizados, enlaces universales y enrutamiento específico de app.
</Card>

### Push

#### Launch URL

El Launch URL se abre cuando el User hace clic en una notificación push. Debe comenzar con `https://`.

<Info>
  Para usar URLs `http://` en dispositivos Apple, configura la propiedad [NSAppTransportSecurity](https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity) en el archivo `Info.plist` de tu app.
</Info>

Si envías un solo mensaje tanto a Users web como móviles, usa campos de URL específicos por plataforma:

* `url` — apunta a todas las plataformas
* `web_url` — apunta solo a Subscriptions web push
* `app_url` — apunta solo a Subscriptions móviles

<Frame caption="Campo Launch URL en el panel de OneSignal">
  <img src="https://mintcdn.com/onesignal/KudGm9GSZy-rIRO3/images/dashboard/push-launch-url.png?fit=max&auto=format&n=KudGm9GSZy-rIRO3&q=85&s=5b5687b99e1bc2ab8c3afd9e1780c1a5" alt="Panel de OneSignal mostrando el campo de entrada Launch URL para notificaciones push" width="1066" height="440" data-path="images/dashboard/push-launch-url.png" />
</Frame>

<Tip>
  Para descartar una notificación push web sin abrir ninguna página, agrega `?_osp=do_not_open` al launch URL, p. ej., `https://tusitio.com/page?_osp=do_not_open`. Esto solo funciona para web push.
</Tip>

#### Additional data

En lugar de un Launch URL, puedes enviar pares clave-valor personalizados usando el campo **Additional Data** (`data` en la API). Tu app lee estos datos a través del [Notification Click Listener del SDK](./mobile-sdk-reference#push-notification-events) mediante la propiedad `additionalData` — útil cuando necesitas más flexibilidad que una sola URL.

<Frame caption="Envía una URL a través del campo Additional Data para que tu app la maneje">
  <img src="https://mintcdn.com/onesignal/KudGm9GSZy-rIRO3/images/dashboard/push-additional-data.png?fit=max&auto=format&n=KudGm9GSZy-rIRO3&q=85&s=9c00048fd23586de1e3e70a82fcd1db7" alt="Panel de OneSignal mostrando el campo Additional Data con un par clave-valor personalizado" width="1034" height="378" data-path="images/dashboard/push-additional-data.png" />
</Frame>

### Email link tracking

OneSignal rastrea automáticamente los clics en enlaces dentro de los emails cuando **Track link clicks** está habilitado para el email o la plantilla (activado por defecto). OneSignal rastrea clics totales y únicos por email y por enlace individual (hasta 30 enlaces por email). Consulta estas estadísticas en [Email Message Reports](./email-message-reports).

<Note>
  Para enlaces de cancelación de suscripción, consulta [Unsubscribe Links & Email Subscriptions](./unsubscribe-links-email-subscriptions).
</Note>

<Frame caption="Tabla de actividad de clics que muestra estadísticas de seguimiento por enlace">
  <img src="https://mintcdn.com/onesignal/3PUtCumasMeFG2p0/images/docs/link_tracking.png?fit=max&auto=format&n=3PUtCumasMeFG2p0&q=85&s=318dab483003dac8e1203ab75b5c2756" alt="Reporte de mensaje de email de OneSignal que muestra actividad de clics con conteos de clics totales y únicos por enlace" width="957" height="312" data-path="images/docs/link_tracking.png" />
</Frame>

<Accordion title="Cómo el seguimiento de clics en email reescribe las URLs">
  El seguimiento funciona reescribiendo las URLs para capturar el evento de clic y luego redirigir al User al destino original. Esto ocurre casi al instante, pero puede causar comportamiento inesperado con [deep links](./deep-linking). Por ejemplo:

  `https://some-domain.com/the-page`

  se convierte en algo como:

  `https://some-domain/c/eJxU0D2uGzEMBODTrDoZJPW3...`

  El User es redirigido inmediatamente a la URL prevista.
</Accordion>

Si construyes enlaces con sintaxis Liquid, es posible que OneSignal no los detecte automáticamente. Marca explícitamente un enlace como rastreable:

```liquid theme={null}
{{ 'https://some-domain.com/the-page' | track_link }}
```

Para deshabilitar el seguimiento para un email completo, desmarca **Track link clicks** en el editor de email del panel o establece `disable_email_click_tracking: true` en la API.

<Frame caption="Casilla Track link clicks desmarcada para deshabilitar el seguimiento">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/8d3292a5cb0b24a4b5bc8f9ae1074f513c3fed310045a6b6c534b94e344a401b-Screenshot_2025-02-14_at_11.50.38_AM.png" alt="Configuración de email del panel de OneSignal con Track link clicks desmarcado" />
</Frame>

Para deshabilitar el seguimiento para un enlace específico mientras permanece habilitado para el resto, agregue el atributo `disable-tracking=true` a su etiqueta de ancla:

```html theme={null}
<a href="https://some-domain.com/the-page" disable-tracking=true>Ver la página</a>
```

<Warning>
  Deshabilitar el seguimiento para un email completo significa que no se recopilan datos de clics — CTR muestra "N/A" en los [Email Message Reports](./email-message-reports).
</Warning>

### SMS/RCS trackable links

OneSignal proporciona enlaces rastreables acortados para mensajes SMS/RCS usando el dominio `1sgnl.co`. Simplemente envuelve tu URL en `{{ "https://your-url.com" | track_link }}` y el enlace será reemplazado por un enlace rastreable cuando se envíe el mensaje. Para uso con la API, consulta la [referencia de API de creación de mensajes SMS/RCS](/reference/sms).

Solo se permite 1 enlace rastreable por mensaje SMS/RCS.

Cuando uses el panel, también puedes hacer clic en el botón **Insert Trackable Link** debajo del cuadro de entrada de mensaje e ingresar tu URL:

<Frame caption="Modal para ingresar un enlace rastreable de SMS">
  <img src="https://mintcdn.com/onesignal/bUViEhbP9-TaIZwH/images/docs/trackable_sms_1.png?fit=max&auto=format&n=bUViEhbP9-TaIZwH&q=85&s=c1cd72dbf1cd7e3be05460bd4958ecff" alt="Modal del panel de OneSignal para insertar un enlace rastreable acortado en un mensaje SMS" width="2570" height="1232" data-path="images/docs/trackable_sms_1.png" />
</Frame>

Haz clic en **Insert trackable link** para agregar el enlace corto a tu mensaje:

```liquid theme={null}
Your order is on its way!
Track it here: {{ "https://your-url.com" | track_link }}
```

Cuando se envíe el mensaje, las llaves dobles y todo su contenido serán reemplazados por un enlace rastreable `1sgnl.co/XXXX`:

<Frame caption="Enlace rastreable tal como aparece en un dispositivo">
  <img src="https://mintcdn.com/onesignal/KSCNwSpBCNSQ8xdF/images/docs/trackable_sms_3.png?fit=max&auto=format&n=KSCNwSpBCNSQ8xdF&q=85&s=627e22caedd413d193a403aef6070b68" alt="Notificación SMS en un dispositivo móvil mostrando un enlace rastreable acortado" width="1242" height="1044" data-path="images/docs/trackable_sms_3.png" />
</Frame>

***

## URLs dinámicas

Puedes crear URLs personalizadas y específicas para usuarios con [sintaxis Liquid](./using-liquid-syntax). Por ejemplo, incluye el ID de un User en la URL para que cada persona llegue a su propia página de perfil, o inserta un ID de producto de un evento reciente para enlazar directamente a un artículo relevante.

Las URLs dinámicas pueden extraer datos de:

* Propiedades de User (p. ej., `external_id`, `email`)
* Etiquetas almacenadas en OneSignal
* `custom_data` enviado a través de la API
* Eventos personalizados (en Journeys)

<Tabs>
  <Tab title="User properties">
    Inyecta valores como `external_id` o `email` directamente en URLs.

    ```text theme={null}
    https://yourdomain.com/profile/user={{subscription.external_id}}
    ```

    Si el `external_id` del User es `12345`, la URL final es:

    ```text theme={null}
    https://yourdomain.com/profile/user=12345
    ```

    De manera similar:

    ```text theme={null}
    https://yourdomain.com/profile/email={{subscription.email}}
    ```

    Si el email del User es `john@example.com`, la URL final es:

    ```text theme={null}
    https://yourdomain.com/profile/email=john@example.com
    ```
  </Tab>

  <Tab title="Tags">
    Referencia etiquetas de usuario almacenadas en OneSignal.

    ```text theme={null}
    https://yourdomain.com/topic/{{tag_key}}
    ```

    Si el User tiene una etiqueta `tag_key` con valor `technology`, la URL final es:

    ```text theme={null}
    https://yourdomain.com/topic/technology
    ```

    Si `tag_key` no está establecido, la URL se convierte en:

    ```text theme={null}
    https://yourdomain.com/topic/
    ```

    Usa el filtro `default` para establecer un valor de reserva:

    ```text theme={null}
    https://yourdomain.com/topic/{{tag_key | default: 'unknown'}}
    ```
  </Tab>

  <Tab title="custom_data">
    Usa la API de Crear mensaje con Templates. Establece la URL en la plantilla con sintaxis Liquid que referencia el objeto `custom_data`.

    URL de plantilla:

    ```text theme={null}
    https://yourdomain.com/invoice={{message.custom_data.invoice_number}}
    ```

    Solicitud de API con `custom_data`:

    ```json theme={null}
    {
        "template_id": "YOUR_TEMPLATE_ID",
        "custom_data": {
            "invoice_number": "12345"
        }
    }
    ```

    URL final:

    ```text theme={null}
    https://yourdomain.com/invoice=12345
    ```
  </Tab>

  <Tab title="Custom Events">
    Personaliza URLs usando Eventos personalizados capturados en Journeys. Referencia las propiedades del evento directamente o asigna el evento a una variable para una sintaxis más limpia.

    **Referenciar propiedades de evento directamente:**

    ```text theme={null}
    https://yourdomain.com/order/{{ journey.event.purchase.properties.order_id }}
    ```

    Si el evento `purchase` más reciente incluyó `"order_id": "98765"`, la URL final es:

    ```text theme={null}
    https://yourdomain.com/order/98765
    ```

    **Asignar el evento para mayor legibilidad:**

    ```liquid theme={null}
    {% assign event = journey.event.purchase %}
    https://yourdomain.com/order/{{ event.properties.order_id }}
    ```

    **Acceder al evento almacenado más reciente:**

    ```text theme={null}
    https://yourdomain.com/product/{{ journey.last_event.properties.product_id | default: 'unknown' }}
    ```

    **Nombres de eventos con espacios o caracteres especiales (notación hash):**

    ```text theme={null}
    https://yourdomain.com/status/{{ journey.event["order status"].properties.current_status }}
    ```

    <Note>
      Los Eventos personalizados solo pueden referenciarse en Templates usadas dentro de Journeys. Usa `journey.first_event`, `journey.last_event` o `journey.event.<name>` para acceder a los datos del evento en Liquid.
    </Note>
  </Tab>
</Tabs>

<Tip>
  Solo sustituye datos en partes de la URL — mantén el protocolo (`https://`) y el dominio como texto estático. Usa el filtro `default` para establecer un valor de reserva si un valor no está presente.
</Tip>

***

## Parámetros UTM

Los parámetros UTM rastrean el rendimiento de las campañas añadiendo detalles de `source`, `medium` y `campaign` a las URLs. Agrega los parámetros UTM directamente a las URLs de tus mensajes.

Para notificaciones push enviadas desde el panel, OneSignal puede agregar UTMs automáticamente.

<Accordion title="UTMs automáticos para notificaciones push" icon="circle-chevron-down">
  Navega a **Settings > Push & In-app > UTM Settings** y habilita **Turn on automated UTM tagging**.

  Una vez habilitado, OneSignal agrega estos valores (editables):

  * **Source** = `utm_source` — predeterminado a `onesignal`
  * **Medium** = `utm_medium` — predeterminado a `push`
  * **Campaign** = `utm_campaign` — predeterminado a `{{ sendDate }}-{{ title }}`
    * `sendDate`: Fecha de envío
    * `title`: Primeros 15 caracteres alfanuméricos, guiones bajos o guiones del título del mensaje

  Ejemplo:

  ```text theme={null}
  https://test.com?utm_source=onesignal&utm_medium=push&utm_campaign=2020-06-03-sale-today
  ```

  <Warning>
    El etiquetado UTM automático solo aplica a notificaciones push enviadas desde el panel. No funciona con:

    * Emails, SMS o mensajes in-app
    * Journeys, Templates o mensajes automatizados
    * Solicitudes de API
    * El botón "Send Test Message"
    * Campos de datos adicionales

    Para estos casos, agrega los parámetros UTM manualmente en tus plantillas o cargas útiles de API.
  </Warning>

  #### Manejo de URL y sobrescrituras

  Si agregas manualmente parámetros UTM a un launch URL mientras el etiquetado automático está habilitado, tus UTMs manuales sobrescriben los valores automáticos.
</Accordion>

***

## Preguntas frecuentes

### ¿Cómo puedo enlazar a la tienda de aplicaciones?

Usa el enlace de la tienda como launch URL:

* **Android**: Usa el enlace de Google Play, p. ej., `https://play.google.com/store/apps/details?id=com.example.app`. Consulta [Linking to Google Play](https://developer.android.com/distribute/marketing-tools/linking-to-google-play.html).
* **iOS**: Usa el enlace de la App Store pero reemplaza `https://` con `itms-apps://` para abrir la app de la App Store directamente, p. ej., `itms-apps://apps.apple.com/app/id123456789`.

### ¿Puedo enlazar a otra aplicación?

Para mensajes push e in-app, puedes usar un esquema de URL para hacer deep link a otra app. Por ejemplo, para [hacer deep link a WhatsApp](https://faq.whatsapp.com/425247423114725): `whatsapp://wa.me/15551234567`.

Para email y SMS, usa enlaces `https://` en su lugar — los esquemas de URL personalizados no son compatibles.

### ¿Por qué mi launch URL no funciona?

Causas comunes:

* **Discrepancia de URL**: La URL debe comenzar con `https://`. Si usas `http://` en dispositivos Apple, necesitas configurar [NSAppTransportSecurity](https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity).
* **Esquemas personalizados en móvil**: Los deep links como `your-app://path` pueden no funcionar como launch URL en todas las plataformas. Usa el campo **Additional Data** o consulta [Deep Linking](./deep-linking) para un enrutamiento de app confiable.
* **Predeterminado de web push**: Si no se establece un launch URL, el web push abre tu página de inicio. Establece un launch URL explícitamente para controlar el destino.
* **Interferencia del seguimiento de clics**: En email, la reescritura de enlaces para el seguimiento de clics puede romper los deep links. Intenta [deshabilitar el seguimiento de clics](#email-link-tracking) para ese enlace específico.

### ¿Funcionan los parámetros UTM con email y SMS?

No. El etiquetado UTM automático solo aplica a notificaciones push enviadas desde el panel. Para email y SMS, agrega los parámetros UTM manualmente a las URLs en tus plantillas o cargas útiles de API. Consulta [Parámetros UTM](#parámetros-utm) para la lista completa de limitaciones.

### ¿Puedo evitar que una notificación push abra una URL?

En móvil, hacer clic en una notificación push siempre abre la app.

En web, agrega `?_osp=do_not_open` al launch URL para descartar la notificación sin abrir ninguna página. Consulta el [consejo de Launch URL](#launch-url) para ver un ejemplo.

***

<Columns cols={2}>
  <Card title="Deep Linking" icon="link" href="./deep-linking">
    Configura esquemas de URL personalizados y enrutamiento específico de app para mensajes push e in-app.
  </Card>

  <Card title="Personalización" icon="wand-magic-sparkles" href="./message-personalization">
    Inserta datos dinámicos de usuario en mensajes usando sintaxis Liquid y etiquetas.
  </Card>

  <Card title="Usando sintaxis Liquid" icon="code" href="./using-liquid-syntax">
    Guía de referencia para filtros, etiquetas y variables de Liquid en plantillas de OneSignal.
  </Card>

  <Card title="Reportes de mensajes de email" icon="chart-line" href="./email-message-reports">
    Visualiza métricas de entrega, apertura y tasa de clics para campañas de email.
  </Card>

  <Card title="Botones de acción" icon="hand-pointer" href="./action-buttons">
    Agrega botones de llamada a la acción a las notificaciones push con URLs personalizadas.
  </Card>
</Columns>
