如何快取 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 → 進行新的渲染。穩定的內容會持續留在快取中;動態內容則可在您需要時更新。