ชั้นข้อมูลคือออบเจ็กต์ที่ Google Tag Manager และ gtag.js ใช้เพื่อส่งผ่านข้อมูลไปยังแท็ก คุณสามารถส่งเหตุการณ์หรือตัวแปรผ่านชั้นข้อมูล และตั้งค่าทริกเกอร์ตามค่าของตัวแปรต่างๆ ได้
เช่น หากคุณเริ่มการทำงานของแท็กรีมาร์เก็ตติ้งเมื่อค่า purchase_total
มากกว่า $100 หรืออิงตามเหตุการณ์ที่เฉพาะเจาะจง เช่น เมื่อมีการคลิกปุ่ม คุณจะกำหนดค่าชั้นข้อมูลให้แท็กใช้ข้อมูลนั้นได้ ออบเจ็กต์ชั้นข้อมูลมีโครงสร้างเป็น JSON เช่น
{
event: "checkout_button",
gtm: {
uniqueEventId: 2,
start: 1639524976560,
scrollThreshold: 90,
scrollUnits: "percent",
scrollDirection: "vertical",
triggers: "1_27"
},
value: "120"
}
แท็ก Google ออกแบบมาเพื่อให้อ้างอิงข้อมูลที่เพิ่มลงในชั้นข้อมูลได้อย่างง่ายดายอย่างเป็นระเบียบและคาดการณ์ได้ แทนที่จะด้วยการแยกวิเคราะห์ตัวแปร ข้อมูลธุรกรรม หมวดหมู่หน้าเว็บ และสัญญาณอื่นๆ ที่กระจายอยู่ทั่วทั้งหน้าเว็บของคุณ การใช้งานชั้นข้อมูลที่ป้อนข้อมูลด้วยตัวแปรและค่าที่เกี่ยวข้องจะช่วยให้มั่นใจได้ว่าข้อมูลที่เกี่ยวข้องจะพร้อมใช้งานเมื่อแท็กจำเป็นต้องใช้
การติดตั้ง
สําหรับการติดตั้งหน้าเว็บ Tag Manager คุณต้องสร้างชั้นข้อมูล โค้ดที่ไฮไลต์ด้านล่างจะแสดงตำแหน่งที่สร้างชั้นข้อมูลก่อนโหลด Tag Manager
<script>
window.dataLayer = window.dataLayer || [];
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->
ในการติดตั้งใช้งาน gtag.js มาตรฐานซึ่งมีการคัดลอกแท็กจากภายในผลิตภัณฑ์และเพิ่มลงในหน้าเว็บ จะมีการจัดเตรียมโค้ดสำหรับสร้างชั้นข้อมูลไว้ ในการใช้งานแท็ก Google ที่กําหนดเอง ให้เพิ่มโค้ดชั้นข้อมูล ในตอนต้นของสคริปต์ ดังที่แสดงในตัวอย่างที่ไฮไลต์ด้านล่าง
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'TAG_ID');
</script>
วิธีการประมวลผลข้อมูลในชั้นข้อมูล
เมื่อคอนเทนเนอร์โหลดแล้ว Tag Manager จะเริ่มประมวลผลข้อความพุชในชั้นข้อมูลทั้งหมดในคิว Tag Manager จะประมวลผลข้อความอย่างเป็นระบบก่อนเป็นอันดับแรก กล่าวคือ ข้อความแต่ละข้อความจะได้รับการประมวลผลทีละข้อความตามลำดับที่ได้รับ หากข้อความเป็นเหตุการณ์ แท็กที่มีเงื่อนไขทริกเกอร์ซึ่งตรงตามเงื่อนไขของทริกเกอร์จะเริ่มทำงานก่อนที่ Tag Manager จะไปยังข้อความถัดไป
หากการเรียกใช้ gtag()
หรือ dataLayer.push()
เป็นการเรียกใช้โค้ดในหน้าเว็บ ในเทมเพลตที่กำหนดเอง หรือในแท็ก HTML ที่กำหนดเอง ข้อความที่เกี่ยวข้องจะอยู่ในคิวและประมวลผลหลังจากข้อความอื่นๆ ที่รอดำเนินการทั้งหมดได้รับการประเมินแล้ว ซึ่งหมายความว่าค่าชั้นข้อมูลที่อัปเดตไม่อาจรับประกันได้สำหรับกิจกรรมถัดไป
ในการจัดการกรณีเหล่านี้ ควรเพิ่มชื่อเหตุการณ์ลงในข้อความเมื่อมีการพุชเข้าไปในชั้นข้อมูล แล้วรอรับชื่อเหตุการณ์นั้นด้วยทริกเกอร์เหตุการณ์ที่กําหนดเอง
ใช้ชั้นข้อมูลที่มีเครื่องจัดการเหตุการณ์
ออบเจ็กต์ dataLayer
ใช้คำสั่ง event
เพื่อเริ่มส่งเหตุการณ์
แท็ก Google และ Tag Manager ใช้ตัวแปรชั้นข้อมูลพิเศษที่เรียกว่า event
ซึ่ง Listener เหตุการณ์ของ JavaScript จะใช้เพื่อทำให้แท็กเริ่มทำงานเมื่อผู้ใช้โต้ตอบกับองค์ประกอบของเว็บไซต์ เช่น คุณอาจต้องการให้แท็กเครื่องมือวัด Conversion เริ่มทำงานเมื่อผู้ใช้คลิกปุ่มยืนยันการซื้อ ระบบอาจเรียกเหตุการณ์เมื่อใดก็ตามที่ผู้ใช้โต้ตอบกับองค์ประกอบของเว็บไซต์ เช่น ลิงก์ ปุ่ม การเลื่อน ฯลฯ
ฟังก์ชันนี้ทำได้โดยเรียกใช้ dataLayer.push()
เมื่อเกิดเหตุการณ์ขึ้น ไวยากรณ์สําหรับการส่งเหตุการณ์ด้วย dataLayer.push()
มีดังนี้
dataLayer.push({'event': 'event_name'});
โดย event_name
คือสตริงที่อธิบายเหตุการณ์ เช่น 'login'
, purchase
หรือ search
ใช้ dataLayer.push()
เพื่อส่งข้อมูลเหตุการณ์เมื่อมีการกระทําเกิดขึ้นที่คุณต้องการวัด ตัวอย่างเช่น หากต้องการส่งเหตุการณ์เมื่อผู้ใช้คลิกปุ่ม ให้แก้ไขเครื่องจัดการ onclick
ของปุ่มให้เรียกใช้ dataLayer.push()
ดังนี้
<button onclick="dataLayer.push({'event': 'login'});">Button 1</button>
คุณสามารถพุชตัวแปรชั้นข้อมูลไปยังชั้นข้อมูลแบบไดนามิกเพื่อเก็บข้อมูล เช่น ค่าที่ป้อนหรือเลือกในแบบฟอร์ม ข้อมูลเมตาที่เชื่อมโยงกับวิดีโอที่ผู้เข้าชมกำลังเล่น สีของผลิตภัณฑ์ (เช่น รถยนต์) ที่ผู้เข้าชมปรับแต่ง URL ปลายทางของลิงก์ที่คลิก ฯลฯ
เช่นเดียวกับเหตุการณ์ ฟังก์ชันนี้จะทำได้โดยเรียกใช้ push()
API เพื่อเพิ่มหรือแทนที่ตัวแปรชั้นข้อมูลในชั้นข้อมูล ไวยากรณ์พื้นฐานสำหรับการตั้งค่าตัวแปรชั้นข้อมูลแบบไดนามิกมีดังนี้
dataLayer.push({'variable_name': 'variable_value'});
โดย 'variable_name'
เป็นสตริงที่ระบุชื่อของตัวแปรชั้นข้อมูลที่ต้องการตั้งค่า และ 'variable_value'
เป็นสตริงที่ระบุค่าของตัวแปรชั้นข้อมูลที่ต้องการตั้งค่าหรือแทนที่
ตัวอย่างเช่น หากต้องการตั้งค่าตัวแปรชั้นข้อมูลโดยใช้ค่ากำหนดสีเมื่อผู้เข้าชมมีส่วนร่วมกับเครื่องมือปรับแต่งผลิตภัณฑ์ คุณอาจพุชตัวแปรชั้นข้อมูลแบบไดนามิกต่อไปนี้
dataLayer.push({'color': 'red'});
หนึ่งพุช ตัวแปรหลายรายการ
คุณพุชตัวแปรและเหตุการณ์หลายรายการพร้อมกันได้โดยทำดังนี้
dataLayer.push({
'color': 'red',
'conversionValue': 50,
'event': 'customize'
});
คงตัวแปรชั้นข้อมูลไว้
หากต้องการคงตัวแปรชั้นข้อมูลระหว่างหน้าเว็บไว้ ให้เรียก dataLayer.push()
หลังจากสร้างชั้นข้อมูลเมื่อโหลดหน้าเว็บแต่ละครั้ง และพุชตัวแปรไปยังชั้นข้อมูลแล้ว หากคุณต้องการให้ Tag Manager สามารถใช้ตัวแปรชั้นข้อมูลเหล่านี้ได้เมื่อโหลดคอนเทนเนอร์แล้ว ให้เพิ่มการเรียกใช้ dataLayer.push()
เหนือโค้ดคอนเทนเนอร์ของ Tag Manager ดังที่แสดงด้านล่าง
<script>
window.dataLayer = window.dataLayer || [];
dataLayer.push({
'event': 'Pageview',
'pagePath': 'https://www.googleanalytics.dev/pancakes',
'pageTitle': 'Pancake Event Signup',
'visitorType': 'customer'
});
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->
ตัวแปรแต่ละรายการที่ประกาศภายในออบเจ็กต์ชั้นข้อมูลจะยังคงอยู่ตราบใดที่ผู้เข้าชมยังอยู่ในหน้าปัจจุบัน คุณจะต้องประกาศตัวแปรชั้นข้อมูลที่เกี่ยวข้องในหน้าต่างๆ (เช่น visitorType
) ไว้ในชั้นข้อมูลบนแต่ละหน้าของเว็บไซต์ แม้ว่าคุณไม่จำเป็นต้องใส่ตัวแปรชุดเดียวกันในชั้นข้อมูลบนทุกหน้า แต่คุณควรใช้รูปแบบการตั้งชื่อที่สอดคล้องกัน กล่าวอีกนัยหนึ่งคือ หากคุณตั้งค่าหมวดหมู่หน้าเว็บในหน้าลงชื่อสมัครใช้โดยใช้ตัวแปรที่เรียกว่า pageCategory
หน้าผลิตภัณฑ์และหน้าการซื้อควรใช้ตัวแปร pageCategory
ด้วย
การแก้ปัญหา
เคล็ดลับการแก้ปัญหาชั้นข้อมูลบางส่วนมีดังนี้
ไม่เขียนทับตัวแปร window.dataLayer
: เมื่อคุณใช้ชั้นข้อมูลโดยตรง (เช่น dataLayer = [{'item': 'value'}])
ระบบจะเขียนทับค่าที่มีอยู่ในdataLayer
การติดตั้ง Tag Manager ควรสร้างชั้นข้อมูลในซอร์สโค้ดในตำแหน่งด้านบนให้สูงที่สุดบนข้อมูลโค้ดคอนเทนเนอร์โดยใช้ window.dataLayer =
window.dataLayer || [];
หลังจากประกาศ dataLayer
แล้ว ให้ใช้ dataLayer.push({'item': 'value'})
เพื่อเพิ่มค่าอื่นๆ และหากค่าเหล่านั้นจำเป็นต้องพร้อมใช้ใน Tag Manager เมื่อหน้าเว็บโหลด การเรียก dataLayer.push()
ดังกล่าวจะต้องอยู่เหนือโค้ดคอนเทนเนอร์ Tag Manager เช่นกัน
ชื่อออบเจ็กต์ dataLayer
คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่: หากคุณพยายามพุชตัวแปรหรือเหตุการณ์โดยไม่ใช้ตัวพิมพ์ที่เหมาะสม การพุชจะไม่ทำงาน
datalayer.push({'pageTitle': 'Home'}); // Bad (datalayer in lowercase)
dataLayer.push({'pageTitle': 'Home'}); // Good (dataLayer in camel case)
ต้องเรียกใช้ dataLayer.push
ด้วยออบเจ็กต์ JavaScript ที่ถูกต้อง ชื่อตัวแปรชั้นข้อมูลทั้งหมดควรอยู่ในเครื่องหมายคำพูด
dataLayer.push({new-variable: 'value'}); // Bad - no quote marks
dataLayer.push({'new-variable': 'value'}); // Good - proper quote marks
ตั้งชื่อตัวแปรให้สอดคล้องกันในทุกหน้าเว็บ: หากคุณใช้ชื่อตัวแปรที่แตกต่างกันสำหรับแนวคิดเดียวกันในหน้าเว็บที่ต่างกัน แท็กจะไม่เริ่มทํางานอย่างสอดคล้องกันในทุกตําแหน่งที่ต้องการ
ไม่ดี:
// Homepage:
dataLayer.push({'visitorType': 'low-value'});
// Checkout Page:
dataLayer.push({'visitor_type': 'high-value'});
ดี:
// Homepage:
dataLayer.push({'visitorType': 'low-value'});
// Checkout Page:
dataLayer.push({'visitorType': 'high-value'});
เปลี่ยนชื่อชั้นข้อมูล
ชื่อเริ่มต้นของออบเจ็กต์ชั้นข้อมูลที่แท็ก Google หรือ Tag Manager เป็นผู้เริ่มต้นคือ dataLayer
หากต้องการใช้ชื่ออื่นสำหรับชั้นข้อมูลก็ทำได้โดยแก้ไขค่าพารามิเตอร์ชั้นข้อมูลในแท็ก Google หรือข้อมูลโค้ดคอนเทนเนอร์ของ Tag Manager โดยใช้ชื่อที่ต้องการ
gtag.js
เพิ่มพารามิเตอร์การค้นหาชื่อ "l" ลงใน URL เพื่อตั้งชื่อชั้นข้อมูลใหม่ เช่น l=myNewName
อัปเดตอินสแตนซ์ทั้งหมดของ dataLayer
ในข้อมูลโค้ดแท็ก Google เป็นชื่อใหม่
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID&l=myNewName"></script>
<script>
window.myNewName = window.myNewName || [];
function gtag(){myNewName.push(arguments);}
gtag('js', new Date());
gtag('config', 'TAG_ID');
</script>
Tag Manager
แทนที่ค่าพารามิเตอร์ชั้นข้อมูล (ตามที่ไฮไลต์ด้านล่าง) ในข้อมูลโค้ดคอนเทนเนอร์ด้วยชื่อที่ต้องการ
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','myNewName','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->
เมื่อเปลี่ยนชื่อแล้ว ต้องปรับการอ้างอิงทั้งหมดไปยังชั้นข้อมูล (เช่น เมื่อประกาศชั้นข้อมูลเหนือข้อมูลโค้ด หรือเมื่อพุชเหตุการณ์หรือตัวแปรชั้นข้อมูลแบบไดนามิกไปยังชั้นข้อมูลด้วยคำสั่ง .push()
) เพื่อให้สอดคล้องกับชื่อชั้นข้อมูลที่กำหนดเอง ดังนี้
<script>
myNewName = window.dataLayer || [];
myNewName.push({'variable_name': 'variable_value'});
</script>
วิธีการชั้นข้อมูลที่กำหนดเอง
ถ้าคุณพุชฟังก์ชันไปยังชั้นข้อมูล ฟังก์ชันจะถูกเรียกด้วยชุดนี้ในโมเดลข้อมูลนามธรรม โมเดลข้อมูลนามธรรมนี้สามารถรับและกำหนดค่าให้กับแหล่งเก็บคีย์-ค่า และยังให้วิธีการรีเซ็ตชั้นข้อมูลด้วย
ตั้งค่า
ฟังก์ชัน set
ในโมเดลข้อมูลนามธรรมช่วยให้คุณกำหนดค่าที่จะดึงผ่านได้
window.dataLayer.push(function() {
this.set('time', new Date());
});
รับ
ฟังก์ชัน get
ในโมเดลข้อมูลนามธรรมช่วยให้คุณดึงค่าที่ตั้งไว้ได้
window.dataLayer.push(function() {
const existingTime = this.get('time');
if (existingTime !== null) {
// Change behavior based on whether or not this value exists...
} else {
// ...
}
})
ตั้งค่าใหม่
ฟังก์ชัน reset
ในโมเดลข้อมูลนามธรรมช่วยให้คุณรีเซ็ตข้อมูลในชั้นข้อมูลได้ ซึ่งจะเป็นประโยชน์มากกับหน้าเว็บที่เปิดไว้และขนาดของชั้นข้อมูลจะมีขนาดใหญ่ขึ้นเรื่อยๆ หากต้องการรีเซ็ตชั้นข้อมูล ให้ใช้โค้ดต่อไปนี้
window.dataLayer.push(function() {
this.reset();
})