Deep Link: nó là gì, các loại liên kết và nguyên lý hoạt động

Tác giả: IT Sectr Đã đăng: 2026-05-14 Thời gian đọc: 9 phút

Deep Link (liên kết sâu) là một URL đưa người dùng đến một màn hình hoặc nội dung cụ thể bên trong ứng dụng di động, bỏ qua màn hình chính. Không giống như liên kết thông thường đến một trang web, deep link kích hoạt ứng dụng và mở ngay nội dung mục tiêu. Theo Android Developers, các deep link được cấu hình đúng cách giúp tăng tỷ lệ chuyển đổi đến hành động mục tiêu lên 30–50% nhờ giảm số bước để truy cập nội dung.

Những điểm chính

  • Deep Link — một URL mở một màn hình ứng dụng cụ thể, không phải trang chủ
  • Sơ đồ URI (myapp://profile/123) — phương pháp deep link cổ điển, hoạt động trên cả hai nền tảng
  • Deferred Deep Link — một liên kết kích hoạt sau khi cài đặt ứng dụng, truyền ngữ cảnh
  • Universal Link (iOS) và App Link (Android) — sự phát triển của deep link với xác minh tên miền
  • Deep Link ngữ cảnh — truyền các tham số bổ sung: mã khuyến mãi, người giới thiệu, nguồn lưu lượng

Deep Link (liên kết sâu) là một URI khi nhấp vào sẽ mở không phải một trang web mà là một màn hình cụ thể bên trong ứng dụng di động. Công nghệ này giải quyết một vấn đề cơ bản của các nền tảng di động: trình duyệt không thể mở trực tiếp màn hình ứng dụng và deep link tạo cầu nối giữa web và mã gốc. Nếu không có deep link, người dùng luôn đến màn hình chính và phải tự điều hướng đến nội dung mong muốn.

Kiến trúc của một deep link bao gồm hai phần: sơ đồ (scheme) xác định ứng dụng nào sẽ xử lý liên kết và đường dẫn (path) trỏ đến một tài nguyên cụ thể trong ứng dụng — sản phẩm, bài viết, hồ sơ người dùng hoặc phần cài đặt. Tham số truy vấn (?source=push&campaign=summer) truyền ngữ cảnh bổ sung cho phân tích, cá nhân hóa và phân bổ chiến dịch.

Điều quan trọng là phân biệt giữa deep link và liên kết thông thường. Liên kết thông thường (https://example.com/product/42) mở trong trình duyệt và dẫn đến phiên bản web của trang. Deep link (myapp://product/42), nếu ứng dụng đã được cài đặt, sẽ mở màn hình gốc với cùng nội dung, nhưng nếu ứng dụng chưa được cài đặt, nó sẽ hiển thị lỗi. Universal Link (iOS) và App Link (Android) được tạo ra chính xác để giải quyết vấn đề dự phòng (fallback) liền mạch.

Các tác vụ khác nhau yêu cầu các loại deep link khác nhau. Một số liên kết chỉ hoạt động với ứng dụng đã cài đặt, một số khác có thể chờ cài đặt và một số khác truyền ngữ cảnh phân tích. Việc chọn loại phụ thuộc vào trường hợp sử dụng: chiến dịch quảng cáo, thông báo đẩy, chia sẻ nội dung hoặc bản tin email.

Deep Link tiêu chuẩn (Standard Deep Link)

Deep Link tiêu chuẩn là loại cơ bản chỉ kích hoạt nếu ứng dụng đã được cài đặt trên thiết bị. Người dùng nhấp vào liên kết myapp://product/42, hệ thống phát hiện sơ đồ đã đăng ký và mở ứng dụng trên màn hình mong muốn. Nếu ứng dụng chưa được cài đặt, trình duyệt hiển thị lỗi “Không tìm thấy trang” hoặc không làm gì cả. Loại này phù hợp cho điều hướng nội bộ trong một ứng dụng đã được cài đặt.

Thiết lập deep link tiêu chuẩn rất đơn giản: chỉ cần đăng ký sơ đồ URI trong tệp kê khai (Android) hoặc Info.plist (iOS). Không cần xác thực máy chủ hoặc chứng chỉ SSL. Tuy nhiên, chính vì thiếu dự phòng mà loại này được coi là lỗi thời cho các chiến dịch tiếp thị — tổn thất lưu lượng từ người dùng không có ứng dụng có thể lên tới 60%.

Deferred Deep Link (liên kết sâu hoãn lại)

Deferred Deep Link giải quyết vấn đề chính của deep link thông thường: nó hoạt động ngay cả khi ứng dụng chưa được cài đặt. Người dùng nhấp vào liên kết → thấy một trang (trang đích hoặc App Store/Google Play) → cài đặt ứng dụng → khi khởi chạy lần đầu, ứng dụng nhận được ngữ cảnh của liên kết gốc và mở màn hình mong muốn. Công nghệ này yêu cầu một SDK trung gian (AppsFlyer, Branch, Adjust) lưu trữ ngữ cảnh trên máy chủ cho đến lần khởi chạy đầu tiên.

Branch là một trong những nền tảng phổ biến nhất cho deferred deep link. Nó cung cấp một liên kết duy nhất hoạt động trên tất cả các nền tảng: phát hiện hệ điều hành của người dùng, chuyển hướng đến cửa hàng ứng dụng và sau khi cài đặt sẽ truyền ngữ cảnh (mã khuyến mãi, ID sản phẩm, nguồn chiến dịch). Theo Branch (2024), deferred deep link giúp tăng tỷ lệ chuyển đổi của chiến dịch quảng cáo lên 40–70%.

Contextual Deep Link (liên kết sâu ngữ cảnh)

Contextual Deep Link là một deep link thông thường hoặc hoãn lại được bổ sung các tham số ngữ cảnh: nguồn lưu lượng, chiến dịch, mã khuyến mãi, người giới thiệu, ID đối tác. Các tham số được truyền trong URL và được ứng dụng xử lý để cá nhân hóa: hiển thị tiền thưởng chào mừng, mở sản phẩm giảm giá, ghi lại phân tích cài đặt.

Thẻ UTM (utm_source, utm_medium, utm_campaign) là cách tiêu chuẩn để truyền ngữ cảnh. Trên di động, deep link ngữ cảnh rất quan trọng cho việc phân bổ: nếu không có chúng, chủ sở hữu ứng dụng không biết kênh nào đã mang người dùng đến — lưu lượng tự nhiên, quảng cáo Facebook, bản tin email hay mã QR. Phân bổ chất lượng yêu cầu tích hợp với MMP (Mobile Measurement Partner).

Loại Deep LinkYêu cầu cài đặtChờ cài đặtNgữ cảnh
Tiêu chuẩnKhôngChỉ trong URL
Hoãn lạiKhôngLưu trữ máy chủ
Ngữ cảnhBất kỳBất kỳUTM + tham số

iOS hỗ trợ deep link thông qua hai cơ chế: Custom URL Scheme cũ và Universal Link hiện đại (iOS 9+). Custom URL Scheme hoạt động bằng cách đăng ký một sơ đồ tùy chỉnh trong Info.plist. Ứng dụng đăng ký myapp:// và iOS mở ứng dụng khi nhấp vào liên kết như vậy. Vấn đề: nếu sơ đồ không được ứng dụng nào đăng ký, trình duyệt hiển thị lỗi.

Xử lý deep link trên iOS diễn ra thông qua phương thức AppDelegate application(_:open:options:) hoặc SceneDelegate scene(_:openURLContexts:). Nhà phát triển trích xuất URL, phân tích đường dẫn và tham số, sau đó điều hướng đến màn hình phù hợp. Nếu sử dụng SwiftUI, việc xử lý được thực hiện thông qua OpenURLAction hoặc onChange(of: openURL). Điều quan trọng là xử lý đúng trạng thái ứng dụng: ứng dụng có thể chưa khởi chạy, đang chạy nền hoặc đang hoạt động.

Bảo mật trên iOS rất nghiêm ngặt: bất kỳ ứng dụng nào cũng có thể chặn Custom URL Scheme bằng cách đăng ký cùng một sơ đồ. Đây là một lỗ hổng tiềm ẩn (chiếm quyền sơ đồ URL). Do đó, Apple khuyến nghị Universal Link như một giải pháp thay thế an toàn hơn: chỉ chủ sở hữu tên miền đã được xác minh mới có thể liên kết với ứng dụng. Tìm hiểu thêm về Universal Link trong bài viết Universal Link.

Android triển khai deep link thông qua Intent Filter trong AndroidManifest.xml. Ứng dụng định nghĩa một Activity xử lý một sơ đồ cụ thể (myapp://) hoặc các máy chủ và đường dẫn cụ thể. Khi người dùng nhấp vào deep link, Android tìm kiếm Activity có Intent Filter phù hợp và mở nó. Nếu có nhiều Activity phù hợp, hệ thống hiển thị hộp thoại chọn ứng dụng.

xml
// AndroidManifest.xml - Intent Filter cho 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>

Xử lý deep link trên Android được thực hiện trong phương thức Activity.onCreate() hoặc onNewIntent(). Nhà phát triển nhận Intent, trích xuất URI và thực hiện điều hướng. Đối với Jetpack Navigation, thành phần Navigation Deep Link cho phép mô tả khai báo deep link trong đồ thị điều hướng. Android App Link (Android 6.0+) là sự phát triển của deep link với xác minh thông qua Digital Asset Links, loại bỏ hộp thoại chọn ứng dụng.

Điều quan trọng là xem xét các thay đổi của Android 12+: từ API 31, hệ thống yêu cầu khai báo tường minh exported=true cho các Activity xử lý deep link và kiểm tra tính đúng đắn của Intent Filter. Google Play Store kiểm tra xác minh App Link khi xuất bản. Nếu không có xác minh, Google có thể từ chối bản cập nhật nếu deep link dẫn đến các trang không tồn tại trên trang web.

Thiết lập deep link bao gồm một số giai đoạn chung cho cả hai nền tảng. Bước đầu tiên là xác định sơ đồ và cấu trúc URL. Nên sử dụng sơ đồ https (thay vì sơ đồ tùy chỉnh) để tương thích với Universal Link và App Link. Cấu trúc URL nên phản ánh cấu trúc trang web: /product/42, /profile/john, /settings/notifications. Điều này đơn giản hóa việc bảo trì và lập chỉ mục nội dung bởi các công cụ tìm kiếm.

Giai đoạn thứ hai là xử lý deep link trong mã ứng dụng. Đối với Android, nên sử dụng Jetpack Navigation với deep link khai báo trong nav_graph. Đối với iOS — SwiftUI NavigationStack với xử lý OpenURLAction. Điều quan trọng là xử lý ba trạng thái ứng dụng: khởi động nguội (ứng dụng chưa khởi chạy), khởi động ấm (đang chạy nền) và đang hoạt động (trên màn hình). Mỗi trạng thái yêu cầu logic điều hướng khác nhau.

  • Xác định sơ đồ và cấu trúc URL (myapp:// hoặc https://your.domain/)
  • Đăng ký sơ đồ trong tệp kê khai (Android) hoặc Info.plist (iOS)
  • Triển khai xử lý trong Activity hoặc AppDelegate/SwiftUI
  • Thiết lập dự phòng cho trường hợp ứng dụng chưa được cài đặt
  • Kiểm tra cả ba trạng thái: khởi động nguội, khởi động ấm, đang hoạt động

Kiểm tra deep link là một nhiệm vụ riêng. Android Studio cung cấp công cụ App Links Assistant để kiểm tra Intent Filter. Trên iOS, việc kiểm tra được thực hiện thông qua Xcode bằng cách truyền URL qua các đối số sơ đồ khởi chạy. Nên thiết lập kiểm tra CI: điều hướng deep link tự động và xác minh rằng màn hình mong đợi đã mở. Đối với deferred deep link, kiểm tra bao gồm chu trình đầy đủ “cài đặt → khởi chạy lần đầu → ngữ cảnh”. Nếu không kiểm tra, deep link thường bị hỏng khi cập nhật điều hướng ứng dụng.

Câu hỏi thường gặp

Deep link khác gì so với liên kết thông thường?

Liên kết thông thường (https://site.com/page) mở trong trình duyệt. Deep link (myapp://page hoặc https://site.com/page có xác minh) mở một màn hình bên trong ứng dụng di động. Deep link cũng có thể truyền ngữ cảnh: mã khuyến mãi, nguồn lưu lượng, ID người giới thiệu.

Sơ đồ URI là gì và tại sao cần nó?

Sơ đồ URI là tiền tố URL xác định ứng dụng nào sẽ xử lý liên kết (ví dụ: myapp://, vk://, tg://). Hệ thống sử dụng sơ đồ để định tuyến: tìm ứng dụng đã đăng ký sơ đồ này và chuyển URL cho nó xử lý.

Deferred deep link hoạt động như thế nào?

Người dùng nhấp vào liên kết → dịch vụ (Branch, AppsFlyer) ghi nhớ ngữ cảnh → chuyển hướng đến App Store/Google Play → sau khi cài đặt và khởi chạy lần đầu, SDK truyền ngữ cảnh đã lưu cho ứng dụng → ứng dụng mở màn hình mong muốn, như thể người dùng đã cài đặt ứng dụng từ trước.

Có thể sử dụng deep link mà không cài đặt ứng dụng không?

Deep link thông thường — không. Deferred deep link — có, thông qua một trang trung gian chuyển hướng đến cửa hàng ứng dụng và lưu ngữ cảnh. Universal Link và App Link mở trang web dưới dạng dự phòng nếu ứng dụng chưa được cài đặt.

Làm thế nào để kiểm tra deep link trên thiết bị thực?

Trên Android, sử dụng adb: adb shell am start -W -a android.intent.action.VIEW -d “myapp://product/42”. Trên iOS — xcrun simctl openurl booted “myapp://product/42”. Cả hai nền tảng đều có bảng điều khiển kiểm tra Firebase Dynamic Links và Branch.

Tóm tắt

  • Deep Link — một URL mở một màn hình ứng dụng cụ thể, không phải trang chủ hay trang web
  • Ba loại — Tiêu chuẩn (chỉ với ứng dụng đã cài đặt), Hoãn lại (có chờ cài đặt), Ngữ cảnh (có tham số UTM)
  • Custom URL Scheme (myapp://) — phương pháp đơn giản, nhưng không có dự phòng khi thiếu ứng dụng
  • Universal Link và App Link — sự phát triển của deep link với xác minh tên miền và dự phòng trình duyệt
  • iOS xử lý deep link qua AppDelegate/SceneDelegate, Android — qua Intent Filter
  • Deferred Deep Link yêu cầu SDK trung gian (Branch, AppsFlyer) để lưu trữ ngữ cảnh trước khi cài đặt
  • Kiểm tra cả ba trạng thái (nguội, ấm, đang hoạt động) là bước bắt buộc trong thiết lập deep link

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm