ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

ทำแบนเนอร์คุกกี้บนเว็บ WordPress ให้สอดคล้อง PDPA
Home ทำแบนเนอร์คุกกี้บนเว็บ WordPress ให้สอดคล้อง PDPA

ทำแบนเนอร์คุกกี้บนเว็บ WordPress ให้สอดคล้อง PDPA

พระราชบัญญัติคุ้มครองข้อมูลส่วนบุคคลกำหนดให้การเก็บข้อมูลส่วนบุคคลต้องมีฐานทางกฎหมายรองรับ สำหรับเว็บไซต์ คุกกี้ที่ใช้ติดตามพฤติกรรมเพื่อการตลาดและการวิเคราะห์ต้องได้รับความยินยอมก่อน

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

หมายเหตุ เอกสารนี้อธิบายวิธีตั้งค่าทางเทคนิค ไม่ใช่คำแนะนำทางกฎหมาย ควรให้ที่ปรึกษากฎหมายตรวจสอบนโยบายขององค์กร

สิ่งที่ต้องเตรียม

  • สิทธิ์ผู้ดูแล WordPress
  • รายการคุกกี้และสคริปต์ติดตามทั้งหมดที่เว็บใช้อยู่
  • นโยบายความเป็นส่วนตัวที่ผ่านการตรวจสอบแล้ว

ขั้นตอนที่ 1: สำรวจว่าเว็บใช้คุกกี้อะไรบ้าง

เปิดเว็บในโหมดไม่ระบุตัวตน กด F12 เปิดเครื่องมือนักพัฒนา ไปที่แท็บ Application แล้ว Cookies

จดทุกตัวพร้อมแยกประเภท

  • จำเป็น คุกกี้ที่ขาดไม่ได้ เช่น PHPSESSID, wordpress_logged_in_, woocommerce_cart_hash ประเภทนี้ไม่ต้องขอความยินยอม
  • วิเคราะห์ เช่น _ga, _gid ของ Google Analytics ต้องขอความยินยอม
  • การตลาด เช่น _fbp ของ Facebook Pixel และคุกกี้โฆษณา ต้องขอความยินยอม
  • ความชอบ เช่น การจำภาษาที่เลือก ต้องขอความยินยอมในกรณีทั่วไป

ตรวจสคริปต์ภายนอกที่โหลดด้วย

curl -s https://example.com | grep -oE 'src="https?://[^"]+"' | grep -v example.com | sort -u

ขั้นตอนที่ 2: ติดตั้งปลั๊กอินจัดการความยินยอม

wp plugin install complianz-gdpr --activate
# หรือ
wp plugin install cookie-law-info --activate

เลือกตัวที่รองรับ Google Consent Mode เพราะเป็นกลไกที่ทำให้สคริปต์ของ Google หยุดเก็บข้อมูลจนกว่าจะได้รับความยินยอมจริง

ขั้นตอนที่ 3: หยุดสคริปต์ติดตามก่อนได้รับความยินยอม

นี่คือหัวใจของเรื่องทั้งหมด วิธีที่ถูกต้องคือไม่โหลดสคริปต์เลยจนกว่าผู้ใช้จะยินยอม

// ใน mu-plugins ไม่โหลด GA จนกว่าจะมีความยินยอม
add_action('wp_head', function () {
    if (!isset($_COOKIE['cookie_consent_analytics'])
        || $_COOKIE['cookie_consent_analytics'] !== 'yes') {
        return;
    }
    ?>
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'G-XXXX', { anonymize_ip: true });
    </script>
    <?php
}, 1);

หากใช้ Google Tag Manager ให้ใช้ Consent Mode แทน ซึ่งโหลดสคริปต์ได้แต่ตั้งสถานะเป็นปฏิเสธไว้ก่อน

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  // ตั้งค่าเริ่มต้นเป็นปฏิเสธทุกอย่าง ต้องอยู่ก่อนโค้ด GTM
  gtag('consent', 'default', {
    ad_storage: 'denied',
    ad_user_data: 'denied',
    ad_personalization: 'denied',
    analytics_storage: 'denied',
    functionality_storage: 'granted',
    security_storage: 'granted',
    wait_for_update: 500
  });
</script>

เมื่อผู้ใช้กดยินยอม ให้ส่งการอัปเดต

gtag('consent', 'update', {
  analytics_storage: 'granted',
  ad_storage: 'granted'
});

ขั้นตอนที่ 4: ออกแบบแบนเนอร์ให้ถูกหลัก

สิ่งที่ต้องมี

  • ปุ่ม ยอมรับทั้งหมด และ ปฏิเสธทั้งหมด ที่เด่นเท่ากัน การทำปุ่มปฏิเสธให้จางหรือซ่อนไว้ถือว่าไม่ถูกต้อง
  • ปุ่ม ตั้งค่า ให้เลือกเปิดปิดรายประเภท
  • ลิงก์ไปยังนโยบายความเป็นส่วนตัว
  • ไม่ตั้งค่าเริ่มต้นเป็นยินยอม ทุกช่องที่ไม่ใช่คุกกี้จำเป็นต้องเริ่มจากไม่ติ๊ก
  • วิธีถอนความยินยอมได้ตลอดเวลา เช่น ปุ่มลอยที่มุมจอ

ห้ามใช้รูปแบบที่บังคับให้ยินยอม เช่น ปิดแบนเนอร์ไม่ได้จนกว่าจะกดยอมรับ หรือทำให้ขั้นตอนปฏิเสธซับซ้อนกว่าการยอมรับหลายเท่า

ขั้นตอนที่ 5: เก็บหลักฐานการให้ความยินยอม

กฎหมายกำหนดให้พิสูจน์ได้ว่าได้รับความยินยอมเมื่อใดและในเงื่อนไขใด ปลั๊กอินที่ดีจะบันทึกให้ โดยเก็บ

  • วันเวลาที่ให้ความยินยอม
  • ประเภทที่ยินยอม
  • เวอร์ชันของนโยบายที่แสดงตอนนั้น
  • ตัวระบุแบบไม่ชี้ตัวบุคคล

ตรวจว่าปลั๊กอินเก็บ Log จริง และตั้งระยะเวลาเก็บให้สอดคล้องกับนโยบายขององค์กร

wp db tables | grep -i consent
wp db query "SELECT COUNT(*) FROM wp_cmplz_statistics;"

ขั้นตอนที่ 6: ตั้งอายุความยินยอม

ความยินยอมไม่ควรมีอายุถาวร แนวปฏิบัติที่ใช้กันคือขอใหม่ทุก 6-12 เดือน หรือเมื่อมีการเปลี่ยนแปลงสาระสำคัญของนโยบาย

ตั้งในปลั๊กอินที่หัวข้อเกี่ยวกับอายุคุกกี้ความยินยอม และเพิ่มเลขเวอร์ชันของนโยบายเพื่อบังคับขอใหม่เมื่อแก้ไข

ขั้นตอนที่ 7: จัดการฟอร์มและข้อมูลส่วนบุคคลอื่น

คุกกี้เป็นเพียงส่วนหนึ่ง ฟอร์มที่เก็บชื่อ อีเมล เบอร์โทร ก็เป็นข้อมูลส่วนบุคคลเช่นกัน

  • เพิ่มช่องยินยอมในฟอร์มติดต่อ พร้อมข้อความที่ระบุวัตถุประสงค์ชัดเจน
  • อย่าติ๊กช่องยินยอมไว้ล่วงหน้า
  • ระบุระยะเวลาเก็บข้อมูลและวิธีขอลบ
  • ตั้งให้ลบข้อมูลในฐานข้อมูลของปลั๊กอินฟอร์มตามรอบ

WordPress มีเครื่องมือในตัวสำหรับคำขอของเจ้าของข้อมูลที่ Tools แล้ว Export Personal Data และ Erase Personal Data ใช้เมื่อมีผู้ขอใช้สิทธิ

ขั้นตอนที่ 8: ทดสอบว่าทำงานจริง

# ตรวจว่าไม่มีสคริปต์ติดตามก่อนยินยอม
curl -s https://example.com | grep -iE 'googletagmanager|google-analytics|facebook.net|fbevents'

ควรไม่พบอะไรเลยหากตั้งค่าแบบไม่โหลดสคริปต์ก่อน

ทดสอบด้วยเบราว์เซอร์

  • เปิดโหมดไม่ระบุตัวตน เปิดเว็บ แล้วดูแท็บ Cookies ต้องมีเฉพาะคุกกี้จำเป็น
  • กดปฏิเสธ แล้วรีเฟรช ต้องยังไม่มีคุกกี้วิเคราะห์
  • กดยอมรับ แล้วรีเฟรช จึงจะเห็นคุกกี้วิเคราะห์ปรากฏ
  • ทดสอบปุ่มถอนความยินยอมว่าลบคุกกี้จริง

ปัญหาที่พบบ่อย

แบนเนอร์ขึ้นแต่คุกกี้ถูกตั้งไปแล้ว

สคริปต์ยังโหลดก่อนได้รับความยินยอม ตรวจตามขั้นตอนที่ 8 และย้ายการโหลดสคริปต์ไปอยู่หลังการยินยอมตามขั้นตอนที่ 3

แบนเนอร์ขึ้นซ้ำทุกครั้งที่เข้าเว็บ

คุกกี้ที่บันทึกความยินยอมถูกลบ มักเกิดจากการตั้งแคชที่ไม่ยกเว้นคุกกี้นี้ หรือโดเมนที่ตั้งคุกกี้ไม่ตรงกัน

หน้าเว็บกระโดดเมื่อแบนเนอร์ปรากฏ

กระทบคะแนน CLS ให้จองพื้นที่ไว้ล่วงหน้าด้วย CSS หรือแสดงแบนเนอร์แบบลอยทับที่ไม่ดันเนื้อหา

Google Analytics ไม่เก็บข้อมูลเลยหลังตั้งค่า

ตรวจว่าเมื่อผู้ใช้กดยินยอมแล้ว มีการส่ง gtag('consent','update',...) จริง ดูในแท็บ Network ว่ามีคำขอไปยัง Google หลังกดยอมรับ

ต้องการคำแนะนำเรื่องการจัดเก็บข้อมูลบนคลาวด์ในประเทศไทย ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security