Guía práctica de deep links y deferred deep linking para activar usuarios desde cualquier canal
Qué son los deep links y el deferred deep linking, cómo se implementan con Universal Links y App Links, qué hacer tras el cierre de Firebase Dynamic Links y cómo medir que el usuario llega a la pantalla correcta.

Si estás invirtiendo en tráfico desde anuncios, email, SMS, QR, influencers o afiliados y notas que “la magia se rompe” justo al tocar el enlace, puede que no sea un problema de creatividades, sino del salto canal → app → pantalla correcta. Es un patrón frecuente: campañas con buen CTR que luego se desinflan por fricción, rutas mal resueltas o pérdidas de contexto tras instalar.
Si el anuncio promete “-20% en zapatillas hoy”, el usuario quiere ver las zapatillas con el descuento aplicado; si el email dice “tu carrito te está esperando”, espera ver el carrito tal cual lo dejó. Cuando ese puente falla, vuelve atrás o cierra, y el coste por adquisición sube sin que nadie entienda por qué.
Lo esencial, antes de entrar en detalle:
- Un deep link abre la app en una pantalla concreta si ya está instalada. Hoy, la forma recomendada son los enlaces HTTPS de tu propio dominio: Universal Links en iOS y App Links en Android, que abren la web si la app no está.
- El deferred deep linking intenta recuperar ese destino después de instalar la app. En Android se apoya en la Install Referrer API de Google Play; en iOS no hay un equivalente, y se usa un proveedor o una solución propia que respete la privacidad. No funciona en todos los casos: la app necesita un plan B.
- Firebase Dynamic Links se apagó en agosto de 2025. Si lo usabas, hay que migrar los enlaces y revisar los que siguen circulando.
- Abrir una ruta no concede acceso: después del login, la app debe comprobar permisos y validar el destino.
Entender el problema real: el salto entre canal y pantalla
Hay equipos que creen que “si la app abre, ya está”. En marketing, el deep linking no es “abrir la app”; es “cumplir la promesa del clic”. Y esa promesa depende del canal, del mensaje y del momento del usuario: el contexto que traía (el anuncio, el asunto del email, la conversación de WhatsApp) se evapora si la app le deja en el home. No solo añades pasos: rompes el hilo.
Deep links: la versión simple que ya debería estar en cualquier app
Un deep link, en términos prácticos, es un enlace que abre tu app en una pantalla específica. No en la portada, no en “descubre”, no en “inicio”. En una pantalla con intención. Una ficha de producto. Un carrito. Una promo. Un chat. Una reserva. Una sección concreta. Un contenido.
Cuando lo implementas bien, en vez de pedirle al usuario que “navegue”, le das el resultado: hay mucha diferencia entre “abre y busca” y “abre y listo”. Un problema frecuente en apps con buen tráfico y activación floja son enlaces sin destino claro, o con destino claro pero mal resuelto por estados (no logueado, onboarding pendiente, permisos, etc.).
Deferred deep linking: cuando la app no está instalada y aún así quieres continuidad
Aquí es donde muchas campañas se rompen. Con adquisición, lo normal es que el usuario no tenga la app. Entonces, ¿qué pasa cuando toca el enlace? Si lo mandas al store y, tras instalar, cae en home sin contexto… estás tirando parte del esfuerzo. El usuario instaló “por algo” y ese “algo” ya no está en pantalla. Es una instalación ciega, y las instalaciones ciegas activan menos.
El deferred deep linking intenta resolver eso: guardar el destino original y recuperarlo después de la instalación. Si funciona, el usuario instala y, al abrir por primera vez, aterriza en la promo, el producto, el registro con código o el carrito que le motivó a instalar. Pero no está garantizado en todos los canales, dispositivos e instalaciones: depende de la plataforma, del método que uses y de por dónde llegó el usuario.
A nivel de negocio, esto suele pesar en dos cosas: la activación tras la instalación y la atribución (saber qué campañas generan valor). Si tu stack no conserva contexto, marketing termina optimizando “instalaciones” en vez de “usuarios que hacen cosas”.
Cómo funciona el deferred por dentro
El problema técnico es sencillo de enunciar: el enlace no “atraviesa” la tienda de aplicaciones. Cuando el usuario instala, la app se abre por primera vez sin saber de dónde venía. Universal Links y App Links, por sí solos, tampoco lo resuelven: abren la app si ya está instalada, pero no conservan el contexto a través de una instalación. Así que alguien tiene que guardar el destino antes de la instalación y devolvérselo a la app en ese primer arranque.
- En Android, cuando la instalación llega desde Google Play, la Install Referrer API permite a la app leer la referencia que llevaba el enlace a la ficha de la tienda y usarla para decidir a qué pantalla ir. Si la app se instala por otra vía, esa referencia no existe.
- En iOS no hay un equivalente al Install Referrer que entregue a la app el enlace de origen tras la instalación. El deferred se resuelve con un proveedor especializado (plataformas de deep linking y de atribución móvil) o con una solución propia, y cualquiera de las dos tiene que respetar las normas de privacidad de Apple, que prohíben obtener datos del dispositivo para identificarlo de forma única (lo que se conoce como fingerprinting); una app que lo haga, o que incluya un SDK que lo haga, puede ser rechazada en la App Store. Los métodos compatibles con la privacidad no recuperan el destino en todos los casos. Antes de elegir proveedor, pregunta qué método usa y con qué fiabilidad recupera el destino.
En la práctica, conviene diseñar la experiencia para que funcione aunque el destino no se recupere: una bienvenida que pregunte o sugiera lo que el usuario venía a ver es mucho mejor que caer en un home genérico. Y conviene probarlo canal por canal, y dejar escritas las limitaciones que se conocen.
Tipos de enlaces y por qué importa el formato (aunque no lo parezca)
Aunque el objetivo sea “continuidad”, el formato del enlace influye mucho en cómo se comporta en el mundo real. Hay dos familias:
- Esquemas propios (ejemplo mental:
miapp://producto/123). Son fáciles de montar, pero si la app no está instalada no llevan a ninguna parte, cualquier app puede declarar el mismo esquema y muchos entornos los bloquean o piden confirmación. - Enlaces HTTPS asociados a tu app: Universal Links en iOS y App Links en Android. Son direcciones normales de tu web que el sistema abre directamente en la app si está instalada y en el navegador si no lo está. Por eso son la opción recomendada: siempre tienen a dónde caer.
Para que un enlace HTTPS abra la app hacen falta dos cosas distintas: que el sistema compruebe que la app y el dominio son del mismo dueño (la asociación) y que quede definido qué rutas de ese dominio abre la app (la selección de rutas). Cada plataforma lo reparte a su manera:
- En iOS (documentación de Apple), publicas en tu dominio el fichero
apple-app-site-association(en la ruta/.well-known/, por HTTPS con un certificado válido y sin redirecciones) y la app declara ese dominio en su capacidad de Associated Domains. En iOS, ese mismo fichero es también donde se indican las rutas o patrones de URL que abre la app. Desde iOS 14, el sistema no lee el fichero directamente de tu servidor sino de una CDN de Apple, así que los cambios pueden tardar en notarse. - En Android (documentación de Android), el fichero
assetlinks.json(también en/.well-known/, por HTTPS y sin redirecciones) hace la asociación: el nombre del paquete y la huella del certificado de firma. Las rutas se declaran en la propia app, en los filtros de intents de su manifiesto con verificación automática (android:autoVerify="true"). Desde Android 15 existe además la opción de reglas dinámicas en elassetlinks.json, con condiciones propias: se aplican en dispositivos con Android 15 o posterior que cumplen los requisitos, solo dentro de los dominios que declara la app, y si el fichero tiene errores, el dispositivo vuelve a las reglas del manifiesto.
Así que los dos ficheros no contienen necesariamente las mismas reglas de rutas ni se comportan igual: conviene revisar cada plataforma por separado. Si faltan, están mal servidos o no cubren una ruta, el enlace abre la web en lugar de la app, y nadie se entera hasta que mira las métricas. Merece la pena comprobarlos cada vez que cambian las rutas, el dominio o la firma de la app.
El punto aquí no es ponerse purista. El punto es que tu enlace debe funcionar donde vive el usuario: redes sociales con navegadores internos, apps de mensajería, navegadores, email clients. No quieres descubrir el día del lanzamiento que “en iOS abre el navegador dentro de Instagram y no salta a la app”. Eso pasa. Y pasa más de lo que debería.
Si usabas Firebase Dynamic Links
Durante años, muchas apps resolvieron el deep linking y el deferred con Firebase Dynamic Links. Google lo apagó el 25 de agosto de 2025 (FAQ de Firebase): desde entonces, los enlaces servidos por el servicio (los de page.link y los de dominios propios configurados en él) devuelven un error 404 a quien los toca.
Si tu app los usaba, hay tres tareas:
- Deep links directos: pasar a Universal Links y App Links sobre tu propio dominio, con los ficheros de verificación del apartado anterior. Es lo que recomienda la propia Firebase si no necesitas todas las funciones que tenía el servicio.
- Deferred y atribución: si las necesitas, elegir un proveedor especializado de deep linking o montar una solución propia (Install Referrer en Android y lo que decidas para iOS).
- Enlaces que siguen circulando: emails antiguos, campañas activas, perfiles en redes y, sobre todo, códigos QR impresos. Lo que un QR lleva codificado no cambia, así que todo depende del dominio de la URL:
- Si era un dominio
page.link, no lo controla tu empresa y Firebase no permite conservarlo ni transferirlo: esos enlaces no se pueden recuperar y hay que sustituirlos donde se pueda. - Si era un dominio propio, puedes seguir controlando esa URL y volver a resolverla con otra infraestructura (tu propio servidor, otro proveedor o Firebase Hosting con reglas nuevas), de modo que el QR impreso vuelva a funcionar sin reimprimirlo.
- Recuperar cada enlace concreto depende de conservar sus datos (Firebase ofrece exportar los metadatos de los enlaces) y de la solución que adoptes: no siempre será posible con todos.
- Si era un dominio
La clave de todo: no es “abrir”, es “rutar” con estados
Si tuviera que resumir el deep linking en una frase, sería esta: tu app tiene que saber interpretar un enlace y convertirlo en una navegación estable, incluso si el usuario no está en el estado “perfecto”.
Porque el mundo real es así:
- El usuario puede estar deslogueado.
- Puede tener onboarding pendiente.
- Puede no haber dado permisos.
- Puede llegar desde un webview que se porta raro.
- El contenido puede haber cambiado (sin stock, promo vencida, URL antigua).
- Puede estar en un dispositivo lento o con conexión inestable.
Cuando una app no contempla esos estados, la experiencia se rompe. El clásico: link a carrito → app abre → login → home. El usuario siente que le mentiste. Y tú sientes que el “retargeting no funciona”. Pero sí funcionaba: se rompió el puente.
Por eso, la implementación buena siempre tiene una idea: “destino pendiente”. Es decir, si el destino requiere login, guardo ese destino, completo login y vuelvo al destino. Si requiere onboarding, lo mismo. Si requiere permisos del sistema, gestiono el orden para que el usuario llegue al primer valor sin fricción innecesaria.
Y una regla de seguridad que no se puede saltar: abrir una ruta no concede autorización. Un enlace a un pedido, un carrito o una reserva lo puede tocar cualquiera que lo reciba o lo adivine. Después del login, la app (y sobre todo el servidor) tiene que comprobar que ese usuario tiene permiso para ver ese recurso, y validar el destino: que sea una ruta conocida de la app, con parámetros válidos, y no una dirección arbitraria a la que redirigir. Si no pasa la comprobación, se lleva al usuario a un destino seguro.
Este concepto pesa todavía más cuando tu app crece rápido. Si no tienes un “router” central que gestione enlaces, cada feature termina inventando su propia manera de navegar. Y cuando eso pasa, los enlaces se vuelven impredecibles.
Donde más se gana dinero con deep links: adquisición, carrito y promo
Hay destinos que, por puro sentido común, deberían ser prioridad. No porque “lo diga un manual”, sino porque el usuario viene con intención alta.
La promo es el caso más obvio. Un usuario que toca un anuncio de descuento no quiere explorar tu home. Quiere ver la promo con el descuento aplicado, entender condiciones rápido y tener un camino corto hacia el checkout. Si en lugar de eso le das una pantalla genérica, lo obligas a buscar, y en esa búsqueda se distrae.
El carrito es aún más delicado. En recuperación de carrito, el usuario ya hizo el trabajo mental: eligió cosas. Si al tocar el enlace no ve el carrito, siente que perdió su avance. Y si siente que perdió avance, se va. Aquí es donde un deep link bien resuelto puede ayudar a recuperar compras sin tocar creatividades ni presupuesto; cuánto, lo dirá la medición.
El tercer destino es el registro cuando hay un “motivo”. Por ejemplo, “regístrate para recibir X”, “crea tu cuenta para activar la prueba”, “entra para ver tu pedido”. Si el usuario toca y termina en un registro genérico sin explicación ni continuidad, el abandono sube. Si llega con mensaje contextual y un flujo claro, el usuario siente que todo tiene sentido.
Y si tu app trabaja con referidos, la continuidad es todavía más crítica. Un programa de referidos que pierde el código en la instalación es un programa de referidos que se auto-sabotea. Mucha gente instala solo por el beneficio. Si desaparece, desaparece el motivo.
Analítica: medir aperturas no sirve si no mides “llegadas”
En deep linking, lo que de verdad importa no es solo “abrí la app”. Importa “llegué al destino correcto”. Suena obvio, pero muchos equipos se quedan en el evento superficial.
A nivel de métricas, necesitas ver el recorrido completo: clic en canal → apertura de app → ruteo (pantalla) → acción de valor. La magia está en el ruteo, porque ahí se te caen los usuarios cuando hay estados no contemplados.
El patrón típico cuando lo mides bien es curioso: a veces un canal tiene buen CTR pero mal ruteo (por ejemplo, porque el navegador interno rompe el salto). Otro canal puede tener CTR más bajo pero mejor ruteo y mejor activación. Si solo miras clics, optimizas mal. Si miras ruteo y activación, optimizas como adulto.
Además, medir bien te ayuda a saber si el deferred está funcionando. Si estás mandando gente al store, necesitas saber cuántos vuelven con el destino recuperado. Porque si no, tu adquisición está llena de “instalaciones que nunca encuentran lo prometido”.
Cómo se integra esto con producto y UX sin que parezca un parche
Aquí es donde muchos equipos se equivocan: tratan deep linking como “un requisito de marketing” y lo implementan como parche. Y luego, cuando hay un rediseño o un cambio de rutas, todo se rompe.
La forma sana de hacerlo es asumir que deep linking es parte del producto. Igual que tienes navegación, tienes rutas. Igual que tienes estados, tienes manejo de estados. Igual que tienes analítica, tienes eventos consistentes.
En apps modernas, da igual si trabajas con aplicaciones nativas o multiplataforma: la lógica existe igual. Solo cambia dónde vive. Incluso si tu stack es React Native o Flutter, el principio es idéntico: necesitas un punto central que reciba el enlace, lo valide, decida qué hacer y navegue con reglas claras. No quieres que cada pantalla interprete parámetros “a su manera”.
Y aquí entra algo que parece menor pero no lo es: los fallbacks. Si el contenido no existe, no puedes dejar al usuario en una pantalla vacía o en un error incomprensible. Tienes que llevarlo a un destino alternativo coherente. Si la promo venció, muéstrale promos activas. Si el producto no está, muéstrale categoría similar. Si la ruta es antigua, redirecciona. Eso también es experiencia.
El punto débil: apps dentro de apps (webviews) y por qué rompen tanto
Instagram, TikTok y algunas apps de email abren enlaces en navegadores internos. Esas apps gestionan ellas mismas la navegación y no siempre pasan el enlace al sistema, así que un Universal Link o un App Link puede acabar abriendo la web en lugar de tu app. A veces bloquean redirecciones. A veces piden confirmaciones. Y eso genera el típico escenario: “a mí me funciona” (porque lo probaste en Chrome) pero “en campaña no convierte” (porque la gente viene desde IG).
Por eso, cuando haces deep linking de verdad, testear en los canales reales no es opcional. Si tu campaña vive en stories, prueba en stories. Si tu tráfico viene de WhatsApp, prueba en WhatsApp. Y a veces una campaña que parecía mala resulta ser, en parte, un problema de enlaces mal resueltos en navegadores internos.
Cómo priorizar sin volverte loco: empieza por 3 rutas y escala
No hace falta mapear 200 rutas el primer mes. La estrategia más práctica es empezar por lo que mueve negocio.
Normalmente, el primer “pack” de rutas incluye: promo principal, carrito, registro contextual. Luego agregas rutas de contenido, categorías, perfil, pedidos. Y después, rutas para CRM y reactivación.
Lo importante es que cada ruta que implementes sea robusta: que contemple login, onboarding y fallbacks. Si implementas rutas “a medias”, terminas con un sistema frágil que te explota cuando más lo necesitas.
Y si tu objetivo es velocidad, conviene arrancar con una primera versión mínima del linking: pocas rutas críticas, pero bien resueltas, con medición decente. Luego iteras. Esto, en la práctica, suele dar mejores resultados que intentar abarcar todo y quedarse corto.
Efecto colateral positivo: el deep linking ordena tu arquitectura
Cuando implementas bien, pasa algo interesante: tu app se vuelve más ordenada internamente. Porque para que un enlace funcione, tienes que definir rutas claras, parámetros esperados, estados y reglas. Eso obliga a producto y desarrollo a ponerse de acuerdo en cómo navega la app, qué es “una pantalla”, qué depende de sesión, qué es público, qué es privado.
Ese orden se nota especialmente cuando la app se mantiene y evoluciona durante años. Si crece sin un sistema de rutas, cada update rompe algo, y cada campaña es una ruleta. Con un sistema bien planteado, puedes iterar sin miedo: cambias UI, mantienes rutas, y marketing no sufre. Es la misma lógica de separar responsabilidades que explicamos en arquitectura limpia y testing desde el inicio.
Conectar deep linking con pagos, notificaciones y reactivación
Hay tres integraciones que suelen elevar el impacto del linking: pagos, push y CRM.
Cuando el destino final es compra, la fricción de pago importa. Si tu usuario llega a una promo y luego se enfrenta a un checkout pesado, el efecto del deep link se diluye. Por eso, en flujos de alto valor, conviene tener bien trabajada la integración de pagos para que el paso de “quiero” a “pago” sea lo más directo posible.
Con notificaciones push, el deep link es prácticamente obligatorio. Una push sin deep link es como decirle al usuario “ven” sin decirle “a dónde”. Push con deep link es “ven a esto exacto”.
Y en CRM (email/SMS), lo mismo: el enlace debe llevar a la acción, no a un inicio genérico. Si tu email dice “confirma tu email”, el enlace no puede mandar a home. Si dice “termina tu compra”, no puede mandar a un listado.
“¿Y si mi app es a medida y tiene flujos raros?” Mejor aún
Aquí viene lo divertido: cuanto más particular es el producto, más valor tiene el linking bien hecho. Si tu app tiene rutas específicas (por ejemplo, onboarding por roles, pantallas según tipo de usuario, contenido personalizado), el deep linking te permite crear experiencias contextuales que se sienten muy premium.
Ejemplo: usuario B2B que viene de un anuncio “agenda demo”. El deep link puede abrir directamente la pantalla de agenda. Usuario B2C que viene por un descuento, abre directamente el descuento. Mismo producto, rutas diferentes, experiencia diferente, siempre con las mismas comprobaciones de acceso.
Recomendación final de implementación: continuidad, no trucos
Si tuviera que darte una regla simple para que esto funcione en la vida real, sería: diseña el flujo como si el usuario fuera a tocar el enlace con prisa, sin paciencia y sin ganas de “entender tu app”. Porque así es.
El usuario quiere resultado. Quiere continuidad. Quiere que el clic tenga sentido.
Por eso, cuando vayas a implementar o mejorar deep links y deferred deep linking, enfócate en:
- rutas críticas alineadas a intención
- enlaces HTTPS (Universal Links y App Links) con sus ficheros de verificación publicados y comprobados
- manejo de estados (login/onboarding/permisos) y comprobación de acceso al destino después del login
- fallbacks coherentes, también para cuando el deferred no recupera el destino (Install Referrer en Android cuando la instalación viene de Google Play; en iOS, un método compatible con las normas de privacidad)
- medición de ruteo y activación
- pruebas en canales reales (especialmente webviews)
- ningún enlace antiguo de Firebase Dynamic Links sin resolver en emails, QR o campañas (los de dominio propio, reapuntados; los de
page.link, sustituidos donde se pueda) - las limitaciones conocidas por canal y plataforma, escritas y compartidas con marketing
Y si estás en una fase donde el crecimiento depende de campañas y reactivación, esto deja de ser “nice to have” y pasa a ser infraestructura de revenue: antes de subir presupuesto, merece la pena comprobar que cada clic llega a donde prometió.
Fuentes oficiales citadas
Preguntas frecuentes
1) ¿Qué diferencia hay entre deep link y deferred deep linking?
El deep link abre la app en una pantalla concreta si ya está instalada. El deferred intenta lo mismo cuando el usuario tiene que instalar primero, recuperando el destino en la primera apertura. No lo consigue en todos los canales, dispositivos e instalaciones, así que la app debe tener un plan B para cuando no se recupera.
2) ¿Qué hago si usaba Firebase Dynamic Links?
Firebase Dynamic Links se apagó el 25 de agosto de 2025 y sus enlaces devuelven un error 404. Para los deep links directos, la vía es Universal Links en iOS y App Links en Android sobre tu propio dominio; para el deferred y la atribución, un proveedor especializado o una solución propia. Revisa también los enlaces antiguos que sigan en emails, QR impresos o perfiles: los de page.link no se pueden recuperar, pero si usabas un dominio propio puede ser posible volver a resolverlos con otra infraestructura, según los datos de enlaces que conserves.
3) ¿Qué pasa si el destino requiere login?
Debes guardar el “destino pendiente”, llevar al usuario a login/onboarding y, al completar, volver a ese destino. Pero antes de mostrarlo, la app tiene que comprobar que ese usuario tiene permiso para verlo y que la ruta es válida: abrir un enlace a un pedido, un carrito o una reserva no da acceso por sí mismo.
4) ¿Cómo sé si mis enlaces están funcionando en campañas?
Mide el embudo completo: clic → apertura → llegada real a pantalla (routed) → evento de valor (registro, compra, etc.). Sin “routed” estás a ciegas.
5) ¿Por qué a veces falla en Instagram o TikTok?
Porque usan navegadores internos (webviews) que pueden bloquear o alterar el salto a la app. Por eso necesitas fallbacks y testeo real por canal/dispositivo.