最後核對:2026 年 10 月。

大多數靜態導出工具都放棄了 WooCommerce,理由也很合理:商店隨時在變。價格會打折、庫存會賣完,每位訪客還有自己的購物車。但是把顧客帶進來的頁面——商品頁、分類頁和你的內容——對每個人都一樣。這些可以靜態化;屬於個人或交易的部分則留在 WordPress。

為什麼商店很難靜態化

  • 價格和庫存會變,導出後被凍結的頁面可能顯示錯誤價格,或賣出已經缺貨的商品。
  • 購物車屬於單一訪客。WooCommerce 用 cookie 辨識的 session 來保存它。
  • 結帳要收款並和金流服務溝通,這些都必須連到 WordPress。
  • 我的帳戶顯示登入顧客自己的訂單。

哪些可以靜態、哪些必須動態

頁面或動作能靜態嗎?做法
商品頁可以用靜態 HTML 求速度與 SEO,再即時載入價格與庫存
商店與分類頁可以同商品頁
部落格、指南、著陸頁可以一般靜態頁
加入購物車不行必須送到 WordPress,商品才會進到訪客的購物車
購物車、結帳、我的帳戶不行一律由 WordPress 提供
金流服務的回呼不行必須直接連到 WordPress

用靜態頁經營商店的三種做法

  1. 商店保持動態。只導出內容,不導出商品。最簡單——在 Pinery Static 裡不勾選 product 類型即可——但商品頁享受不到速度上的好處。
  2. 靜態商品頁+即時資料。導出商品和商店頁,在瀏覽器裡從 WooCommerce 更新價格與庫存,購物車和結帳留在 WordPress。Pinery Static Pro 就是這樣做的。
  3. 改成 headless。用 JavaScript 框架在 WooCommerce API 之上重做整個前台。最有彈性,也最費工。

Pinery Static Pro 如何讓商店照常運作

  • 商品頁和商店頁導出成靜態 HTML,價格和庫存是導出當下的狀態。
  • 訪客打開頁面時,一段小腳本會向 WooCommerce Store API(/wp-json/wc/store/v1,公開、不需驗證的 API)查詢目前的價格與庫存,替換掉導出時的數值。缺貨商品的按鈕會被停用。
  • 加入購物車的表單和 ?add-to-cart 連結直接指向 WordPress,商品會進到 /cart/ 和 /checkout/ 顯示的那個正常 WooCommerce 購物車。
  • 購物車、結帳和帳戶頁預設不導出,由 WordPress 提供。
  • 在你的網域上使用內建的 Worker 路由時,?add-to-cart、wc-ajax 請求和所有表單送出都會轉給 WordPress;靜態站裡沒有的頁面——包括上次部署後新增的商品——也會交給 WordPress,而不是回傳 404。

為什麼商店最好用同一個網域

WooCommerce 的購物車存在由你 WordPress 網域設定的 cookie 裡。如果靜態頁在 example.com、WordPress 在 wp.example.com,顧客走到購物車時就會換網址,兩邊之間的連結也必須處處正確。讓兩者共用同一個網域的路由可以避免這個問題:靜態頁、購物車和結帳都在同一個網址、同一個 cookie 下。

測試清單

  • 在 WordPress 修改價格,確認靜態商品頁不用重新導出就顯示新價格。
  • 把商品設為缺貨,確認按鈕被停用。
  • 從靜態頁加入購物車,再打開購物車並結帳。
  • 在購物車套用優惠券。
  • 做一筆測試付款,確認訂單狀態有更新,證明金流服務連得到 WordPress。
  • 確認購物車、結帳和帳戶頁不會被 CDN 快取。

常見問題

WooCommerce 商店能完全靜態化嗎?

不能。購物車、結帳和帳戶頁因人而異,必須由 WordPress 提供。商品、分類和內容頁可以靜態化。

顧客會看到過時的價格嗎?

有即時更新就不會:頁面載入時,導出的價格會被替換成目前的價格。購物車和結帳一律在 WordPress 計算價格,所以實際收費永遠是最新的。

Simply Static 支援 WooCommerce 嗎?

它自己的 FAQ 表示商店、結帳和會員登入區不適合靜態網站。Pinery Static Pro 則是專門設計來讓它們和靜態商品頁一起運作。

靜態化的商店對 SEO 有幫助嗎?

商品頁和分類頁載入更快,主題或 SEO 插件輸出的商品結構化資料也會保留在導出的 HTML 裡。

資料來源