Facebook 的分享預覽爬蟲不會讀取數值型的 Page ID;它會從您頁面的 HTML head 讀取 Open Graph meta 標籤。對於大多數分享預覽來說,Graph API Page ID 查詢是錯誤的工作 —— Open Graph Protocol 中並沒有 og:page_id 屬性,Facebook 的爬蟲也絕不會向您的頁面請求該屬性。爬蟲真正請求的是四個必要的 Open Graph 屬性:og:title、og:type、og:image 和 og:url,以 meta 元素的形式放在標準頁面的 head 內。Open Graph 產生器正是從安全的輸入建立該僅含通訊協定的程式碼區塊,且完全在瀏覽器中執行,因此不需要應用程式註冊、存取權杖或 Graph API 呼叫。只有在您想要以程式化方式發布貼文、讀取留言或管理 Facebook 粉絲專頁時,才需要數值型的 Page ID —— 這類操作屬於經驗證的 Graph API 呼叫,而非分享預覽。如果目標是在 Facebook、LinkedIn、Slack、Discord 或任何其他 Open Graph 消費者上產生分享預覽,正確的做法是在自己的頁面上放置格式正確的 Open Graph 中繼資料,並在上線後透過各平台的除錯器進行驗證。

how to get page id facebook graph api
用於 Open Graph 標籤的 Facebook Graph API Page ID

為何 Graph API Page ID 並非分享預覽所讀取的內容

當 URL 被貼到 Facebook 發文框時,平台會派出爬蟲前往目的地。該爬會擷取頁面、解析 HTML head,並讀取任何它找到的 og:* meta 元素。四個必要的 Open Graph 屬性 —— og:title、og:type、og:image 和 og:url —— 共同描述了可分享的 graph 物件,這就是預覽畫面所顯示內容的完整合約。在通訊協定端沒有任何欄位接受 Facebook Page ID;該通訊協定刻意採用以頁面為導向的設計,讓任何網站 —— 無論是否擁有 Facebook 存在 —— 都能產生分享預覽。

Graph API 端點(例如 /{page-username}?fields=id 或 /{page-id}?fields=link)會回傳數值識別碼,但這些數字無法嵌入 meta 標籤。它們的用途在於應用程式權杖、貼文自動化、留言擷取以及粉絲專頁管理 —— 這些都不是分享預覽所會使用的。將 Page ID 查詢視為通往分享預覽的入口,是一種類別上的錯誤,會讓您在應用程式審查、存取權杖和權限上浪費時間,而爬蟲根本不會讀取這些內容。

Open Graph Protocol 真正要求的內容

Open Graph Protocol定義了四個必要的基本屬性,而產生器每次都會先以固定順序輸出它們:

  • og:title —— 為分享物件命名。經過修剪、長度限制,並針對 HTML 屬性進行跳脫處理,確保 & 符號、引號和角括號不會破 meta 元素。
  • og:type —— 為物件分類。產生器刻意將其限制為 website 或 article;music、video、profile 及其他結構化類型需要額外的類型專屬欄位,而精簡表單並未提供這些欄位。
  • og:image —— 提供具代表性的圖片。必須是絕對的 HTTP 或 HTTPS URL,且不含內嵌的認證資訊或片段。
  • og:url —— 識別永久物件。同樣必須是絕對的 HTTP 或 HTTPS,不包含片段與認證資訊。

任何必要值若缺失,系統會阻擋輸出,而不是產生不完整的預覽區塊。通訊協定生態系允許更多的類型和屬性,但那些屬於專業化的實作範疇。有效的 Open Graph 區塊仍然無法保證任何貼文的實際呈現方式 —— 分享系統可能會裁切圖片、截斷文字、忽略欄位、選擇快取資料,或套用帳號層級的政策。應將平台除錯器(而非僅憑通訊協定規格)視為呈現的最終事實來源。

使用 Open Graph 產生器建立分享預覽中繼資料

產生器在瀏覽器中執行所有工作、於執行階段驗證輸入,並以固定順序回傳以屬性為基礎的 meta 區塊。請依照以下三個步驟來交付可運作的預覽。

  1. 輸入正確的物件文字、選擇 website 或 article,並提供不含片段的公開頁面與圖片 URL。瀏覽器的 URL 解析器會將其正規化;該工具不會擷取任一端點。不含片段的物件 URL 可避免同一資源的分享因客戶端錨點而分散,而拒絕認證資訊則可避免將使用者資訊複製到公開的中繼資料中。
  2. 產生必要與選用的 Open Graph 屬性,然後將僅含通訊協定的區塊複製到標準頁面的 head。產生器會先輸出四個必要屬性,接著輸出您提供的任何選用屬性 og:description、og:site_name 和 og:locale。選用文字會經過修剪、長度限制,若包含控制字元則會被拒絕,並針對 HTML 屬性進行跳處理。物件類型即使在表單使用 select 控制項的情況下,仍會在執行階段重新驗證,因此遭到竄改或程式化輸入也無法夾帶不支援的類型通過。
  3. 檢查部署後的原始碼,並使用每個目標平台目前的預覽除錯器來檢查爬取存取、圖片處理與快取重新整理。建立工具可能會重新排序、覆寫或新增衝突的屬性,因此部署後的 HTML head 才是標準的檢查依據。平台的爬蟲讀取過頁面一次後,即使中繼資料已變更,仍可能繼續提供較舊的快取預覽 —— 每個服務都會記載其自身的快取重新整理行為。

必要與選用屬性一覽

下表摘要說明產生器所輸出的內容、輸出順序,以及每個值的處理方式。所有屬性值都經過跳脫處理,所有 URL 都經過正規化,且四個必要屬性會出現在任何選用屬性之前。

屬性是否必要用途產生器行為
og:title是為分享物件命名經過修剪、長度限制、HTML 跳脫
og:type是為物件分類限制為 website 或 article;執行階段重新檢查
og:image是具代表性的圖片絕對 HTTP(S)、不含認證、不含片段;不會擷取
og:url是標準物件 URL絕對 HTTP(S)、不含認證、不含片段
og:description選用預覽摘要文字經過修剪、拒絕控制字元、HTML 跳
og:site_name選用為較大的網站命名經過修剪、長度限制、HTML 跳脫
og:locale選用language_TERRITORY(例如 en_US)保守的兩字母語言代碼加上兩字母地區代碼

地區設定驗證器刻意僅接受一個保守的兩字母語言與兩字母地區格式。其他地區設定與文字子標記需要此精簡表單之外的額外通訊協定屬性與編輯決策,因此產生器會拒絕任何更複雜的內容,而不是產生靜默錯誤的值。

驗證爬取存取、圖片處理與快取狀態

產生器無法驗證 HTTP 狀態、MIME 類型、圖片尺寸、位元組大小、長寬比、重新導向、robots 控制、認證或平台快取狀態。每個社群服務都會套用自身的圖片要求,而您在協定端通過的區塊,並不代表平台在另一端會如何呈現。請將分享預覽流程視為兩個階段:您部署的頁面,以及每個平台保留的快取。

在標準頁面的 head 中放入 meta 區塊後,請開啟每個目標平台目前的預覽除錯器,貼上頁面 URL,並要求重新擷取。將呈現的預覽與部署的原始碼進行比對 —— 標題、說明、圖片與 URL。若預覽仍顯示舊內容,代表平台已快取較早的版本;請查閱該服務有關快取重新整理行為的文件,並在支援的情況下觸發手動重新整理。若預覽為空白或不正確,最常見的原因包括爬蟲被阻、圖片回傳非 2xx 狀態、圖片 MIME 類型錯誤,或圖片未達平台的最小尺寸要求。協定區塊在建構上是正確的;平台預覽則是另一個獨立的驗證步。

導致預覽持續失效的常見錯誤

大多數預覽失敗來自於通過產生器驗證,但在真實爬蟲造訪真實頁面時卻失敗的輸入。請留意以下幾種情況:

  • URL 中含有片段或認證資訊。og:url 或 og:image 中的 #section 或 ?token=... 會被產生器正規化移除;若您繞過產生器手動撰寫 meta 標籤,片段就會留在裡面,破壞標準訊號。
  • 圖片無法被公開擷取。產生器僅驗證 URL 格式,不會實際擷取。需要登入、防範外部連結、robots 禁止或非 2xx 的圖片皆會通過表單驗證,但在平台爬蟲階段失敗。
  • 圖片尺寸或 MIME 類型錯誤。每個平台都有自己的最低要求。在協定端通過驗證的 og:image URL 並不代表符合平台對於位元組大小、長寬比或檔案格式的規則。
  • 快取過時。平台在中繼資料變更後,仍可能繼續顯示較舊的預覽。每個服務都有自己的重新整理週期與手動發方式。
  • 內容具誤導性。與可見頁面不符的標題、說明或圖片可能帶來點擊,卻讓訪客失望。請撰寫能反映頁面實際內容的中繼資料。

若您在發布頁面前打算透過 Graph API「取得 Page ID」,請先停下來:API 路徑是用於發文與管理,而 Open Graph 中繼資料路徑才是用於分享預覽。透過 Open Graph 產生器執行一次 —— 接著在每個目標平台進行除錯器檢查 —— 即可涵蓋 Page ID 查詢從未能解決的問題。若想更深入了解您是否根本不需要 API 權杖,請參閱Graph API 存取權杖取得指南。

若想深入了解,請參QR Code 產生器 API 替代方案:免設定、免額度。