Um Deep Link (link profundo) é uma URL que direciona o usuário para uma tela ou conteúdo específico dentro de um aplicativo móvel, ignorando a tela inicial. Ao contrário de um link comum para um site, um deep link ativa o aplicativo e abre imediatamente o conteúdo alvo. De acordo com Android Developers, deep links configurados corretamente aumentam a conversão na ação alvo em 30–50% ao reduzir o número de etapas para alcançar o conteúdo.
Pontos principais
Um Deep Link (link profundo) é um URI que, ao ser clicado, abre não uma página da web, mas uma tela específica dentro de um aplicativo móvel. A tecnologia resolve um problema fundamental das plataformas móveis: o navegador não pode abrir diretamente uma tela do aplicativo, e um deep link cria uma ponte entre a web e o código nativo. Sem um deep link, o usuário sempre chega à tela inicial e é forçado a navegar manualmente até o conteúdo desejado.
A arquitetura de um deep link consiste em duas partes: o esquema (scheme) determina qual aplicativo deve processar o link, e o caminho (path) aponta para um recurso específico dentro do aplicativo — um produto, artigo, perfil de usuário ou seção de configurações. Os parâmetros de consulta (?source=push&campaign=summer) transmitem contexto adicional para análise, personalização e atribuição de campanhas.
É importante distinguir entre um deep link e um link comum. Um link comum (https://example.com/product/42) abre no navegador e leva à versão web de uma página. Um deep link (myapp://product/42), se o aplicativo estiver instalado, abre a tela nativa com o mesmo conteúdo, mas se o aplicativo não estiver instalado, mostra um erro. Universal Link (iOS) e App Link (Android) foram criados precisamente para resolver o problema de fallback perfeito.
Tarefas diferentes exigem tipos diferentes de deep links. Alguns links funcionam apenas com o aplicativo instalado, outros podem aguardar a instalação, e outros transmitem contexto analítico. A escolha do tipo depende do caso de uso: campanha publicitária, notificação push, compartilhamento de conteúdo ou boletim informativo por e-mail.
Um Standard Deep Link é o tipo básico que é acionado apenas se o aplicativo já estiver instalado no dispositivo. O usuário clica em um link myapp://product/42, o sistema detecta o esquema registrado e abre o aplicativo na tela desejada. Se o aplicativo não estiver instalado, o navegador mostra um erro “Página não encontrada” ou simplesmente não faz nada. Este tipo é adequado para navegação interna dentro de um aplicativo já instalado.
Configurar um deep link padrão é simples: basta registrar o esquema URI no manifesto (Android) ou Info.plist (iOS). Não é necessária validação do servidor ou certificados SSL. No entanto, precisamente devido à falta de fallback, este tipo é considerado obsoleto para campanhas de marketing — a perda de tráfego de usuários sem o aplicativo pode chegar a 60%.
Um Deferred Deep Link resolve o principal problema dos deep links comuns: funciona mesmo se o aplicativo não estiver instalado. O usuário clica em um link → vê uma página (landing page ou App Store/Google Play) → instala o aplicativo → na primeira inicialização, o aplicativo recebe o contexto do link original e abre a tela desejada. A tecnologia requer um SDK intermediário (AppsFlyer, Branch, Adjust) que armazena o contexto no servidor até a primeira inicialização.
Branch é uma das plataformas mais populares para deferred deep links. Ela fornece um único link que funciona em todas as plataformas: detecta o SO do usuário, redireciona para a loja de aplicativos e, após a instalação, transmite o contexto (código promocional, ID do produto, fonte da campanha). De acordo com a Branch (2024), os deferred deep links aumentam a conversão de campanhas publicitárias em 40–70%.
Um Contextual Deep Link é um deep link comum ou adiado complementado com parâmetros de contexto: fonte de tráfego, campanha, código promocional, referenciador, ID do parceiro. Os parâmetros são transmitidos na URL e processados pelo aplicativo para personalização: mostrar um bônus de boas-vindas, abrir um produto com desconto, registrar análise de instalação.
As tags UTM (utm_source, utm_medium, utm_campaign) são uma forma padrão de transmitir contexto. No ambiente móvel, os deep links contextuais são críticos para atribuição: sem eles, o proprietário do aplicativo não sabe qual canal trouxe o usuário — tráfego orgânico, anúncios do Facebook, boletim por e-mail ou código QR. A atribuição de qualidade requer integração com um MMP (Mobile Measurement Partner).
| Tipo de Deep Link | Requer instalação | Aguardar instalação | Contexto |
|---|---|---|---|
| Padrão | Sim | Não | Apenas na URL |
| Adiado | Não | Sim | Armazenamento no servidor |
| Contextual | Qualquer | Qualquer | UTM + parâmetros |
iOS suporta deep links através de dois mecanismos: o antigo Custom URL Scheme e o moderno Universal Link (iOS 9+). O Custom URL Scheme funciona registrando um esquema personalizado no Info.plist. O aplicativo registra myapp://, e o iOS abre o aplicativo ao clicar nesse link. O problema: se o esquema não estiver registrado por nenhum aplicativo, o navegador mostra um erro.
O tratamento de deep links no iOS ocorre através do método AppDelegate application(_:open:options:) ou SceneDelegate scene(_:openURLContexts:). O desenvolvedor extrai a URL, analisa o caminho e os parâmetros, e então navega para a tela apropriada. Se o SwiftUI for usado, o tratamento é feito através de OpenURLAction ou onChange(of: openURL). É importante tratar corretamente o estado do aplicativo: o aplicativo pode não estar iniciado, em segundo plano ou ativo.
A segurança no iOS é rigorosa: qualquer aplicativo pode interceptar um Custom URL Scheme registrando o mesmo esquema. Esta é uma vulnerabilidade potencial (sequestro de esquema URL). Portanto, a Apple recomenda o Universal Link como uma alternativa mais segura: apenas o proprietário verificado do domínio pode associar links ao aplicativo. Saiba mais sobre o Universal Link no artigo Universal Link.
Android implementa deep links através de Intent Filters no AndroidManifest.xml. O aplicativo define uma Activity que trata um esquema específico (myapp://) ou hosts e caminhos específicos. Quando o usuário clica em um deep link, o Android procura uma Activity com um Intent Filter correspondente e a abre. Se houver várias Activities correspondentes, o sistema mostra um diálogo de seleção de aplicativo.
// AndroidManifest.xml - Intent Filter para Deep Link
<activity
android:name=".ui.ProductActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="myapp"
android:host="product"
android:pathPrefix="/" />
</intent-filter>
</activity>
O tratamento de deep links no Android é feito no método Activity.onCreate() ou onNewIntent(). O desenvolvedor recebe o Intent, extrai o URI e executa a navegação. Para o Jetpack Navigation, o componente Navigation Deep Link permite descrever declarativamente os deep links no gráfico de navegação. O Android App Link (Android 6.0+) é uma evolução dos deep links com verificação através de Digital Asset Links, eliminando o diálogo de seleção de aplicativo.
É importante considerar as mudanças do Android 12+: a partir da API 31, o sistema exige a declaração explícita de exported=true para Activities que tratam deep links e verifica a correção do Intent Filter. O Google Play Store verifica a verificação do App Link durante a publicação. Sem verificação, o Google pode rejeitar a atualização se os deep links levarem a páginas inexistentes do site.
A configuração de deep links inclui várias etapas comuns a ambas as plataformas. O primeiro passo é definir o esquema e a estrutura da URL. Recomenda-se usar o esquema https (em vez de um personalizado) para compatibilidade com Universal Link e App Link. A estrutura da URL deve espelhar a estrutura do site: /product/42, /profile/john, /settings/notifications. Isso simplifica a manutenção e a indexação de conteúdo pelos motores de busca.
A segunda etapa é o tratamento de deep links no código do aplicativo. Para Android, recomenda-se o Jetpack Navigation com deep links declarativos no nav_graph. Para iOS — SwiftUI NavigationStack com tratamento OpenURLAction. É importante tratar três estados do aplicativo: inicialização a frio (aplicativo não iniciado), inicialização a quente (em segundo plano) e ativo (na tela). Cada estado requer uma lógica de navegação diferente.
O teste de deep links é uma tarefa separada. O Android Studio fornece a ferramenta App Links Assistant para verificar Intent Filters. No iOS, o teste é feito através do Xcode passando uma URL por meio de argumentos do esquema de inicialização. Recomenda-se configurar uma verificação de CI: navegação automática por deep link e verificação de que a tela esperada foi aberta. Para deferred deep links, o teste inclui o ciclo completo de “instalação → primeira inicialização → contexto”. Sem testes, os deep links frequentemente quebram quando a navegação do aplicativo é atualizada.
Perguntas frequentes
Um link comum (https://site.com/page) abre no navegador. Um deep link (myapp://page ou https://site.com/page com verificação) abre uma tela dentro de um aplicativo móvel. Um deep link também pode transmitir contexto: código promocional, fonte de tráfego, ID do referenciador.
Um esquema URI é um prefixo de URL que determina qual aplicativo deve processar o link (por exemplo, myapp://, vk://, tg://). O sistema usa o esquema para roteamento: encontra o aplicativo que registrou este esquema e passa a URL para ele processar.
O usuário clica em um link → o serviço (Branch, AppsFlyer) lembra o contexto → redireciona para a App Store/Google Play → após a instalação e primeira inicialização, o SDK passa o contexto salvo para o aplicativo → o aplicativo abre a tela desejada, como se o usuário já tivesse o aplicativo instalado.
Um deep link comum — não. Um deferred deep link — sim, através de uma página intermediária que redireciona para a loja de aplicativos e salva o contexto. Universal Links e App Links abrem o site como fallback se o aplicativo não estiver instalado.
No Android, use adb: adb shell am start -W -a android.intent.action.VIEW -d “myapp://product/42”. No iOS — xcrun simctl openurl booted “myapp://product/42”. Os consoles de teste do Firebase Dynamic Links e Branch estão disponíveis para ambas as plataformas.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também