บังคับให้ Facebook รีเฟรชแคช Open Graph

คุณสามารถบังคับให้ Facebook รีเฟรชแคช Open Graph ได้ เนื่องจาก Facebook เป็นแพลตฟอร์มเดียวในบรรดาแพลตฟอร์มหลักที่เปิดให้เรียกใช้ผ่านโปรแกรมได้ คุณสามารถใช้ปุ่ม Scrape Again ใน Sharing Debugger สำหรับลิงก์เดียว หรือเรียกใช้ endpoint การ scrape ของ Graph API พร้อมกับ app access token ก็ได้ ไม่มีวิธีบังคับให้ WhatsApp, LinkedIn หรือ X รีเฟรชแคช เนื่องจากแพลตฟอร์มเหล่านี้ไม่ได้เปิด API ดังกล่าวให้ใครใช้งาน

สิ่งที่ทุกคนมักจะพลาด

Meta แคชตัวอย่างลิงก์ (link preview) โดยใช้ URL ของหน้าเพจเป็นคีย์ และเก็บสำเนารูปภาพไว้ในฝั่งของตัวเอง Meta จะไม่อ่านหน้าเพจของคุณใหม่เพื่อตรวจสอบว่า og:image ตอนนี้ชี้ไปที่อื่นแล้ว

ดังนั้นขั้นตอนการทำงานแบบนี้จึงล้มเหลว และเป็นวิธีที่คนส่วนใหญ่พยายามใช้:

เปลี่ยนรูปปก → URL ของ og:image เป็นค่าใหม่ → คิดว่า Facebook จะดึงข้อมูลใหม่ → แต่จริงๆ แล้วไม่เป็นเช่นนั้น

URL รูปภาพใหม่จะช่วยเคลียร์แคช CDN ของรูปภาพ แต่ไม่ได้ส่งผลอะไรกับแคชที่ยึดตามหน้าเพจของ Meta ในการทำให้ Facebook อัปเดต คุณต้องบอก Meta ว่า หน้าเพจมีการเปลี่ยนแปลง

แคช ยึดตาม วิธีล้างแคช
แคชหน้าเพจ / CDN ของคุณ URL ของหน้าเพจ การ purge แคช
แคชตัวอย่างลิงก์ของ Meta URL ของหน้าเพจ endpoint สำหรับ scrape หรือ Sharing Debugger
สำเนารูปภาพของ Meta URL ของรูปภาพ URL รูปภาพใหม่
CDN รูปภาพของคุณ URL ของรูปภาพ URL รูปภาพใหม่

ตัวเลือกที่ 1 — Sharing Debugger (ทีละหน้า, ใช้มือ)

เปิด developers.facebook.com/tools/debug วาง URL ของหน้าเว็บ แล้วกด Scrape Again Meta จะดึงข้อมูลหน้าเว็บอีกครั้งและสร้างแคชตัวอย่างใหม่

เครื่องมือนี้ยังเป็นตัวตรวจสอบความถูกต้องฟรีที่ดีที่สุดที่คุณมี เพราะมันรายงานสิ่งที่ Meta พบจริง ไม่ใช่สิ่งที่คุณหวังว่าจะมี: og:image ที่หายไปหรือซ้ำกัน รูปภาพที่ไม่สามารถเข้าถึงได้ รูปแบบที่ไม่รองรับ สองสิ่งที่มันทำไม่ได้: มันไม่สามารถจัดการกับ WhatsApp ได้ (แคชแยกต่างหาก อยู่ในแอปของผู้รับ) และมันไม่ใช่เครื่องมือแบบแคตตาล็อก — มันจัดการได้ทีละ URL มีการจำกัดอัตราการใช้งาน และต้องมีคนคอยควบคุม

ตัวเลือกที่ 2 — Graph API (นี่คือสิ่งที่ปลั๊กอินเรียกใช้)

การทำงานเชิงโปรแกรมที่เทียบเท่าซึ่ง FastOG ใช้คือการส่ง POST ไปยัง Graph API ด้วย scrape=true:

bash
curl -X POST \
  "https://graph.facebook.com/v21.0/?id=$(python3 -c 'import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1],safe=""))' 'https://your-store.com/product/example')&scrape=true&access_token=${APP_ID}|${APP_SECRET}"

รายละเอียดสี่ประการที่สำคัญ:

  • id คือ URL ของหน้าเพจ ไม่ใช่ URL ของรูปภาพ Meta ใช้คีย์แคชตามหน้าเพจ ดังนั้นการ ping ที่อยู่ของรูปภาพจะไม่ทำให้เกิดการรีเฟรชใดๆ
  • ต้องใช้โทเค็น — Meta กำหนดให้ต้องใช้โทเค็นบนเอนด์พอยต์นี้ตั้งแต่เดือนตุลาคม 2017 โทเค็นการเข้าถึงแอปในรูปแบบ {app_id}|{app_secret} ก็เพียงพอแล้ว และไม่จำเป็นต้องให้ผู้ใช้ล็อกอิน ซึ่งเป็นสิ่งที่ทำให้การเรียกนี้สามารถทำงานได้จากงานเบื้องหลัง (background job)
  • เวอร์ชันของ Graph API มีการเปลี่ยนแปลง FastOG กำหนดเวอร์ชัน Graph API ที่ผ่านการทดสอบแล้ว โปรดตรวจสอบเอกสารและ changelog ปัจจุบันของ Meta ก่อนกำหนดเวอร์ชันในโค้ดของคุณเอง
  • ถือว่าเป็นการพยายามอย่างดีที่สุด (best-effort) Meta จำกัดอัตราการเรียกสแครป และการถูกปฏิเสธหมายความเพียงว่า Facebook จะรีเฟรชตามกำหนดเวลาของตัวเองแทนที่จะรีเฟรชทันที — แท็กบนหน้าเพจของคุณถูกต้องอยู่แล้ว

เนื่องจากมีการจำกัดอัตราการเรียก จึงไม่ควรเรียกแบบอินไลน์ทุกครั้งที่บันทึกแคตตาล็อกขนาดใหญ่ ควรจัดคิว (queue) และตัดรายการซ้ำด้วย URL เพื่อให้การบันทึกซ้ำของสินค้าที่ไม่มีการเปลี่ยนแปลงจะได้ไม่เปลืองโควตาการจำกัดอัตราการเรียก

ตัวเลือกที่ 3 — ปลั๊กอินที่จัดการให้คุณเอง

ปลั๊กอินที่วางตลาดในชื่อ "Open Graph cache refresh" แบ่งออกเป็นสองกลุ่ม และมีเพียงกลุ่มเดียวเท่านั้นที่แก้ปัญหา Facebook ได้:

กลไก สิ่งที่เคลียร์ แก้ไขพรีวิว Facebook ที่ค้างได้หรือไม่
ต่อ query string ที่เปลี่ยนแปลงไปยัง URL ของรูปภาพ (?v=timestamp) CDN รูปภาพของคุณ ไม่ได้ — แคชของ Meta อิงตามหน้าเพจ
เรียก scrape endpoint สำหรับ URL ของหน้าเพจ แคชพรีวิวของ Meta ได้

ก่อนติดตั้ง ให้ตรวจสอบก่อนว่าปลั๊กอินนั้นเป็นแบบไหน พารามิเตอร์ timestamp เป็นวิธีแก้ที่แท้จริงสำหรับรูปภาพที่ค้าง แต่ไม่ใช่วิธีแก้สำหรับการ์ด Facebook ที่ค้าง

FastOG สำหรับ WooCommerce ทำแบบที่สอง และคุณไม่ต้องตั้งค่าอะไรเลย ปลั๊กอินลงทะเบียน webhook ของผลิตภัณฑ์ดั้งเดิมของ WooCommerce ดังนั้นการบันทึกผลิตภัณฑ์จะส่งคำขอ re-scrape ไปยัง Meta สำหรับ permalink ของผลิตภัณฑ์นั้น — โดยจัดคิว, ตัดรายการซ้ำภายในช่วงเวลาสั้นๆ และออกแบบให้เป็น best-effort เพื่อให้การปฏิเสธไม่ทำให้การบันทึกล้มเหลว ใช้ได้กับหน้าเพจผลิตภัณฑ์ (product.created / product.updated) แต่ไม่ครอบคลุมการแก้ไขหมวดหมู่และบล็อก

ฝั่งรูปภาพจัดการแยกต่างหาก และแตกต่างจากคู่แข่งทุกราย: เนื่องจาก URL ของปก FastOG มีค่าที่ใช้สร้างมัน การแก้ไขราคาหรือรูปภาพจะสร้าง URL ปกใหม่ Meta จึงไม่สามารถแสดงรูปภาพที่อยู่เดิมที่ไม่มีอยู่แล้วได้อีก

เมื่อ Facebook ยังไม่เพียงพอ

แพลตฟอร์ม บังคับให้รีเฟรชได้หรือไม่? สิ่งที่เกิดขึ้นจริง
Facebook ได้ — ผ่าน debugger หรือ scrape=true ส่งคำขอให้ดึงข้อมูลใหม่ ระยะเวลาในการเผยแพร่จะแตกต่างกันไป
WhatsApp ไม่ได้ พรีวิวถูกแคชไว้ในแอปของผู้รับ ไม่มี API ให้ใช้
LinkedIn ไม่มี API แบบโปรแกรมที่ระบุไว้อย่างเป็นทางการ อ่านข้อมูลใหม่ตามรอบเวลาของตัวเอง ไม่มีการรับประกันระยะเวลาที่แน่นอนต่อสาธารณะ
X / Twitter ไม่มี API แบบโปรแกรมที่ระบุไว้อย่างเป็นทางการ อ่านข้อมูลใหม่ตามรอบเวลาของตัวเอง ไม่มีการรับประกันระยะเวลาที่แน่นอนต่อสาธารณะ
Slack, Discord ไม่ได้ แคชอายุสั้นที่ล้างตัวเองภายในไม่กี่นาทีถึงไม่กี่ชั่วโมง

หากพรีวิวเก่าบน WhatsApp คำตอบไม่ใช่เครื่องมือของ Facebook — แต่คือ การตั้งค่าฝั่งร้านค้าให้ถูกต้อง เพื่อให้การอ่านครั้งถัดไปถูกต้อง

เมื่อการดึงข้อมูลสำเร็จแล้วแต่ยังแสดงรูปเก่าอยู่

ไล่ตรวจสอบตามรายการนี้ตามลำดับ:

  1. หน้ายังให้บริการแท็กเก่าอยู่หรือไม่? curl -s https://your-store.com/product/example | grep -i 'og:image' — หน้า HTML ที่ถูกแคชไว้พร้อมกับ og:image ที่เก่าจะทำให้การดึงข้อมูลล้มเหลวโดยสิ้นเชิง ต้องล้างแคชของหน้า
  2. หน้านั้นพิมพ์ og:image มากกว่าหนึ่งรายการหรือไม่? หากปลั๊กอินสองตัวต่างส่งออกมาอย่างละหนึ่งรายการ ครอว์เลอร์จะใช้รายการแรกที่อ่านเจอ ให้นับจำนวนให้แน่ใจ
  3. รูปภาพเข้าถึงได้และไม่ถูกบล็อกหรือไม่? curl -I <image-url> ควรคืนค่า 200 พร้อมกับ Content-Type ที่เป็นรูปภาพ ครอว์เลอร์ของโซเชียลจะปฏิบัติตาม robots.txt ดังนั้นรูปภาพที่อยู่บนเส้นทาง Disallow: จะล้มเหลวในลักษณะที่อ่านแล้วเหมือนไฟล์เสียหาย — และ curl จะไม่มีทางจำลองเหตุการณ์นี้ได้ เพราะ curl ไม่สนใจ robots.txt
  4. URL ของรูปภาพเปลี่ยนจริงหรือไม่? หากไม่เปลี่ยน แสดงว่าเนื้อหาก็ไม่เปลี่ยนเช่นกัน — ตรวจสอบว่าการแก้ไขราคา/รูปภาพไปถึงแหล่งข้อมูลที่การ์ดถูกดึงมาแล้วหรือไม่
  5. ตรวจสอบดีบักเกอร์อีกครั้ง หากตอนนี้รายงานรูปภาพใหม่แล้วแต่ Facebook ยังแสดงการ์ดเก่าอยู่ แสดงว่าคุณกำลังดูการกระจายข้อมูลของ Facebook เอง ไม่ใช่แท็กของคุณ

คำถามที่พบบ่อย

มี API อย่างเป็นทางการสำหรับล้างแคช Open Graph ของ Facebook หรือไม่?

FastOG ใช้เอนด์พอยต์ scrape (POST https://graph.facebook.com/{version}/?id={page-url}&scrape=true&access_token={token}) Meta ระบุขั้นตอนการใช้งาน Sharing Debugger และการรวบรวมข้อมูลผ่านโปรแกรมไว้ในเอกสาร รูปแบบเอนด์พอยต์และเวอร์ชัน Graph API ที่แน่นอนอาจมีการเปลี่ยนแปลงได้ ดังนั้นควรตรวจสอบกับเอกสารล่าสุดของ Meta ก่อนนำไปใช้งานด้วยตนเอง

Sharing Debugger ต้องมีแอปหรือโทเค็นหรือไม่?

ไม่ต้อง เป็นเครื่องมือสาธารณะที่ใช้งานได้กับ URL สาธารณะทุกประเภท สิ่งที่ทำไม่ได้คือการรันตามกำหนดเวลา หรือครอบคลุมแคตตาล็อกทั้งหมด

การ re-scrape จะทำให้ฉันเสียค่าเรนเดอร์ FastOG หรือไม่?

โดยปกติแล้วไม่เสีย URL ของภาพปกจะอ้างอิงจากเนื้อหา ดังนั้นหากเนื้อหาไม่เปลี่ยนแปลง URL ก็ไม่เปลี่ยนแปลง และการดึงข้อมูลจะเป็นการเข้าถึงแคช (cache hit) ซึ่งไม่เสียค่าเรนเดอร์ หากราคาเปลี่ยนแปลง URL ก็จะเปลี่ยนตาม — นั่นคือการเรนเดอร์ใหม่หนึ่งครั้ง และเป็นการเรนเดอร์ที่คุณต้องการ

การ re-scrape ผ่าน Facebook จะแก้ไขพรีวิว WhatsApp ของฉันหรือไม่?

ไม่ได้ แคชทั้งสองแยกจากกัน ตัวดีบักเกอร์ของ Facebook ยังคงมีประโยชน์ในฐานะ ตัวตรวจสอบ — มันดึงข้อมูลเพจในลักษณะเดียวกับที่ WhatsApp จะทำ และรายงานสิ่งที่พบ — แต่ไม่สามารถรีเฟรชแคชของ WhatsApp ได้

Facebook จะเก็บพรีวิวไว้นานแค่ไหนหากฉันไม่เคย ping?

Meta ระบุช่วงเวลา re-scrape มาตรฐานประมาณ 24 ชั่วโมง แต่ระยะเวลาในการเผยแพร่จริงอาจแตกต่างกันไป นี่คือเหตุผลที่ต้องมีดีบักเกอร์และเส้นทางการรวบรวมข้อมูลผ่านโปรแกรม

ฉันต้อง ping ทุกสินค้าหลังจากการนำเข้าแคตตาล็อกหรือไม่?

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

จะเกิดอะไรขึ้นหาก Meta ปฏิเสธคำขอ?

ไม่มีอะไรเสียหาย การ ping ที่ถูกปฏิเสธหรือถูกจำกัดอัตราหมายความว่า Facebook จะรีเฟรชตามกำหนดเวลาของตัวเองแทนที่จะรีเฟรชทันที — แท็กบนเพจถูกต้องอยู่แล้ว ซึ่งเป็นเหตุผลที่การเรียกนี้เป็นแบบ best-effort ไม่ใช่ dependency ที่บังคับ

ลองใช้ฟรี — ไม่ต้องสมัครสมาชิก

ดูตัวอย่างและทดสอบภาพ OG แบบไดนามิกได้ในไม่กี่วินาที

เปิดตัวทดสอบภาพ OG ฟรี

From Us

A BeCaSimulations site