ดีพลิงก์ (Deep Link) คือ URL ที่นำผู้ใช้ไปยังหน้าจอหรือเนื้อหาเฉพาะภายในแอปพลิเคชันมือถือ โดยข้ามหน้าจอหลัก แตกต่างจากลิงก์ทั่วไปที่ไปยังเว็บไซต์ ดีพลิงก์จะเปิดใช้งานแอปและเปิดเนื้อหาเป้าหมายทันที ตามข้อมูลจาก Android Developers ดีพลิงก์ที่กำหนดค่าอย่างถูกต้องจะเพิ่มอัตราการแปลงเป็นการกระทำเป้าหมายขึ้น 30–50% โดยลดจำนวนขั้นตอนในการเข้าถึงเนื้อหา
ประเด็นสำคัญ
ดีพลิงก์ (Deep Link) คือ URI ที่เมื่อคลิกแล้วจะไม่เปิดหน้าเว็บ แต่จะเปิดหน้าจอเฉพาะภายในแอปพลิเคชันมือถือ เทคโนโลยีนี้แก้ปัญหาพื้นฐานของแพลตฟอร์มมือถือ: เบราว์เซอร์ไม่สามารถเปิดหน้าจอแอปได้โดยตรง และดีพลิงก์สร้างสะพานเชื่อมระหว่างเว็บและโค้ดเนทีฟ หากไม่มีดีพลิงก์ ผู้ใช้จะไปที่หน้าจอหลักเสมอและต้องนำทางไปยังเนื้อหาที่ต้องการด้วยตนเอง
สถาปัตยกรรมของดีพลิงก์ประกอบด้วย สองส่วน: scheme กำหนดว่าแอปใดควรจัดการลิงก์ และ path ชี้ไปยังทรัพยากรเฉพาะภายในแอป — สินค้า บทความ โปรไฟล์ผู้ใช้ หรือส่วนการตั้งค่า พารามิเตอร์คำค้นหา (?source=push&campaign=summer) ส่งบริบทเพิ่มเติมสำหรับการวิเคราะห์ การปรับเปลี่ยนเฉพาะบุคคล และการระบุที่มาของแคมเปญ
สิ่งสำคัญคือต้องแยกความแตกต่างระหว่าง ดีพลิงก์ และลิงก์ทั่วไป ลิงก์ทั่วไป (https://example.com/product/42) เปิดในเบราว์เซอร์และนำไปยังเว็บเวอร์ชันของหน้า ดีพลิงก์ (myapp://product/42) หากติดตั้งแอปแล้ว จะเปิดหน้าจอเนทีฟที่มีเนื้อหาเดียวกัน แต่หากไม่ได้ติดตั้งแอป จะแสดงข้อผิดพลาด Universal Link (iOS) และ App Link (Android) ถูกสร้างขึ้นมาเพื่อแก้ปัญหาการสำรอง (fallback) ที่ราบรื่น
งานที่แตกต่างกันต้องใช้ดีพลิงก์ประเภทต่างกัน ลิงก์บางประเภททำงานเฉพาะกับแอปที่ติดตั้งแล้ว บางประเภทสามารถรอการติดตั้งได้ และบางประเภทส่งบริบทเชิงวิเคราะห์ การเลือกประเภทขึ้นอยู่กับกรณีการใช้งาน: แคมเปญโฆษณา การแจ้งเตือนแบบพุช การแชร์เนื้อหา หรือจดหมายข่าวทางอีเมล
ดีพลิงก์มาตรฐาน เป็นประเภทพื้นฐานที่ทำงานเฉพาะเมื่อติดตั้งแอปบนอุปกรณ์แล้วเท่านั้น ผู้ใช้คลิกลิงก์ myapp://product/42 ระบบจะตรวจจับ scheme ที่ลงทะเบียนไว้และเปิดแอปบนหน้าจอที่ต้องการ หากไม่ได้ติดตั้งแอป เบราว์เซอร์จะแสดงข้อผิดพลาด “ไม่พบหน้า” หรือไม่ทำอะไรเลย ประเภทนี้เหมาะสำหรับการนำทางภายในแอปที่ติดตั้งแล้ว
การตั้งค่าดีพลิงก์ มาตรฐาน นั้นง่าย: เพียงลงทะเบียน URI scheme ใน manifest (Android) หรือ Info.plist (iOS) ไม่จำเป็นต้องมีการตรวจสอบเซิร์ฟเวอร์หรือใบรับรอง SSL แต่อย่างไรก็ตาม เนื่องจากการขาด fallback ประเภทนี้จึงถือว่าล้าสมัยสำหรับแคมเปญการตลาด — การสูญเสียทราฟฟิกจากผู้ใช้ที่ไม่มีแอปอาจสูงถึง 60%
Deferred Deep Link แก้ปัญหาหลักของดีพลิงก์ทั่วไป: มันทำงานแม้ว่าจะไม่ได้ติดตั้งแอปก็ตาม ผู้ใช้คลิกลิงก์ → เห็นหน้า (แลนดิ้งเพจหรือ App Store/Google Play) → ติดตั้งแอป → เมื่อเปิดครั้งแรก แอปจะได้รับบริบทของลิงก์ต้นฉบับและเปิดหน้าจอที่ต้องการ เทคโนโลยีนี้ต้องใช้ SDK ตัวกลาง (AppsFlyer, Branch, Adjust) ที่เก็บบริบทบนเซิร์ฟเวอร์จนกว่าจะเปิดครั้งแรก
Branch เป็นหนึ่งในแพลตฟอร์มยอดนิยมที่สุดสำหรับ deferred deep link โดยให้ลิงก์เดียวที่ทำงานบนทุกแพลตฟอร์ม: ตรวจจับระบบปฏิบัติการของผู้ใช้ เปลี่ยนเส้นทางไปยังร้านค้าแอป และหลังจากติดตั้งแล้วจะส่งบริบท (โปรโมชันโค้ด ID สินค้า แหล่งที่มาของแคมเปญ) ตามข้อมูลของ Branch (2024) deferred deep link เพิ่มอัตราการแปลงของแคมเปญโฆษณาขึ้น 40–70%
Contextual Deep Link คือดีพลิงก์ทั่วไปหรือแบบรอการติดตั้งที่เสริมด้วยพารามิเตอร์บริบท: แหล่งที่มาของทราฟฟิก แคมเปญ โปรโมชันโค้ด ตัวอ้างอิง ID พาร์ทเนอร์ พารามิเตอร์จะถูกส่งใน URL และประมวลผลโดยแอปเพื่อการปรับเปลี่ยนเฉพาะบุคคล: แสดงโบนัสต้อนรับ เปิดสินค้าส่วนลด บันทึกการวิเคราะห์การติดตั้ง
แท็ก UTM (utm_source, utm_medium, utm_campaign) เป็นวิธีมาตรฐานในการส่งบริบท ในมือถือ ดีพลิงก์เชิงบริบทมีความสำคัญสำหรับการระบุที่มา: หากไม่มี เจ้าของแอปจะไม่รู้ว่าช่องทางใดนำผู้ใช้มา — ทราฟฟิกอินทรีย์ โฆษณา Facebook จดหมายข่าวทางอีเมล หรือ QR โค้ด การระบุที่มาที่มีคุณภาพต้องมีการรวมเข้ากับ MMP (Mobile Measurement Partner)
| ประเภทดีพลิงก์ | ต้องการการติดตั้ง | รอการติดตั้ง | บริบท |
|---|---|---|---|
| มาตรฐาน | ใช่ | ไม่ | เฉพาะใน URL |
| รอการติดตั้ง | ไม่ | ใช่ | การจัดเก็บเซิร์ฟเวอร์ |
| เชิงบริบท | ใดก็ได้ | ใดก็ได้ | UTM + พารามิเตอร์ |
iOS รองรับดีพลิงก์ผ่านสองกลไก: Custom URL Scheme แบบเก่าและ Universal Link สมัยใหม่ (iOS 9+) Custom URL Scheme ทำงานโดยการลงทะเบียน scheme ที่กำหนดเองใน Info.plist แอปลงทะเบียน myapp:// และ iOS จะเปิดแอปเมื่อคลิกลิงก์ดังกล่าว ปัญหา: หากไม่มีแอปใดลงทะเบียน scheme นี้ เบราว์เซอร์จะแสดงข้อผิดพลาด
การจัดการ ดีพลิงก์บน iOS เกิดขึ้นผ่านเมธอด AppDelegate application(_:open:options:) หรือ SceneDelegate scene(_:openURLContexts:) นักพัฒนาจะแยก URL วิเคราะห์ path และพารามิเตอร์ จากนั้นนำทางไปยังหน้าจอที่เหมาะสม หากใช้ SwiftUI การจัดการจะทำผ่าน OpenURLAction หรือ onChange(of: openURL) สิ่งสำคัญคือต้องจัดการสถานะของแอปอย่างถูกต้อง: แอปอาจยังไม่ได้เปิด อยู่ในพื้นหลัง หรือกำลังทำงานอยู่
ความปลอดภัย บน iOS นั้นเข้มงวด: แอปใด ๆ ก็สามารถดักจับ Custom URL Scheme ได้โดยการลงทะเบียน scheme เดียวกัน นี่คือช่องโหว่ที่อาจเกิดขึ้น (การแย่งชิง URL scheme) ดังนั้น Apple จึงแนะนำ Universal Link เป็นทางเลือกที่ปลอดภัยกว่า: เฉพาะเจ้าของโดเมนที่ได้รับการยืนยันเท่านั้นที่สามารถเชื่อมโยงลิงก์กับแอปได้ เรียนรู้เพิ่มเติมเกี่ยวกับ Universal Link ในบทความ Universal Link
Android implements deep links through Intent Filters in AndroidManifest.xml. แอปกำหนด Activity ที่จัดการ scheme เฉพาะ (myapp://) หรือโฮสต์และ path เฉพาะ เมื่อผู้ใช้คลิกดีพลิงก์ Android จะค้นหา Activity ที่มี Intent Filter ที่ตรงกันและเปิดขึ้นมา หากมีหลาย Activity ที่ตรงกัน ระบบจะแสดงไดอะล็อกเลือกแอป
// AndroidManifest.xml - Intent Filter สำหรับดีพลิงก์
<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>
การจัดการ ดีพลิงก์บน Android ทำในเมธอด Activity.onCreate() หรือ onNewIntent() นักพัฒนาได้รับ Intent แยก URI และเริ่มการนำทาง สำหรับ Jetpack Navigation คอมโพเนนต์ Navigation Deep Link อนุญาตให้อธิบายดีพลิงก์แบบประกาศในกราฟการนำทาง Android App Link (Android 6.0+) เป็นวิวัฒนาการของดีพลิงก์ด้วยการยืนยันผ่าน Digital Asset Links ซึ่งช่วยขจัดไดอะล็อกเลือกแอป
สิ่งสำคัญคือต้องพิจารณาการเปลี่ยนแปลง Android 12+: ตั้งแต่ API 31 ระบบต้องการการประกาศ exported=true อย่างชัดเจนสำหรับ Activity ที่จัดการดีพลิงก์และตรวจสอบความถูกต้องของ Intent Filter Google Play Store ตรวจสอบการยืนยัน App Link เมื่อเผยแพร่ หากไม่มีการยืนยัน Google อาจปฏิเสธการอัปเดตหากดีพลิงก์นำไปสู่หน้าที่ไม่มีอยู่ในเว็บไซต์
การตั้งค่า ดีพลิงก์รวมถึงหลายขั้นตอนที่เหมือนกันสำหรับทั้งสองแพลตฟอร์ม ขั้นตอนแรกคือการกำหนด scheme และโครงสร้าง URL แนะนำให้ใช้ scheme https (แทนที่จะเป็นแบบกำหนดเอง) เพื่อความเข้ากันได้กับ Universal Link และ App Link โครงสร้าง URL ควรสะท้อนถึงโครงสร้างเว็บไซต์: /product/42, /profile/john, /settings/notifications ซึ่งช่วยลดความซับซ้อนในการบำรุงรักษาและการจัดทำดัชนีเนื้อหาโดยเครื่องมือค้นหา
ขั้นตอนที่สอง คือการจัดการดีพลิงก์ในโค้ดแอป สำหรับ Android แนะนำให้ใช้ Jetpack Navigation พร้อมดีพลิงก์แบบประกาศใน nav_graph สำหรับ iOS — SwiftUI NavigationStack พร้อมการจัดการ OpenURLAction สิ่งสำคัญคือต้องจัดการสามสถานะของแอป: cold start (แอปยังไม่ได้เปิด), warm start (อยู่ในพื้นหลัง) และ active (บนหน้าจอ) แต่ละสถานะต้องใช้ตรรกะการนำทางที่แตกต่างกัน
การทดสอบ ดีพลิงก์เป็นงานที่แยกต่างหาก Android Studio มีเครื่องมือ App Links Assistant สำหรับตรวจสอบ Intent Filter บน iOS การทดสอบทำผ่าน Xcode โดยการส่ง URL ผ่านอาร์กิวเมนต์ scheme การเริ่มต้น แนะนำให้ตั้งค่าการตรวจสอบ CI: การนำทางดีพลิงก์อัตโนมัติและการยืนยันว่าหน้าจอที่คาดหวังเปิดขึ้น สำหรับ deferred deep link การทดสอบรวมถึงวงจรเต็มของ “การติดตั้ง → การเปิดครั้งแรก → บริบท” หากไม่มีการทดสอบ ดีพลิงก์มักจะเสียเมื่ออัปเดตการนำทางในแอป
คำถามที่พบบ่อย
ลิงก์ทั่วไป (https://site.com/page) เปิดในเบราว์เซอร์ ดีพลิงก์ (myapp://page หรือ https://site.com/page พร้อมการยืนยัน) เปิดหน้าจอภายในแอปมือถือ ดีพลิงก์ยังสามารถส่งบริบท: โปรโมชันโค้ด แหล่งที่มาของทราฟฟิก ID ผู้แนะนำ
URI scheme คือคำนำหน้า URL ที่กำหนดว่าแอปใดควรจัดการลิงก์ (ตัวอย่าง: myapp://, vk://, tg://) ระบบใช้ scheme สำหรับการกำหนดเส้นทาง: ค้นหาแอปที่ลงทะเบียน scheme นี้และส่ง URL ให้แอปนั้นดำเนินการ
ผู้ใช้ คลิกลิงก์ → บริการ (Branch, AppsFlyer) จดจำบริบท → เปลี่ยนเส้นทางไปยัง App Store/Google Play → หลังจากติดตั้งและเปิดครั้งแรก SDK ส่งบริบทที่บันทึกไว้ไปยังแอป → แอปเปิดหน้าจอที่ต้องการ ราวกับว่าผู้ใช้มีแอปติดตั้งอยู่แล้ว
ดีพลิงก์ทั่วไป — ไม่ได้ Deferred deep link — ได้ ผ่านหน้าเว็บตัวกลางที่เปลี่ยนเส้นทางไปยังร้านค้าแอปและบันทึกบริบท Universal Link และ App Link จะเปิดเว็บไซต์เป็น fallback หากไม่ได้ติดตั้งแอป
บน Android ใช้ adb: adb shell am start -W -a android.intent.action.VIEW -d “myapp://product/42” บน iOS — xcrun simctl openurl booted “myapp://product/42” คอนโซลทดสอบ Firebase Dynamic Links และ Branch พร้อมใช้งานสำหรับทั้งสองแพลตฟอร์ม
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม