งบแอดวันละ 5 พัน แต่ dataLayer ไม่มีข้อมูล LINE ให้ดึงเลยสักตัว

สรุปสั้น ๆ
dataLayer สำหรับ LINE conversion ต้องมีอย่างน้อยสามกลุ่มข้อมูลคือ Event ของการกดปุ่ม/ลิงก์ LINE, ตัวระบุแหล่งที่มาอย่าง UTM หรือ Click ID ที่เก็บไว้ตั้งแต่ Session แรก และ Timestamp ที่ผูกกับ Session เดียวกัน ถ้าขาดอย่างใดอย่างหนึ่ง GTM จะมี Trigger แต่ไม่มีข้อมูลที่มีความหมายให้ส่งต่อ
ลองนึกภาพเจ้าของร้านคนหนึ่งที่ยิงแอด Facebook เข้าเว็บวันละราว 5,000 บาท มีคนกดปุ่ม 'แชทกับเรา' เข้า LINE เฉลี่ยวันละ 20-30 ครั้ง ดูเผิน ๆ เหมือนทุกอย่างเดินหน้าไปด้วยดี แต่พอเปิด Google Tag Manager แล้วกด Preview เพื่อเช็คว่า Event อะไรถูกยิงบ้าง กลับพบว่า dataLayer ว่างเปล่า ไม่มีร่องรอยของการกดปุ่ม LINE เก็บไว้เลยสักครั้ง
หลายคนสรุปผิดตรงนี้ว่า 'GTM คงติดตั้งไม่สมบูรณ์' แล้วไปโฟกัสผิดจุด ทั้งที่ GTM มันสร้าง dataLayer เปล่า ๆ ให้อัตโนมัติอยู่แล้วตั้งแต่แปะโค้ด สิ่งที่ขาดไปจริง ๆ ไม่ใช่ตัว dataLayer แต่คือ 'ใครสักคน' ที่จะ push ข้อมูลที่มีความหมายเข้าไปในนั้นตอนลูกค้ากดปุ่ม
บทความนี้จะพาดูว่า dataLayer สำหรับ LINE conversion โดยเฉพาะควรเก็บอะไรบ้าง ต่างจาก dataLayer ทั่วไปที่ใช้กับ Ecommerce ตรงไหน และจะออกแบบให้ครอบคลุม Journey ตั้งแต่ก่อนเข้า LINE จนถึงตอนที่ทีมขายเริ่มคุยได้อย่างไร
ทำไมเสียค่าแอดทุกวัน แต่เปิด dataLayer แล้วไม่เจอข้อมูล LINE
สาเหตุที่พบบ่อยที่สุดคือปุ่ม LINE บนเว็บส่วนใหญ่เป็นแค่ลิงก์ธรรมดา เช่น แชทกับเรา ที่ทำงานได้ดีในแง่พาไปเปิดแอป LINE แต่ไม่มีบรรทัดโค้ดไหนสั่ง push ข้อมูลเข้า dataLayer ก่อนที่ผู้ใช้จะกระโดดออกจากหน้าเว็บ ทำให้ต่อให้ GTM ตั้ง Trigger ดักคลิกไว้ ก็ดักได้แค่ 'มีคนคลิก' โดยไม่รู้ว่าคลิกจากปุ่มไหน หน้าไหน หรือมาจากแคมเปญอะไร
อีกสาเหตุที่เจอบ่อยไม่แพ้กันคือทีมพัฒนาเว็บกับทีมการตลาดไม่เคยคุยกันตรง ๆ ว่าต้องการเก็บอะไร นักการตลาดคิดว่าแค่ติด GTM ก็ 'วัดได้เอง' ส่วนนักพัฒนาก็ไม่รู้ว่าต้อง push Event อะไรเข้า dataLayer เพราะไม่มีใครส่ง Spec ให้ ผลคือทั้งสองฝ่ายเข้าใจว่าอีกฝ่ายทำแล้ว แต่ไม่มีใครทำจริง
และบางเว็บที่สร้างด้วย SPA (Single Page Application) ยังมีปัญหาซ้อนอีกชั้น คือปุ่ม LINE ถูก render หลังหน้าโหลดเสร็จผ่าน JavaScript ทำให้ Trigger แบบ Click ธรรมดาของ GTM จับไม่ทันด้วยซ้ำ ต้องตั้งแบบ Trigger รอ DOM element เกิดขึ้นก่อนถึงจะทำงาน ซึ่งเป็นรายละเอียดที่คนตั้ง GTM มือใหม่มักมองข้าม
dataLayer คืออะไรกันแน่ และ GTM ใช้มันทำอะไร
พูดให้ง่ายที่สุด dataLayer คือ JavaScript array ที่อยู่บนหน้าเว็บชั่วคราว ทำหน้าที่เป็น 'กระดานข้อความ' ระหว่างเว็บไซต์กับ GTM เวลามีเหตุการณ์อะไรเกิดขึ้น เช่น คนกดปุ่ม LINE เว็บจะ push ข้อมูลก้อนหนึ่งเข้าไปใน array นี้ แล้ว GTM จะอ่านค่านั้นผ่านสิ่งที่เรียกว่า Data Layer Variable เพื่อเอาไปใช้ในเงื่อนไข Trigger หรือส่งต่อเป็นค่าใน Tag
ข้อควรเข้าใจคือ dataLayer ไม่ใช่ที่เก็บข้อมูลถาวร มันอยู่แค่ในหน่วยความจำของ Browser ระหว่างที่หน้านั้นเปิดอยู่ พอผู้ใช้กดรีเฟรชหรือเปลี่ยนหน้า ค่าที่ push ไว้ก่อนหน้าจะหายไป ต้อง push ใหม่ทุกครั้งที่ต้องการ ซึ่งเป็นเหตุผลว่าทำไมข้อมูลอย่าง UTM ถึงต้องถูกเก็บแยกไว้ในที่ที่อยู่ข้ามหน้าได้ เช่น Cookie หรือ Session Storage แล้วค่อยดึงกลับมา push ซ้ำตอนเกิด Event สำคัญ
อีกจุดที่สำคัญคือลำดับเวลา โค้ด push dataLayer ต้องทำงาน 'ก่อน' ที่ GTM จะพยายามอ่านค่านั้น ถ้าปุ่ม LINE ถูกกดแล้วหน้าพาผู้ใช้ออกจากเว็บทันที (เช่นกรณี LINE deep link ที่เปลี่ยนหน้าเร็วมาก) การ push กับการยิง Tag ต้องเกิดขึ้นในเสี้ยววินาทีเดียวกัน ไม่งั้น Event จะถูกตัดตอนก่อนที่ GTM จะทันส่งค่าออกไป
Event อะไรบ้างที่ควร push ก่อนลูกค้าออกจากเว็บไปหา LINE
ไม่ใช่ทุก Event ต้องเก็บหมด แต่ควรเลือกเก็บ Event ที่สะท้อนแต่ละจุดของ Journey จริง เพื่อให้ภายหลังดูออกว่าช่องว่างระหว่างคลิกกับสิ่งที่เกิดขึ้นจริงใน LINEอยู่ตรงไหน
- line_click — เมื่อกดปุ่มหรือลิงก์ที่พาไปเปิด LINE ควรมีค่าตำแหน่งปุ่ม (เช่น header, floating, popup) ติดไปด้วย เพราะปุ่มแต่ละตำแหน่งมักให้อัตราเพิ่มเพื่อนต่างกัน
- page_engaged — สัญญาณว่าผู้ใช้อ่านเนื้อหาจริงก่อนกดปุ่ม เช่น เลื่อนถึงจุดหนึ่งของหน้า ช่วยแยกคนตั้งใจอ่านออกจากคนกดผ่าน ๆ
- lead_form_submit — ถ้ามีฟอร์มก่อนพาไป LINE เช่น กรอกเบอร์ก่อนรับลิงก์ ต้อง push ตอนกดส่งฟอร์มสำเร็จ ไม่ใช่ตอนกดปุ่มส่งเฉย ๆ ที่อาจ error
- phone_click — ถ้าธุรกิจมีทั้งปุ่มโทรและปุ่ม LINE คู่กัน ควรเก็บแยก เพื่อดูภายหลังว่าลูกค้าเลือกช่องทางไหนมากกว่าในแต่ละแคมเปญ
- utm_captured — ไม่ใช่ Event จากการกด แต่เป็นค่าที่ควร push ตั้งแต่ผู้ใช้เข้าเว็บครั้งแรก แล้วแนบไปกับทุก Event ถัดไปในเซสชันเดียวกัน
จะ push จาก Client-side หรือดึงจาก Server-side ต่างกันตรงไหน
คำถามนี้เจอบ่อยมากเวลาคุยเรื่อง dataLayer เพราะบางทีมอยากทำให้ 'แน่นกว่า' โดยดึงข้อมูลจากฝั่ง Server แทนที่จะพึ่ง JavaScript บนเบราว์เซอร์อย่างเดียว ซึ่งแต่ละแบบมีข้อดีข้อจำกัดต่างกันตามตารางนี้:
| วิธีเก็บ | ข้อดี | ข้อจำกัดที่ต้องรู้ |
|---|---|---|
| Client-side (JS push บนหน้าเว็บ) | ติดตั้งเร็ว เห็นผลใน GTM Preview ได้ทันที ไม่ต้องพึ่งทีม Backend | ขึ้นกับว่า Browser โหลด JS สำเร็จหรือไม่ และอาจถูก Ad blocker บางตัวรบกวนบางส่วน |
| Server-side (ส่งจากระบบหลังบ้าน/Webhook) | ไม่ขึ้นกับสถานะ JS ฝั่ง Client มากเท่า และคุมข้อมูลได้เป็นระบบกว่า | ต้องมีนักพัฒนาผูก Event กับระบบหลังบ้านจริง และต้องดูแล Credential/Endpoint เพิ่ม |
| ผสมสองแบบ | กันข้อมูลขาดจากทั้งสองทาง เทียบกันได้เมื่อฝั่งใดฝั่งหนึ่งพลาด | ซับซ้อนกว่า ต้องมี Event ID เดียวกันทั้งสองฝั่งเพื่อกันนับซ้ำตอนส่งต่อ |
ตัวอย่างโครงสร้างข้อมูลที่ควรอยู่ใน Event line_click
สมมติร้านหนึ่งตั้งชื่อ Event ว่า line_click เวลามีคนกดปุ่ม สิ่งที่ควรแนบไปด้วยอย่างน้อยมีสี่ส่วน คือ ปุ่มไหนถูกกด (button_location), มาจากหน้าไหน (page_path), มาจากแคมเปญไหน (utm_source/utm_campaign ที่ดึงมาจากค่าที่เก็บไว้ตอนเข้าเว็บ) และเวลาไหน (timestamp ที่ตรง Time Zone ของธุรกิจ)
ตัวอย่างข้อมูลสมมติเพื่อให้เห็นภาพ: ลูกค้าคนหนึ่งคลิกจากโฆษณา Facebook แคมเปญ 'promo-สิงหาคม' เข้าหน้าสินค้า A แล้วกดปุ่ม LINE ที่ลอยมุมล่างขวาเวลา 14.32 น. ข้อมูลชุดนี้ถ้าถูก push ครบ จะทำให้ภายหลังรู้ได้ว่าแคมเปญไหนพาคนมาถึงจุดกดปุ่มจริง ไม่ใช่แค่รู้ว่า 'วันนี้มีคนกดปุ่ม LINE 25 ครั้ง' แบบไม่มีที่มา
จุดที่มักถูกมองข้ามคือค่า utm ต้องถูก 'จำ' ไว้ตลอด Session ไม่ใช่แค่ตอนหน้าแรกที่เข้ามา เพราะลูกค้าจำนวนมากไม่ได้กดปุ่ม LINE จากหน้า Landing Page โดยตรง แต่เดินดูสินค้าอีก 2-3 หน้าก่อน ถ้าไม่มีการเก็บ utm ไว้ข้ามหน้า พอถึงหน้าที่กดปุ่มจริง ค่า utm อาจกลายเป็นค่าว่างไปแล้ว
ข้อผิดพลาดที่พบบ่อยจนทำให้ dataLayer ว่างหรือข้อมูลเพี้ยน
- push dataLayer หลังโค้ด GTM โหลดเสร็จไปแล้ว ทำให้ Trigger บางตัวพลาด Event รอบแรกไปเลย
- ตั้งชื่อ Event ไม่สม่ำเสมอ เช่น หน้าโปรโมชันใช้ 'lineClick' แต่หน้าสินค้าใช้ 'line_click' ทำให้ GTM มองเป็นคนละ Event
- ไม่เคลียร์ค่าจาก Event ก่อนหน้าในเว็บแบบ SPA ทำให้ Event ใหม่พ่วงค่าเก่าที่ไม่เกี่ยวข้องติดมาด้วย
- ลืมผูก UTM ตั้งแต่ Session แรกที่เข้าเว็บ ทำให้พอถึงจุดกดปุ่มจริง ข้อมูลต้นทางหายไปแล้ว
- ไม่เคยทดสอบบนมือถือจริงหรือในโหมด Incognito ทำให้ไม่รู้ว่าพฤติกรรมจริงต่างจากที่ทดสอบบนคอมทำงาน
ทดสอบยังไงก่อนจะเชื่อว่า dataLayer ใช้งานได้จริง
- เปิด GTM Preview แล้วเข้าเว็บผ่านลิงก์ที่มี UTM จำลองแคมเปญจริง เพื่อดูว่าค่าถูกเก็บตั้งแต่ต้นหรือไม่
- กดปุ่ม LINE บนมือถือจริง ไม่ใช่แค่จำลองบนคอม เพราะพฤติกรรม deep link ของ LINE บนมือถือมักต่างจากบนเดสก์ท็อป
- เช็คใน Tag Assistant ว่า Event line_click ขึ้นพร้อมค่าที่ถูกต้องครบทุกฟิลด์ ไม่ใช่แค่ 'มี Event เกิดขึ้น'
- ลองซ้ำในโหมด Incognito และเบราว์เซอร์ที่ต่างกัน เพื่อดูว่าผลลัพธ์เหมือนกันไหมเมื่อไม่มีประวัติเก่าค้างอยู่
- เดินเว็บ 2-3 หน้าก่อนกดปุ่ม เพื่อยืนยันว่าค่า UTM ยังติดไปกับ Event ตอนสุดท้าย ไม่หายระหว่างทาง
มี dataLayer พร้อมแล้ว ขั้นต่อไปคือส่งต่อยังไง
เมื่อ dataLayer เก็บข้อมูลได้ครบและผ่านการทดสอบแล้ว ขั้นถัดไปคือตั้ง Tag ใน GTM ให้อ่านค่าจาก Variable แล้วส่งต่อไปยังปลายทางที่ต้องการ ไม่ว่าจะเป็น GA4, แพลตฟอร์มโฆษณา หรือระบบที่ใช้ต่อ Journey จากเว็บเข้า LINE จนถึงยอดขายอย่าง linli ซึ่งการส่งข้อมูลนี้ต้องดูสถานะการเชื่อมต่อแต่ละปลายทางเป็นราย ๆ ไป เพราะบางปลายทางต้องตั้ง Credential เพิ่มก่อนใช้งานได้จริง
หากต้องการวางโครงให้แข็งแรงกว่า Client-side อย่างเดียว ควรอ่านต่อเรื่องการตั้ง GTM แบบ server-side สำหรับ LINEซึ่งช่วยลดความเสี่ยงจาก Ad blocker และรองรับหลายแคมเปญพร้อมกันได้เป็นระบบมากขึ้น รวมถึงศึกษาแนวทางการส่งข้อมูลแบบ server-to-serverเพิ่มเติมเมื่อธุรกิจโตขึ้นและต้องการความแม่นยำของข้อมูลมากกว่านี้
สรุป
dataLayer ที่ว่างเปล่าไม่ได้แปลว่า GTM เสีย มันมักแปลว่ายังไม่มีใคร push ข้อมูลที่มีความหมายเข้าไปตอนเกิดเหตุการณ์สำคัญ การแก้ปัญหานี้ไม่ใช่การติดโค้ดเพิ่ม แต่คือการตกลงกันให้ชัดระหว่างทีมการตลาดกับทีมพัฒนาว่า Event ไหนสำคัญ ต้องเก็บค่าอะไร และต้อง push ตอนไหน
เมื่อ dataLayer เริ่มมีข้อมูลที่เชื่อถือได้ ขั้นต่อไปคือการตั้ง Tag ให้ดึงค่าเหล่านี้ไปใช้งานจริง ไม่ว่าจะส่งไป GA4 หรือแพลตฟอร์มโฆษณา แต่ทั้งหมดนี้เริ่มต้นจากจุดเดียวคือมีข้อมูลดิบให้ดึงเสียก่อน
- dataLayer ว่างเปล่า มักเกิดจากไม่มีใคร push ข้อมูล ไม่ใช่ GTM ผิดพลาด
- ต้องเก็บอย่างน้อย Event การกดปุ่ม, UTM ต้นทาง และ Timestamp ที่ผูกกับ Session เดียวกัน
- ทดสอบบนมือถือจริงและในโหมด Incognito ก่อนเชื่อว่าใช้งานได้จริง
- เมื่อพร้อมแล้วค่อยต่อยอดไปสู่การส่งต่อข้อมูลแบบ server-side เพื่อความแม่นยำมากขึ้น
คำถามที่พบบ่อย
dataLayer กับ Google Tag Manager คือสิ่งเดียวกันไหม
ไม่ใช่สิ่งเดียวกัน dataLayer คือกระดานข้อมูลชั่วคราวบนหน้าเว็บ ส่วน GTM คือเครื่องมือที่มาอ่านค่าจาก dataLayer แล้วนำไปใช้สร้าง Tag และส่งต่อ ถ้าไม่มีข้อมูลใน dataLayer เลย GTM ก็ไม่มีอะไรให้อ่าน ต่อให้ติดตั้งโค้ด GTM ถูกต้องแล้วก็ตาม
ต้องมีความรู้เขียนโค้ดแค่ไหนถึงจะ push dataLayer เองได้
ต้องเข้าใจ JavaScript พื้นฐานพอสมควร โดยเฉพาะเรื่องการเขียนอ็อบเจ็กต์และการเรียกใช้ก่อน-หลัง Event ถ้าไม่มั่นใจแนะนำให้ทำงานร่วมกับนักพัฒนาเว็บ เพราะการ push ผิดตำแหน่งเวลาเป็นสาเหตุอันดับต้น ๆ ที่ทำให้ dataLayer ดูเหมือนใช้งานได้แต่จริง ๆ ไม่มีข้อมูล
ถ้าเว็บทำจาก Wix หรือ Shopify จะ push dataLayer แบบนี้ได้ไหม
ทำได้ในระดับหนึ่ง แต่ความยืดหยุ่นขึ้นอยู่กับว่าแพลตฟอร์มนั้นอนุญาตให้แทรกโค้ด Custom หรือใช้ App/Section ที่รองรับหรือไม่ บางแพลตฟอร์มจำกัดให้ใส่ได้แค่บางจุด ควรตรวจสอบเอกสารของแพลตฟอร์มนั้นก่อนวางแผนโครงสร้าง Event
dataLayer เก็บข้อมูลลูกค้าไว้นานแค่ไหน
ตัว dataLayer เองอยู่แค่ในหน่วยความจำของหน้าเว็บที่เปิดอยู่ ไม่ใช่ที่เก็บถาวร พอปิดแท็บหรือรีเฟรชหน้า ค่าทั้งหมดจะหายไปทันที ถ้าต้องการเก็บข้อมูลข้ามหน้าหรือข้ามวัน ต้องใช้ Cookie หรือระบบเก็บข้อมูลฝั่งเซิร์ฟเวอร์แยกต่างหาก
ถ้าลูกค้าใช้ Ad blocker dataLayer จะยังทำงานไหม
ขึ้นอยู่กับว่า Ad blocker บล็อกอะไร บาง Ad blocker บล็อกเฉพาะสคริปต์โฆษณาหรือ Tag บางตัว แต่ยังปล่อยให้ JavaScript พื้นฐานของเว็บทำงานได้ อย่างไรก็ตาม Ad blocker บางประเภทที่บล็อกกว้างกว่านั้นอาจกระทบทั้ง dataLayer และ GTM ได้เช่นกัน จึงไม่ควรถือว่าข้อมูลจาก Client-side ครบร้อยเปอร์เซ็นต์เสมอไป
จำเป็นต้องใส่ข้อมูลส่วนตัวลูกค้า เช่น เบอร์โทรหรือชื่อ เข้าไปใน dataLayer ไหม
ไม่ควรใส่ข้อมูลส่วนตัวดิบอย่างชื่อ เบอร์โทร หรืออีเมลเข้าไปตรง ๆ เพราะข้อมูลใน dataLayer อาจถูกอ่านต่อไปยังหลายปลายทาง ควรใช้ตัวระบุที่ไม่ใช่ข้อมูลส่วนตัวโดยตรง เช่น รหัสอ้างอิงภายใน แล้วค่อยผูกกับข้อมูลจริงในระบบหลังบ้านที่ควบคุมสิทธิ์การเข้าถึงแยกต่างหาก
อ่านต่อแบบเจาะลึก
รู้ว่าโฆษณาเข้า LINE ทำยอดขายจริงแค่ไหน
linli ติดตามลูกค้าตั้งแต่คลิกโฆษณา กดเพิ่มเพื่อน ทักแชท จนปิดการขาย พร้อมส่ง Conversion กลับแพลตฟอร์มโฆษณา เริ่มฟรี 14 วัน
ทดลองใช้ฟรี 14 วันบทความที่เกี่ยวข้อง

กด Rich Menu แล้วไปไหนไม่รู้ ตั้ง Trigger ใน GTM ให้ตามรอยได้ยังไง

ทราฟฟิกเข้าเว็บเยอะขึ้นทุกสัปดาห์ แต่คนกดเข้า LINE ไม่ขยับ แก้ยังไง
