คุกกี้และการระบุตัวตนผู้ใช้

เพื่อให้ Google Analytics ระบุได้ว่า Hit ที่แตกต่างกัน 2 รายการเป็นของผู้ใช้เดียวกัน คุณจึงต้องส่งตัวระบุที่ไม่ซ้ำซึ่งเชื่อมโยงกับผู้ใช้รายนั้นพร้อมกับ Hit แต่ละรายการ

ไลบรารี analytics.js ดำเนินการนี้ได้ผ่านทางช่องรหัสไคลเอ็นต์ ซึ่งเป็นสตริงที่สร้างขึ้นแบบสุ่มและไม่ซ้ำกัน โดยจะจัดเก็บไว้ในคุกกี้ของเบราว์เซอร์ การเข้าชมเว็บไซต์เดียวกันในภายหลังจึงเชื่อมโยงกับผู้ใช้รายเดียวกันได้

โดยค่าเริ่มต้น analytics.js ใช้คุกกี้ของบุคคลที่หนึ่งรายการเดียวชื่อ _ga เพื่อจัดเก็บรหัสไคลเอ็นต์ แต่คุณสามารถปรับแต่งชื่อ โดเมน และเวลาหมดอายุของคุกกี้ได้ คุกกี้อื่นๆ ที่ analytics.js สร้างขึ้น ได้แก่ _gid, AMP_TOKEN และ _gac_<property-id> คุกกี้เหล่านี้จะจัดเก็บรหัสอื่นๆ ที่สร้างขึ้นมา แบบสุ่มและข้อมูลแคมเปญเกี่ยวกับผู้ใช้รายนั้น

การใช้คุกกี้ทำให้ analytics.js ระบุผู้ใช้ที่ไม่ซ้ำในเซสชันการท่องเว็บได้ แต่จะระบุผู้ใช้ที่ไม่ซ้ำในเบราว์เซอร์หรืออุปกรณ์ต่างๆ ไม่ได้ หากเว็บไซต์มีระบบการตรวจสอบสิทธิ์ของตัวเอง คุณอาจใช้ฟีเจอร์ User ID นอกเหนือจาก Client-ID เพื่อระบุผู้ใช้ได้แม่นยำขึ้นในอุปกรณ์ทั้งหมดที่ใช้ในการเข้าถึงเว็บไซต์ของคุณ

คู่มือนี้อธิบายวิธีปรับแต่งการตั้งค่าคุกกี้และวิธีตั้งค่าช่องรหัสผู้ใช้เพื่อให้วัดกิจกรรมของผู้ใช้ในเซสชันต่างๆ ได้แม่นยํายิ่งขึ้น

ตารางต่อไปนี้แสดงค่าในช่องคุกกี้เริ่มต้นที่ analytics.js ใช้

ชื่อช่อง ประเภทค่า ค่าเริ่มต้น
cookieName ข้อความ _ga
cookieDomain ข้อความ ผลลัพธ์ของนิพจน์ JavaScript ต่อไปนี้
document.location.hostname
cookieExpires จำนวนเต็ม 63072000 (2 ปีในหน่วยวินาที)
cookieUpdate boolean true
cookieFlags ข้อความ

หากต้องการแก้ไขค่าเหล่านี้ คุณระบุค่าได้ใน fieldObject ซึ่งส่งผ่านคำสั่ง create เช่น

ga('create', 'UA-XXXXX-Y', {
  'cookieName': 'gaCookie',
  'cookieDomain': 'blog.example.co.uk',
  'cookieExpires': 60 * 60 * 24 * 28  // Time in seconds.
  'cookieUpdate': 'false',
  'cookieFlags': 'SameSite=None; Secure',
});

ช่องคุกกี้ที่มักจะตั้งค่ามากที่สุดคือ cookieDomain ดังนั้น คำสั่ง create จึงยอมรับช่อง cookieDomain เป็นพารามิเตอร์ที่ 3 ที่ไม่บังคับเพื่อให้ความสะดวกดังนี้

ga('create', 'UA-XXXXX-Y', 'blog.example.co.uk');

แท็ก Google Analytics ที่แนะนำจะกำหนดสตริง 'auto' สำหรับช่อง cookieDomain ดังนี้

ga('create', 'UA-XXXXX-Y', 'auto');

การระบุ 'auto' เป็น cookieDomain จะเปิดใช้การกำหนดค่าโดเมนของคุกกี้อัตโนมัติ ซึ่งจะบอกให้ analytics.js ระบุโดเมนคุกกี้ที่ควรใช้โดยอัตโนมัติ

การกำหนดค่าโดเมนของคุกกี้อัตโนมัติจะตั้งค่าคุกกี้ _ga ในโดเมนระดับสูงสุดที่คุกกี้นั้นทำได้ เช่น หากที่อยู่เว็บไซต์คือ blog.example.co.uk analytics.js จะตั้งค่าโดเมนคุกกี้เป็น .example.co.uk นอกจากนี้ หาก analytics.js ตรวจพบว่าคุณกําลังเรียกใช้เซิร์ฟเวอร์ในเครื่อง (เช่น localhost) ระบบจะตั้งค่า cookieDomain เป็น 'none' โดยอัตโนมัติ

ทุกครั้งที่มีการส่ง Hit ไปยัง Google Analytics ระบบจะอัปเดตเวลาหมดอายุของคุกกี้เป็นเวลาปัจจุบันบวกกับค่าของช่อง cookieExpires ซึ่งหมายความว่าหากคุณใช้เวลา cookieExpires ตามค่าเริ่มต้น 2 ปี และผู้ใช้เข้าชมเว็บไซต์ทุกเดือน คุกกี้ของผู้ใช้จะไม่มีวันหมดอายุ

หากคุณตั้งเวลา cookieExpires เป็น 0 (ศูนย์) วินาที คุกกี้จะเปลี่ยนเป็นคุกกี้ตามเซสชัน และจะหมดอายุทันทีที่เซสชันของเบราว์เซอร์ปัจจุบันสิ้นสุดลง

เมื่อตั้งค่า cookieUpdate เป็น true (ค่าเริ่มต้น) analytics.js จะอัปเดตคุกกี้เมื่อโหลดหน้าเว็บแต่ละครั้ง โดยจะอัปเดตการหมดอายุของคุกกี้เป็นการตั้งค่าที่สัมพันธ์กับการเข้าชมเว็บไซต์ครั้งล่าสุด ตัวอย่างเช่น หากตั้งค่าการหมดอายุของคุกกี้ไว้ที่ 1 สัปดาห์และผู้ใช้เข้าชมโดยใช้เบราว์เซอร์เดียวกันทุก 5 วัน การหมดอายุของคุกกี้จะอัปเดตเมื่อมีการเข้าชมแต่ละครั้ง ซึ่งก็จะทำให้ไม่มีการหมดอายุ

เมื่อตั้งค่าเป็น false คุกกี้จะไม่อัปเดตเมื่อหน้าเว็บโหลดแต่ละครั้ง ซึ่งเป็นผลมาจากการหมดอายุของคุกกี้สัมพันธ์กับครั้งแรกที่ผู้ใช้เข้าชมเว็บไซต์

ใส่ Flag เพิ่มเติมต่อท้ายคุกกี้เมื่อตั้งค่า โดยต้องคั่น Flag แต่ละรายการด้วยเครื่องหมายเซมิโคลอน

คุณไม่ควรเข้าถึงชุดคุกกี้ analytics.js โดยตรง เนื่องจากรูปแบบคุกกี้อาจเปลี่ยนแปลงได้ในอนาคต นักพัฒนาซอฟต์แวร์ควรใช้ readyCallback เพื่อรอจนกว่า analytics.js จะโหลด จากนั้นรับค่า clientId ที่จัดเก็บไว้ในเครื่องมือติดตาม

ga(function(tracker) {
  var clientId = tracker.get('clientId');
});

การปิดใช้งานคุกกี้

ในบางกรณี คุณอาจต้องการใช้กลไกพื้นที่เก็บข้อมูลของคุณเอง (เช่น localStorage หรือ Service Worker) เพื่อคงรหัสไคลเอ็นต์ในเซสชันต่างๆ โดยไม่ต้องใช้คุกกี้ คุณปิดไม่ให้ analytics.js ตั้งค่าคุกกี้ได้โดยการตั้งค่าช่อง storage เป็น 'none'

ga('create', 'UA-XXXXX-Y', {
  'storage': 'none'
});

หากจัดเก็บช่อง clientId ด้วยตนเอง คุณจะต้องตั้งค่าช่อง cliendId เมื่อสร้างตัวติดตาม

ga('create', 'UA-XXXXX-Y', {
  'storage': 'none',
  'clientId': '76c24efd-ec42-492a-92df-c62cfd4540a3'
});

หากต้องการปิดใช้คุกกี้ _gac_<property-id> ให้ตั้งค่าช่อง storeGac เป็น false ในคำสั่ง create ดังนี้

ga('create', 'UA-XXXXX-Y', {
  storeGac: false,
});

การใช้ localStorage เพื่อจัดเก็บรหัสไคลเอ็นต์

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแก้ไขแท็ก JavaScript เพื่อใช้ localStorage ในการจัดเก็บ Client-ID แทนคุกกี้

var GA_LOCAL_STORAGE_KEY = 'ga:clientId';

if (window.localStorage) {
  ga('create', 'UA-XXXXX-Y', {
    'storage': 'none',
    'clientId': localStorage.getItem(GA_LOCAL_STORAGE_KEY)
  });
  ga(function(tracker) {
    localStorage.setItem(GA_LOCAL_STORAGE_KEY, tracker.get('clientId'));
  });
}
else {
  ga('create', 'UA-XXXXX-Y', 'auto');
}

ga('send', 'pageview');

User-ID

User ID ทำให้สามารถวิเคราะห์กลุ่มเซสชันในอุปกรณ์ต่างๆ โดยใช้สตริงรหัสแบบถาวรที่ไม่ซ้ำกันและไม่สามารถระบุตัวบุคคลได้ในการแทนตัวผู้ใช้ หากต้องการทราบว่าเหตุใดคุณจึงควรใช้ User ID โปรดดูประโยชน์ของการใช้ฟีเจอร์ User ID

วิธีใช้ User ID กับ analytics.js

  1. ระบุรหัสสตริงที่ไม่ซ้ำกัน ระบุตัวผู้ใช้ไม่ได้ และระบุตัวบุคคลนั้นได้ที่ไม่ซ้ำกันเพื่อแสดงถึงผู้ใช้ที่ลงชื่อเข้าใช้แต่ละราย รหัสนี้มักมาจากระบบการตรวจสอบสิทธิ์
  2. ตั้งค่า User ID ในอุปกรณ์ติดตามดังนี้
ga('create', 'UA-XXXXX-Y', 'auto', {
  userId: USER_ID
});
ga('send', 'pageview');

การจัดการการตรวจสอบสิทธิ์หลังจากการโหลดหน้าเว็บ

เมื่อสร้างแอปพลิเคชันหน้าเว็บเดียวหรือเว็บไซต์แบบไดนามิกอื่นๆ ที่จัดการการลงชื่อเข้าใช้ของผู้ใช้หลังจากการโหลดหน้าเว็บเริ่มต้น กระบวนการตั้งค่า User-ID ในตัวติดตามจะไม่เกิดขึ้นในขณะที่สร้าง

ในกรณีดังกล่าว คุณจะใช้คําสั่ง set เพื่อตั้งค่าในเครื่องมือติดตามได้ทันทีที่ทราบ

// Creates the tracker and sends a pageview as normal
// since the `userId` value is not yet known.
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');

// At a later time, once the `userId` value is known,
// sets the value on the tracker.
ga('set', 'userId', USER_ID);

// Setting the userId doesn't send data to Google Analytics.
// You must also use a pageview or event to send the data.
ga('send', 'event', 'authentication', 'user-id available');

เมื่อใช้วิธีนี้ Hit ที่ส่งก่อนตั้งค่าช่อง userId จะไม่มีค่ารหัสผู้ใช้ อย่างไรก็ตาม ด้วยกระบวนการที่เรียกว่าการรวมเซสชัน Google Analytics จะสามารถเชื่อมโยง Hit เหล่านี้กับผู้ใช้ที่ถูกต้องได้ขณะประมวลผล