主題

如何快取 OG 圖片

快取 OG 圖片意指從 CDN 提供先前產生的社交預覽(social preview),而非在每次分享時重新渲染。FastOG 會在邊緣(edge)快取相同的圖片長達一年——相同的 URL 會回傳已快取的 PNG,不會計入您的配額,且延遲幾乎為零,因此網站大部分的 OG 流量不會觸及渲染器。

為什麼快取很重要

社群分享會觸發平台爬蟲的抓取。如果每次分享都重新渲染,您會在相同內容上耗費配額與延遲。以圖片內容為鍵值的積極快取,能將「每次分享都算一次渲染」轉變為「第一次分享算一次渲染,其餘分享皆免費」。

讓它運作的内容鍵控模型

FastOG 使用內容簽名 URL:URL 是參數的純函數。相同的標題 + 範本 → 相同的 URL。這意味著:

  • FastOG 的邊緣節點會將圖片保存在該 URL 下。
  • 相同內容被分享 10,000 次 → 一次渲染、一次配額計數、9,999 次快取命中。
  • 變更內容 → 不同的 URL → 一次新的渲染。
GET /api/v1/og?title=Hello&template=default&key=...&s=...   → render (1 quota count), then
GET /api/v1/og?title=Hello&template=default&key=...&s=...   → cached (0 counts, instant)
GET /api/v1/og?title=Changed&template=default&key=...&s=... → render (1 quota count)

FastOG 的快取標頭

FastOG 對渲染後的圖片回傳 Cache-Control: public, max-age=31536000, immutable(一年)。封面圖會從 FastOG 的邊緣節點分兩層提供:位於 fastog.com 前方的渲染快取,以及其後方的持久化物件儲存。重複的請求不需重新渲染即可回應,而回應中的 X-FastOG-Worker-Cache 會標示是由哪一層回應(HIT、R2、MISS)。

由於持久化副本不依賴渲染服務,只要封面圖曾被擷取過至少一次,即使 FastOG 的渲染服務短暫不可用,仍會持續提供服務——服務中斷不會讓已產生的預覽圖變成空白。唯一需要渲染服務的情況是封面圖從未渲染過,此時 FastOG 會以圖片回應,而非錯誤訊息:

情境 爬蟲取得的內容
封面圖已渲染 從邊緣節點或持久化儲存取得封面圖
從未渲染,渲染服務正常 依需求即時渲染的封面圖
從未渲染,渲染服務短暫不可用 URL 中攜帶的頁面自身圖片(您的產品照片),或一張中性卡片——絕不會是錯誤頁面

如果請求本身無效(簽章遭竄改、缺少 title),您仍會收到對應的 4xx 狀態碼。

變更已發布的圖片

您變更的內容 處理方式
內容(標題、價格、照片) 無需處理:內容包含在 URL 中,因此新內容會產生新 URL,並自動呈現最新版本
範本或渲染預設值 更新快取清除版本號(FASTOG_CACHE_BUST),讓每個 URL 都帶上新的 v 參數
需要重新渲染同一個 URL 請聯絡支援團隊清除該特定 URL——精確 URL 清除功能未開放為公開端點

已分享的連結會持續正常運作,並繼續顯示原本承諾的圖片,除非您清除該特定 URL。

快取您自己的 og:image(自架)

如果您自行儲存圖片,而非使用 FastOG 的快取,請套用相同的規則:

步驟 詳細說明
快取鍵 = 內容雜湊 以資料的雜湊值儲存,而非可變的檔名
長 TTL 穩定內容使用 max-age=31536000, immutable
版本化 URL 內容變更時附加雜湊或版本
前置 CDN 讓 CDN 吸收重複的請求

常見問題

重複分享真的不會消耗渲染次數嗎?

是的。相同的 URL 會命中邊緣快取(edge cache),不會到達渲染器,因此不會消耗配額次數。

FastOG 會將圖片快取多久?

一年(immutable)。首次渲染後很長一段時間內,分享的卡片都會從快取提供。

如果我希望圖片更新(例如即時價格)該怎麼辦?

變更參數(價格)→ 產生新的 URL → 進行新的渲染。穩定的內容會持續留在快取中;動態內容則可在您需要時更新。

免費試用 — 無需註冊

在幾秒內預覽和測試動態 OG 圖片。

開啟免費 OG 圖片測試器

A BeCaSimulations site