ส่งพารามิเตอร์ติดตามผ่าน LIFF Permanent Link ให้รอดไปถึงปลายทาง
สรุปสั้น ๆ
ลิงก์ถาวรของ LIFF (liff.line.me/{liffId}) ส่ง path และ query ที่ต่อท้ายไปให้ endpoint ได้ แต่ค่าหายเมื่อโดน redirect ตอนล็อกอิน เมื่อถูก encode ซ้ำ หรือเมื่ออ่านผิดจังหวะ วิธีที่รอดที่สุดคือแนบโทเค็นสั้นตัวเดียวแล้วเก็บ UTM จริงไว้ฝั่งเซิร์ฟเวอร์
สมมติทีมหนึ่งตั้งลิงก์โฆษณาเป็น liff.line.me/{liffId}?utm_source=meta&utm_campaign=โปรสงกรานต์&ส่งฟรี ทดสอบบนมือถือตัวเองผ่านหมด พอปล่อยแอดจริง รายงานกลับมีแต่ utm_campaign=โปรสงกรานต์ ท้ายชื่อหายไป และมี session ที่ไม่มีพารามิเตอร์อะไรเลยราวหนึ่งในห้า
สองอาการนี้มีสาเหตุคนละอย่างและแก้ได้ทั้งคู่ บทความนี้ไล่ว่าพารามิเตอร์เดินทางผ่านลิงก์ถาวรยังไง หายตรงจุดไหน และโทเค็นแบบไหนทำให้ค่าจากโฆษณาไปถึงฐานข้อมูลครบ พฤติกรรมของ SDK อ้างจากเอกสาร LIFF ให้ตรวจซ้ำกับเวอร์ชันล่าสุดก่อนใช้
ลิงก์ถาวรประกอบด้วยอะไร ค่าเดินทางไปทางไหน
ลิงก์ถาวรมีรูปแบบ https://liff.line.me/{liffId} ตามเอกสาร ถ้าต่อ path, query และ fragment หลัง liffId ส่วนเหล่านั้นจะถูกนำไปต่อกับ Endpoint URL ที่ตั้งไว้ในคอนโซล LINE Developers ก่อนโหลดหน้า ทำให้ลิงก์เดียวกันใช้กับหลายแคมเปญได้โดยไม่ต้องสร้าง LIFF app ใหม่ทุกครั้ง
| ส่วนของลิงก์ | ตัวอย่าง (สมมติ) | ผลที่ตามมา |
|---|---|---|
| liffId | 1234567890-AbCdEfGh | ระบุว่าเปิด LIFF app ตัวไหน ไม่ถูกส่งต่อเป็นพารามิเตอร์ |
| path ต่อท้าย | /promo | ถูกต่อท้าย Endpoint URL ตรวจพฤติกรรมของเวอร์ชันปัจจุบันก่อนพึ่งพา |
| query string | ?c=k7p2m9 | ถูกส่งไปที่หน้าปลายทาง แต่ต้องอ่านให้ถูกจังหวะ |
| fragment | #offer | เสี่ยงหายตอน redirect และไม่ถูกส่งไปเซิร์ฟเวอร์ |
ห้าจุดที่พารามิเตอร์หายระหว่างทาง
- ล็อกอินกลางทาง: ผู้ใช้ในเบราว์เซอร์ปกติถูกส่งไปหน้าล็อกอินแล้ววนกลับ พารามิเตอร์ถูกห่อไว้ในค่าพิเศษที่ชื่อ
liff.state(ตรวจชื่อล่าสุดในเอกสาร) ถ้าโค้ดอ่านwindow.location.searchก่อนliff.init()จบ จะเจอค่าที่ห่อ ไม่ใช่ค่าจริง - Fragment หาย: ส่วนหลังเครื่องหมาย # ไม่ถูกส่งไปเซิร์ฟเวอร์ และอาจไม่รอดการ redirect อย่าใช้ฝังค่าติดตาม
- Encode ซ้ำหรือไม่ encode: ชื่อแคมเปญที่มี & หรือช่องว่างต้อง encode ครั้งเดียวตอนสร้างลิงก์ ไม่งั้นค่าถูกตัดที่ & ตัวแรก ซึ่งตรงกับอาการ “โปรสงกรานต์” ที่เหลือแค่ครึ่งเดียว วิธีสร้างลิงก์ที่ถูกอยู่ใน สร้าง UTM Tracking URL
- ตัวกลางที่แตะลิงก์: ตัวย่อลิงก์ ตัวติดตามคลิก หรือการตั้งค่าของแพลตฟอร์มแอดที่เขียนทับ query ตรวจโดยเปิดลิงก์จริงแล้วดู URL ปลายทางสุดท้าย
- ตัวแปรไดนามิกที่ว่าง: ตัวแปรของแพลตฟอร์มแอดที่ไม่มีค่าจะกลายเป็น
utm_content=ว่าง ๆ แล้วทับค่าที่ตั้งใจใส่ อาการเดียวกับที่เล่าใน UTM หายเมื่อเข้า LINE
ย่อเป็นโทเค็นสั้นแล้วเก็บค่าจริงฝั่งเซิร์ฟเวอร์
ผมเลือกให้ลิงก์พก “รหัสคลิก” ตัวเดียวแทน UTM ทั้งชุด เพราะ URL สั้นลง ไม่มีอักขระที่ต้อง encode และแก้ความหมายของ UTM ย้อนหลังได้โดยไม่ต้องแก้ลิงก์ที่ปล่อยไปแล้ว ขั้นตอนมีดังนี้
- สร้างระเบียนคลิกในฐานข้อมูลของคุณ เก็บรหัสสั้น 6-8 ตัวอักษร UTM ทั้งชุด แพลตฟอร์ม แอดที่ใช้ และเวลาสร้าง
- ต่อท้ายลิงก์ถาวรด้วย
?c=k7p2m9(ค่าสมมติ) เท่านั้น ไม่ใส่ UTM ซ้ำใน URL - หน้า LIFF อ่าน
cหลัง init เสร็จ แล้วส่งไปเซิร์ฟเวอร์พร้อม LINE userId - เซิร์ฟเวอร์ผูกระเบียนคลิกเข้ากับโปรไฟล์ LINE ตามแนวทางใน ผูก LINE User ID กับ UTM
- กำหนดวันหมดอายุของรหัสให้สั้นกว่าวงจรขายของคุณ และตัดสินใจล่วงหน้าว่ารหัสเดียวใช้ได้กี่ครั้ง
อ่านค่าให้ถูกลำดับในโค้ดหน้า LIFF
ลำดับที่ปลอดภัยคือเรียก liff.init() ให้จบก่อนแล้วค่อยอ่านพารามิเตอร์ ถ้าผู้ใช้อยู่ในเบราว์เซอร์และยังไม่ล็อกอิน ให้ล็อกอินตามปกติแล้วอ่านซ้ำหลังกลับมา (ดูวิธีที่ SDK คืนค่า query ในเอกสารเวอร์ชันที่ใช้) พออ่านได้ให้ส่งเข้าเซิร์ฟเวอร์ทันที ก่อนผู้ใช้กดอะไรอย่างอื่น
หลังเก็บแล้ว ใช้ history.replaceState ลบ c ออกจาก URL ที่แสดงในแถบที่อยู่ เพราะผู้ใช้บางคนคัดลอกลิงก์ส่งต่อให้เพื่อน ถ้ารหัสยังติดอยู่ ยอดของเพื่อนจะถูกนับเป็นของแอดที่ผู้ใช้คนแรกคลิก
ตารางทดสอบก่อนปล่อยแอด
| สถานการณ์ | สิ่งที่ต้องเห็น | ถ้าไม่ผ่านให้สงสัย |
|---|---|---|
| ล็อกอิน LINE อยู่แล้ว เปิดจากแชท | ได้ c ครบและส่งเข้าเซิร์ฟเวอร์ | โค้ดอ่านค่าก่อน init จบ |
| เบราว์เซอร์ปกติ ยังไม่ล็อกอิน | c ยังอยู่หลังกลับจากหน้าล็อกอิน | ค่ายังถูกห่อและไม่ถูกแกะ |
| ผู้ใช้ใหม่ที่ต้องกดอนุญาต scope ครั้งแรก | c ไม่หายหลังกดอนุญาต | มี redirect เพิ่มอีกหนึ่งรอบ |
| ลิงก์ผ่านตัวย่อหรือตัวติดตามคลิก | URL ปลายทางยังมี c | ตัวกลางตัด query |
| ใช้ UTM ตรง ๆ ที่ชื่อแคมเปญเป็นภาษาไทยมีช่องว่าง | ค่า decode กลับมาตรงต้นฉบับ | encode ซ้ำหรือไม่ encode |
ตัวเลขเดียวที่ควรดูหลังปล่อยแอด
ให้ดูสัดส่วน session จากโฆษณาที่มีรหัสใช้ได้ สมมติแพลตฟอร์มรายงาน 5,000 คลิก หน้า LIFF โหลดจริง 4,400 ครั้ง (คลิกกับการโหลดไม่เท่ากันเป็นเรื่องปกติ) และมี c ที่ตรงกับระเบียน 3,700 ครั้ง ได้ capture rate 84% ของ session
อีก 700 session ที่ไม่มีรหัส ให้สุ่มดู 20 รายการแล้วจัดกลุ่มสาเหตุ ถ้าส่วนใหญ่เป็นคนในเบราว์เซอร์ที่ล็อกอินกลางทาง ก็แก้ที่ลำดับโค้ด ถ้าเป็นลิงก์ที่ไม่ได้ใส่ c ก็แก้ที่คนสร้างลิงก์ การส่งต่อรหัสไปถึงแชทอ่านเพิ่มได้ใน ส่งต่อ Click ID เข้า LINE
สรุป
ถ้ามีลิงก์แคมเปญที่ต้องปล่อยสัปดาห์นี้ ให้ใช้รูปแบบรหัสสั้นกับลิงก์ใหม่ทั้งหมด ส่วนลิงก์เก่าที่ยังวิ่งอยู่ ทดสอบตามตารางอย่างน้อยหนึ่งลิงก์ต่อหนึ่งแพลตฟอร์มก่อนจะเชื่อตัวเลขในรายงาน
- พารามิเตอร์หายที่ล็อกอิน fragment encode ตัวกลาง และตัวแปรว่าง
- รหัสสั้นตัวเดียวพร้อมระเบียนฝั่งเซิร์ฟเวอร์ทนกว่า UTM ยาว ๆ ใน URL
คำถามที่พบบ่อย
ใส่พารามิเตอร์ไว้ใน Endpoint URL ของ LIFF แทนได้ไหม?
Endpoint URL เหมาะกับปลายทางหลักที่ไม่เปลี่ยน ไม่เหมาะกับค่าที่ต่างกันรายคลิก ถ้าคุณใส่ query ไว้ที่นั่นด้วย ให้ทดสอบว่าถูกรวมกับของที่ต่อท้ายลิงก์ถาวรหรือชนกัน อย่าเดาจากเอกสารอย่างเดียว
ควรใส่ UTM ทั้งชุดใน URL หรือใช้รหัสสั้นดีกว่า?
ถ้าสร้างลิงก์ปีละไม่กี่เส้นและทดสอบผ่านครบ ใส่ UTM ตรง ๆ ได้ แต่ถ้าสร้างลิงก์จำนวนมากหรือหลายคนช่วยกันทำ รหัสสั้นปลอดภัยกว่า เพราะสะกดผิดและ encode พลาดได้น้อยกว่า และแก้ความหมายย้อนหลังได้
รหัสคลิกควรหมดอายุเมื่อไหร่?
ตั้งให้ครอบคลุมช่วงตัดสินใจซื้อจริงของสินค้าคุณ เช่น สินค้าราคาหลักร้อยอาจเลือกไม่กี่วัน สินค้าราคาสูงเลือกนานกว่านั้น ตัวเลขนี้คุณกำหนดเองจากข้อมูลการปิดการขาย ไม่ใช่ค่าที่ LINE บังคับ
ผู้ใช้เปิดลิงก์เดิมซ้ำหลายรอบต้องทำยังไง?
บันทึกทุกการเปิดเป็น event แต่ผูกรหัสคลิกกับโปรไฟล์ครั้งเดียวตามกฎที่คุณเลือก เช่น คนแรกที่ใช้รหัสนี้ แล้วเก็บ id ระเบียนคลิกไว้ในทุก event เพื่อไล่กลับมาได้
รหัสคลิกถือเป็นข้อมูลส่วนบุคคลไหม?
ตัวรหัสเองชี้ไปที่ข้อมูลแคมเปญ แต่พอผูกกับ LINE userId แล้ว ข้อมูลทั้งชุดระบุตัวบุคคลได้ จึงต้องแจ้งวัตถุประสงค์และเก็บตามนโยบายความเป็นส่วนตัวของคุณ ควรปรึกษาผู้เชี่ยวชาญด้านกฎหมายก่อนกำหนดนโยบายจริง
ลองตรวจด้วยตัวเอง
LIFF Campaign Parameter Lab
ทดสอบว่า UTM และพารามิเตอร์แคมเปญของคุณรอดผ่าน liff.state เข้าแอปหรือหายกลางทาง
ทดสอบ LIFF URLใช้ฟรี ไม่ต้องสมัคร ไม่เก็บข้อมูลที่คุณกรอก
อ่านต่อแบบเจาะลึก
รู้ว่าโฆษณาเข้า LINE ทำยอดขายจริงแค่ไหน
linli ติดตามลูกค้าตั้งแต่คลิกโฆษณา กดเพิ่มเพื่อน ทักแชท จนปิดการขาย พร้อมส่ง Conversion กลับแพลตฟอร์มโฆษณา เริ่มฟรี 14 วัน
ทดลองใช้ฟรี 14 วัน