tva
← บทความเชิงลึก

วิเคราะห์โดยคำนึงถึงความเป็นส่วนตัว: ติดตั้ง Plausible เองพร้อม Google Search Console

การติดตามข้อมูลวิเคราะห์เปลี่ยนไปมากตั้งแต่ GDPR มีผลในปี 2018 แต่องค์กรส่วนใหญ่ยังใช้ Google Analytics 4 ไม่ใช่เพราะเหมาะกับงานที่สุด แต่เพราะการย้ายดูมีต้นทุนสูงและทางเลือกดูเหมาะกับผู้ใช้เฉพาะกลุ่ม เราเปลี่ยนจาก Google Analytics มาใช้ Plausible CE ที่ติดตั้งและดูแลเองในช่วงกลางปี 2024 และผลที่ได้ควรบันทึกอย่างละเอียด

เหตุใดเราจึงออกจาก Google Analytics

Google Analytics 4 มีขีดความสามารถมาก แต่ภาระปฏิบัติตามกฎระเบียบสูง การตั้งให้สอดคล้อง GDPR จริงต้องมีแบนเนอร์ขอความยินยอมคุกกี้ ระบบจัดการความยินยอม ข้อตกลงประมวลผลข้อมูล และฐานทางกฎหมายที่จัดทำเป็นเอกสารสำหรับการโอนข้อมูลวิเคราะห์ไปยัง Google ในสหรัฐอเมริกา แบนเนอร์ความยินยอมเองทำให้ข้อมูลขาดหายอย่างเป็นระบบ เพราะผู้เข้าชมทุกคนที่ปฏิเสธความยินยอมจะไม่ปรากฏในข้อมูล และอาจเป็นสัดส่วนมากตามการออกแบบแบนเนอร์และกลุ่มผู้ชม จึงเกิดช่องว่างในทุกตัวชี้วัด

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

Plausible CE ใช้แนวคิดต่างออกไป สคริปต์ไม่ใช้คุกกี้โดยค่าเริ่มต้น ไม่จัดเก็บข้อมูลที่ระบุตัวบุคคลได้ และออกแบบมาให้ทำงานโดยไม่มีแบนเนอร์ความยินยอม การออกแบบนี้อาศัยทางเลือกทางเทคนิคที่เฉพาะเจาะจง: ไม่ตั้งคุกกี้ ไม่สร้างรหัสผู้ใช้ถาวรข้ามเซสชัน และไม่ส่งข้อมูลไปยังเซิร์ฟเวอร์ของบุคคลที่สามเมื่อเป็นระบบที่ติดตั้งและดูแลเอง ePrivacy Directive (PECR ในสหราชอาณาจักร) กำหนดให้ขอความยินยอมเมื่อจัดเก็บหรือเข้าถึงข้อมูลบนอุปกรณ์ผู้ใช้ ซึ่งเป็นข้อกำหนดที่สคริปต์ไม่ใช้คุกกี้ออกแบบมาเพื่อหลีกเลี่ยงการเข้าข่าย อย่างไรก็ตาม แนวทาง 2/2023 ของ EDPB ตีความว่าข้อกำหนดนี้ครอบคลุมเทคนิคบางอย่างที่ไม่ใช้คุกกี้ด้วย เช่น การติดตามด้วยพิกเซลและ IP จึงควรตรวจสอบการประเมินสำหรับระบบที่คุณใช้งานเอง

สถาปัตยกรรม: ClickHouse เป็นระบบประมวลผลข้อมูลวิเคราะห์

Plausible CE มีฐานข้อมูลสองตัว: ClickHouse เก็บเหตุการณ์ และ PostgreSQL เก็บการตั้งค่า ClickHouse จัดเก็บแบบคอลัมน์และออกแบบสำหรับงานวิเคราะห์ เป็นระบบเดียวกับที่ Yandex สร้างใช้กับข้อมูลวิเคราะห์ขนาดใหญ่ เว็บที่มีการเปิดหน้าหลักหมื่นต่อเดือนแทบไม่เห็นความต่างจากฐานข้อมูลแบบแถว แต่สถาปัตยกรรมนี้รองรับเหตุการณ์หลายร้อยล้านโดยไม่เปลี่ยนสคีมาหรือออกแบบโครงสร้างพื้นฐานใหม่ ซึ่งมีผลเมื่อคาดว่าจะโต

การตั้ง Docker Compose ตรงไปตรงมา Plausible มีการตั้งค่าทางการที่รวมบริการจำเป็นทั้งหมด เรารันร่วมกับ Traefik บน Hetzner CX21 (2 vCPU, 4 GB RAM) ในเฮลซิงกิ:

services:
  plausible_db:
    image: postgres:16-alpine
    restart: always
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

  plausible_events_db:
    image: clickhouse/clickhouse-server:24.3.3.102-alpine
    restart: always
    volumes:
      - event-data:/var/lib/clickhouse
      - ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
      - ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
    ulimits:
      nofile:
        soft: 262144
        hard: 262144

  plausible:
    image: ghcr.io/plausible/community-edition:v2.1.4
    restart: always
    command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
    depends_on:
      - plausible_db
      - plausible_events_db
    environment:
      - BASE_URL=https://plausible.yourdomain.com
      - SECRET_KEY_BASE=${SECRET_KEY_BASE}
      - DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD}@plausible_db:5432/plausible_db
      - CLICKHOUSE_DATABASE_URL=http://plausible_events_db:8123/plausible_events_db
      - DISABLE_REGISTRATION=true
      - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
      - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.plausible.rule=Host(`plausible.yourdomain.com`)"
      - "traefik.http.routers.plausible.entrypoints=websecure"
      - "traefik.http.routers.plausible.tls.certresolver=letsencrypt"
      - "traefik.http.services.plausible.loadbalancer.server.port=8000"

volumes:
  db-data:
  event-data:

กำหนดค่า DISABLE_REGISTRATION อย่างชัดเจน หากเป็น true จะปิดการสมัครหลังสร้างบัญชีแรก หากเป็น false ใครก็ตามที่พบ URL ของอินสแตนซ์สาธารณะจะสมัครได้ เอกสาร Plausible CE ปัจจุบันระบุค่าเริ่มต้นเป็น invite_only สร้าง SECRET_KEY_BASE ด้วย openssl rand -base64 64 แล้วเก็บใน .env นอกระบบควบคุมรุ่น

ไฟล์ XML สองไฟล์ของ ClickHouse ที่อ้างในส่วนโวลุ่มควบคุมระดับบันทึกเหตุการณ์ หากไม่มี ClickHouse จะบันทึกเหตุการณ์ในระดับที่ทำให้ดิสก์ของอินสแตนซ์เล็กเต็มภายในไม่กี่วัน ที่เก็บโค้ด Plausible มีไฟล์เหล่านี้ให้ คัดลอกไฟล์ ลง clickhouse/ ข้าง docker-compose.yml ก่อนเริ่มชุดระบบ

นำสคริปต์ติดตามขึ้นใช้งาน

เมื่อระบบทำงาน เพิ่มการติดตามให้เว็บไซต์ได้ด้วยแท็กเดียวใน <head> ของ HTML:

<script defer data-domain="yourdomain.com"
  src="https://plausible.yourdomain.com/js/script.js"></script>

Plausible มีส่วนขยายสคริปต์ให้เลือกและรวมเป็นคำขอเดียว เราใช้รุ่นที่ติดตามดาวน์โหลดไฟล์ รองรับการกำหนดเส้นทางด้วย hash ในแอปหน้าเดียว ติดตามลิงก์ที่ไปยังเว็บไซต์ภายนอก คุณสมบัติที่กำหนดเองของการเปิดหน้า รายได้ และเหตุการณ์ติดแท็กดังนี้:

<script defer data-domain="yourdomain.com"
  src="https://plausible.yourdomain.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>

สคริปต์รวมมีขนาดประมาณ 2.4 KB ไม่บีบอัด เทียบ GA4 ประมาณ 45 KB หมายถึง ปริมาณ JavaScript ที่ต้องดาวน์โหลดทุกครั้งที่โหลดหน้าลดลงประมาณ 20 เท่า และการมีสคริปต์ที่ต้องแยกวิเคราะห์และเรียกใช้น้อยลงอาจช่วยปรับปรุง Core Web Vitals บนอุปกรณ์กำลังประมวลผลต่ำและเครือข่ายช้า

เชื่อมต่อ Google Search Console

เหตุผลสำคัญที่สุดที่ควรเก็บ GA4 คือเชื่อม Google Search Console แล้วเทียบคำค้นจากผลการค้นหาที่ไม่ใช่โฆษณากับพฤติกรรมบนเว็บได้ Plausible รองรับโดยตรง ทำให้เว็บที่เน้นเนื้อหาย้ายได้

ต้องมีพร็อพเพอร์ตี Search Console ที่ยืนยันแล้วและอนุญาต OAuth ในการตั้งค่าเว็บไซต์ Plausible สำหรับอินสแตนซ์ที่ติดตั้งและดูแลเอง ยังต้องมีไคลเอนต์ OAuth ของ Google Cloud ที่เปิดใช้ Search Console API แล้วส่งให้ Plausible ผ่าน GOOGLE_CLIENT_ID และ GOOGLE_CLIENT_SECRET (กำหนดไว้แล้วในไฟล์ Compose ด้านบน) เมื่อเชื่อมต่อแล้ว คำค้นจะแสดงใน Sources เมื่อเลือก Google พร้อมจำนวนคลิก และในมุมมองแบบขยายจะแสดงจำนวนการแสดงผล อัตราคลิก และอันดับเฉลี่ยด้วย โดยแสดงเฉพาะคำค้นที่มีอย่างน้อยหนึ่งคลิก

พร็อพเพอร์ตี GSC ที่เลือกต้องครอบคลุมโดเมนที่ Plausible ติดตามจริง พร็อพเพอร์ตีที่ยืนยัน https://www.yourdomain.com แบบ URL-prefix ไม่เชื่อมกับเว็บ Plausible ที่ติดตาม yourdomain.com โดยไม่มีซับโดเมน หากทำได้ให้ใช้ชนิด Domain ใน GSC ซึ่งครอบคลุมทุกซับโดเมนและโปรโตคอล และทำให้เชื่อมต่อ Plausible ได้ตรงไปตรงมา

ข้อมูล GSC ใน Plausible ไม่ใช่ข้อมูลเรียลไทม์ เอกสาร Plausible ระบุว่าล่าช้าประมาณ 24–36 ชั่วโมงเช่นเดียวกับ Search Console และแนะนำให้ตรวจสอบข้อมูลย้อนหลังสองวัน เป็นข้อจำกัด Google ไม่ใช่ Plausible และมักไม่ขัดขวางการทบทวนงานจริง

การปฏิบัติตาม GDPR โดยไม่มีแบนเนอร์คุกกี้

ควรอธิบายประเด็นการปฏิบัติตามกฎระเบียบให้แม่นยำ ภายใต้ ePrivacy Directive ต้องขอความยินยอมเมื่อจัดเก็บหรือเข้าถึงข้อมูลบนอุปกรณ์ผู้ใช้ ทั้งคุกกี้และ localStorage อยู่ในข้อนี้ Plausible ไม่เก็บคุกกี้ ไม่เพิ่ม localStorage และไม่เขียน IndexedDB

Plausible ยังไม่สร้างรหัสผู้ใช้ถาวรข้ามเซสชัน ประมวลผลการเปิดหน้าแต่ละครั้งแยกกัน ค่าที่ใกล้รหัสผู้ใช้ที่สุดคือแฮชรายวันที่สร้างจากที่อยู่ IP ของผู้เข้าชม สตริง user agent โดเมนเว็บไซต์ และค่า salt ฝั่งเซิร์ฟเวอร์ที่เปลี่ยนและลบทุก 24 ชั่วโมง โดยไม่จัดเก็บที่อยู่ IP และ user agent ต้นฉบับ Plausible ระบุว่าจึงไม่มีการเก็บรวบรวมข้อมูลส่วนบุคคล แต่เนื่องจากยังประมวลผลที่อยู่ IP ชั่วครู่เพื่อคำนวณแฮช การพิจารณาว่าอยู่นอกนิยามข้อมูลส่วนบุคคลตาม GDPR มาตรา 4(1) หรือไม่จึงเป็นการประเมินทางกฎหมาย ไม่ใช่การรับประกันทางเทคนิค นี่คือการประเมินของเราสำหรับระบบของ tva เอง ไม่ใช่คำแนะนำทางกฎหมาย โปรดตรวจสอบกับที่ปรึกษาด้านการคุ้มครองข้อมูลของคุณ

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

นโยบายความเป็นส่วนตัวของเราเหลือย่อหน้าสั้นที่อธิบายสิ่งที่เก็บและที่อยู่ข้อมูล ส่วน GA4 เดิมใช้หลายย่อหน้าและต้องอ้างข้อสัญญามาตรฐานกับเงื่อนไขประมวลผลข้อมูลของ Google การลดภาระกฎหมายมีผลมากต่อองค์กรเล็ก

ภาระด้านโครงสร้างพื้นฐานและการเปรียบเทียบประสิทธิภาพ

เราใช้สองเครื่องมือคู่กัน 60 วันก่อนเลิก GA4 จำนวนการเปิดหน้าต่างกันน้อยกว่า 3%

Plausible บันทึกผู้เข้าชมไม่ซ้ำมากกว่า GA4 ที่ได้รับความยินยอมประมาณ 12% ในช่วงเวลาเดียวกัน กลุ่มผู้ยินยอม GA4 มักมีส่วนร่วมมากกว่าและใช้ตัวบล็อกโฆษณาหรือเบราว์เซอร์เน้นความเป็นส่วนตัวน้อยกว่า Plausible ติดตามผู้เข้าชมโดยไม่มีอุปสรรคจากการขอความยินยอม จึงให้ภาพการเข้าถึงทั้งหมดที่แม่นกว่า แต่ยังไม่นับผู้เข้าชมที่บล็อกสคริปต์ ส่วน GA4 ให้รายละเอียดพฤติกรรมของผู้มีส่วนร่วมมากที่สุด ไม่มีเครื่องมือใดผิด ทั้งสองตอบคำถามต่างกันเล็กน้อย

ทรัพยากรที่ใช้ไม่มาก ClickHouse ใช้ RAM ประมาณ 400 MB เมื่อทำงานคงที่ PostgreSQL เพิ่มราว 80 MB การใช้ CPU ตามปกติน้อยมากและสูงชั่วคราวเมื่อโหลดข้อมูลย้อนหลังจำนวนมาก องค์กรที่มีเซิร์ฟเวอร์ Hetzner พร้อมทรัพยากรเหลือจึงแทบไม่มีต้นทุนเพิ่ม

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

บทความที่เกี่ยวข้อง

บทความที่เกี่ยวข้อง