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 (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 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 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 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 Link | Yêu cầu cài đặt | Chờ cài đặt | Ngữ cảnh |
|---|---|---|---|
| Tiêu chuẩn | Có | Không | Chỉ trong URL |
| Hoãn lại | Không | Có | Lưu trữ máy chủ |
| Ngữ cảnh | Bấ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.
// 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.
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
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à 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ý.
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.
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.
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
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.
Đọc thêm