WordPress 改了卻看不到:Cloudways 的 Varnish 和 WP Rocket 兩層快取
WordPress 改了訪客卻看不到?Cloudways Varnish 和 WP Rocket 是兩層快取,只清一層不夠。依官方文件整理各層怎麼清、怎麼從回應標頭判斷是哪一層給的頁面,附部署後檢查清單。
本文目錄
- 1.2026 年 10 月 10 日:清了 WP Rocket,訪客還是看到舊版
- 2.一個頁面請求會經過哪幾層快取
- 3.WP Rocket 快取了什麼、怎麼清
- 3.1WP Rocket 存了什麼
- 3.2什麼時候會自動清
- 3.3手動清:後台按鈕或 WP-CLI
- 4.Cloudways 的 Varnish 是什麼、怎麼清
- 4.1預設開啟,不會自己發現內容變了
- 4.2在 Cloudways 後台清
- 4.3WP Rocket 的 Varnish 外掛,什麼情況會清不到
- 5.Cloudflare 那一層:預設不快取 HTML
- 6.怎麼判斷頁面是哪一層給的
- 6.1先看 cf-cache-status
- 6.2再看 age
- 6.3WP Rocket 那一層
- 7.部署後的清快取檢查清單
- 常見問題
2026 年 10 月 10 日,Claude Code 幫我改了 Jason Career 的網站,部署也完成了,訪客看到的卻還是舊版。Jason Career 是架在 Cloudways 上的 WordPress,裝了 WP Rocket,清掉 WP Rocket 的快取之後還是沒變:Cloudways 主機層的 Varnish 也存著一份舊頁面,要另外清。
先說結論:Cloudways Varnish 和 WP Rocket 是兩層不同的快取,只清一層不夠。從那天起,Jason Career 每次部署都兩層一起清,這條規則也寫進了 Claude 的長期記憶。網站前面還有 Cloudflare,它預設不快取 HTML,但如果開了快取規則,就是第三層。下面依官方文件整理每一層存了什麼、怎麼清、怎麼從回應標頭看出頁面是哪一層給的,最後附我現在用的檢查清單。
本文是我自己網站的維運紀錄,加上 2026 年 10 月 17 日查閱的 Cloudways、WP Rocket、Cloudflare 官方文件整理。各家的介面、預設值和指令可能改變,操作前請以官方文件為準。
2026 年 10 月 10 日:清了 WP Rocket,訪客還是看到舊版
Jason Career 由 Claude Code 維運:它透過 SSH 連到 Cloudways 主機,用 WordPress 的命令列工具 WP-CLI 修改網站(整套做法見〈看不懂 SSH 也能維運 WordPress〉)。主機、外掛和佈景主題的組合,見〈WordPress 電商課程網站怎麼搭〉。
那天的經過很單純:變更做完、WP Rocket 的快取也清了,訪客端還是舊頁面。另外清掉 Cloudways 主機層的 Varnish 之後,變更才出現。處理方式有兩件:
- 之後每次部署,WP Rocket 和 Varnish 兩層一起清。
- 把這條規則寫進 Claude 的長期記憶,下次換一個工作階段也不會漏掉。
為什麼 WP Rocket 沒有順手清掉 Varnish?當時的紀錄只寫了處理方式,沒有記下原因。WP Rocket 的官方文件列了兩種會清不到 Varnish 的情況,下面「Cloudways 的 Varnish」一節會說明。
一個頁面請求會經過哪幾層快取
訪客打開 Jason Career 的一篇文章,請求會依序經過下面幾層。外層有存著頁面就直接回傳,裡面的層不會被問到。
| 層 | 在哪裡 | 存什麼 | 誰負責清 |
|---|---|---|---|
| Cloudflare | 網站前面的 CDN(回應標頭有 server: cloudflare) |
預設是圖片、CSS、JS 等靜態檔案,預設不快取 HTML | Cloudflare 後台或 API |
| Varnish | Cloudways 主機層 | 整頁的回應 | Cloudways 後台、API,或 WordPress 外掛發出清除請求 |
| WP Rocket | WordPress 外掛 | 每個頁面存成靜態 HTML 檔,加上壓縮後的 CSS、JS | WP Rocket 後台、WP-CLI,或編輯文章時自動清 |
Cloudflare 預設不快取 HTML,出自 Cloudflare 的預設快取行為文件。Jason Career 實際在 Cloudflare 開了哪些快取規則,我還沒有整理,所以這篇不假設它有或沒有快取 HTML,檢查方法放在後面。
WP Rocket 快取了什麼、怎麼清
WP Rocket 存了什麼
依 WP Rocket 的頁面快取文件(2025 年 4 月 29 日更新),頁面快取預設開啟,會把每個頁面存成靜態 HTML 檔,放在 /cache/wp-rocket/你的網域/ 底下,例如 index-https.html。訪客來的時候,主機直接回傳這個檔案,不用再跑 PHP 和查資料庫。
另一篇文件(2026 年 6 月 24 日更新)列出 WP Rocket 的其他快取位置,例如壓縮後的 CSS、JS 放在 /cache/min/。快取有存活時間,官方說明寫的預設值是 10 小時。
什麼時候會自動清
WP Rocket 文件(2026 年 6 月 24 日更新)寫的是:發佈或編輯一篇文章、頁面時,會清掉這篇的快取、首頁,以及分類彙整等相關頁面。
這個時機是「編輯文章」。像改 Code Snippets 裡的自訂程式、改全站 CSS 這類不是編輯文章的變更,文件沒有說會自動清。Jason Career 的客製化都放在這類外掛裡,所以部署後要自己清。
手動清:後台按鈕或 WP-CLI
- 後台:WP Rocket 的「Clear and preload cache」(清除並預載快取)。
- WP-CLI:WP Rocket 有一個 WP-CLI 擴充套件,官方文件(2025 年 11 月 25 日更新)的安裝與清除指令如下:
# 安裝 WP Rocket 的 WP-CLI 擴充
wp package install wp-media/wp-rocket-cli:trunk
# 清除整站快取,不詢問確認
wp rocket clean --confirm
# 只清一個網址
wp rocket clean --permalink=<網址>
同一份文件特別寫了:這個指令不會清 Varnish 的快取。用 WP-CLI 部署的人,清完 WP Rocket 還要另外處理 Varnish。
Cloudways 的 Varnish 是什麼、怎麼清
預設開啟,不會自己發現內容變了
Varnish 是擋在網站前面的快取伺服器。Cloudways 官方部落格(2025 年 9 月 26 日更新)說 Cloudways 上的 Varnish 預設開啟,常見的架法是每個請求都先經過 Varnish。
Cloudways 說明中心的 Breeze 文件說,沒有 Breeze 或類似的外掛通知它,Varnish 不會自己發現網站內容變了,會繼續給舊內容,直到存活時間(TTL,預設 4 小時)到期,或有人手動清除。Breeze 是 Cloudways 自己的快取外掛;Jason Career 用的是 WP Rocket。
在 Cloudways 後台清
Cloudways 官方部落格的步驟(2023 年 11 月 8 日更新):
- 登入 Cloudways 平台,進入伺服器。
- 打開「Manage Services」。
- 在 Varnish 那一列按「Purge」。
同一篇也介紹了用 Cloudways API 清 Varnish(POST /service/varnish,action 填 purge),需要先在平台產生 API 金鑰。金鑰屬於機密,不要放進 Git 或貼到對話裡。
WP Rocket 的 Varnish 外掛,什麼情況會清不到
WP Rocket 的 Varnish 文件(2026 年 1 月 14 日更新)說,在 Cloudways 上它會偵測主機環境、自動啟用 Varnish 外掛,清 WP Rocket 快取時一併清 Varnish。照這樣說,清一次就夠了。實際上文件另外寫了兩個例外:
| 情況 | 官方文件怎麼說 |
|---|---|
用 WP-CLI 的 wp rocket clean 清 |
指令文件:不會清 Varnish |
| 網站前面有 Cloudflare 這類代理 | 代理文件(2023 年 8 月 14 日更新):代理可能讓 Varnish 清不掉;有用 WP Rocket 的 Cloudflare 外掛時會自動處理,沒有的話要裝官方提供的輔助外掛 |
Jason Career 兩個條件都有:Claude Code 用 WP-CLI 操作,網站前面也有 Cloudflare。10 月 10 日是哪一個造成的,紀錄裡沒有寫,我也不在這裡猜。不管原因是哪一個,部署後另外清 Varnish 都能避開。
Cloudflare 那一層:預設不快取 HTML
Cloudflare 文件寫明 CDN 預設不快取 HTML 和 JSON,預設快取的是 CSS、JS、圖片、字型等副檔名。所以只改了文章內容時,問題通常不在 Cloudflare;改了 CSS 或 JS 檔,就可能是 Cloudflare 還存著舊檔案。
如果你在 Cloudflare 開了快取 HTML 的規則,或改的是靜態檔案,就要清 Cloudflare。依 Cloudflare 的清除快取文件,免費方案也能用網址、主機名稱、標籤、前綴清除,或整個網域全部清除,官方建議優先用網址清除。依網址清除的步驟:
- 在 Cloudflare 後台進入網域的「Configuration」頁面。
- 在「Purge Cache」選「Custom Purge」。
- 「Purge by」選「URL」,貼上要清的網址(路徑區分大小寫)。
- 確認後按「Purge」。
有用 WP Rocket 的 Cloudflare 外掛時,WP Rocket 文件(2026 年 6 月 11 日更新)說它通常會和 WP Rocket 的快取同步清除。但如果用的是 Cloudways 提供的 Cloudflare Enterprise,Cloudways 不提供 API 金鑰和 zone ID,WP Rocket 無法同步,要自己清 Cloudflare。
怎麼判斷頁面是哪一層給的
清完快取,最直接的確認方式是看回應標頭。步驟:
- 用無痕視窗打開要檢查的頁面,避免登入狀態和瀏覽器自己的快取干擾。
- 打開開發者工具,切到「Network」分頁,重新整理。
- 點第一個請求(頁面本身),看「Response Headers」。
先看 cf-cache-status
Cloudflare 的快取狀態文件列出 cf-cache-status 的意思:
| 值 | 意思 |
|---|---|
HIT |
在 Cloudflare 的快取裡找到 |
MISS |
可以快取,但當時快取裡沒有,向原始主機拿 |
EXPIRED |
快取裡有,但已過期,改從原始主機拿 |
DYNAMIC |
Cloudflare 判斷這個資源不快取,直接轉給原始主機 |
BYPASS |
原本可以快取,但原始主機的回應不能快取 |
是 HIT,表示這次的頁面來自 Cloudflare,後面的 Varnish 和 WP Rocket 都沒被問到,要清的是 Cloudflare。HTML 頁面在預設設定下通常會看到 DYNAMIC,代表請求有送到 Cloudways。另外,Cloudflare 文件也提醒,清除請求回傳成功不代表內容真的被移除了,要看清除後 cf-cache-status 不再是 HIT。
再看 age
cf-cache-status 不是 HIT 時,再看 age。WP Rocket 的文件說,在 Varnish 環境下,age 是這份頁面在 Varnish 快取裡存了幾秒,清掉 Varnish 之後會歸零。清完重新整理,age 還是很大的數字,就是 Varnish 沒清到。
我沒有在 Cloudways 官方文件裡找到其他可以辨識 Varnish 的標頭名稱,所以這裡只用 WP Rocket 文件寫到的 age 判斷。
WP Rocket 那一層
WP Rocket 的頁面快取是主機上的檔案。官方文件的檢查方式是看 /cache/wp-rocket/你的網域/ 資料夾:清除後對應頁面的檔案會不見,有人造訪或預載之後才重新產生。
部署後的清快取檢查清單
Jason Career 現在每次部署都清 WP Rocket 和 Varnish 兩層。把官方文件的資訊加進去,完整的順序是由內往外清:外層的快取被清掉後,會回頭向內層拿頁面,內層如果還是舊的,外層又會存回舊版。
| 順序 | 做什麼 | 怎麼做 |
|---|---|---|
| 1 | 確認這次改了哪些頁面或檔案 | 文章內容、自訂程式、CSS、JS 分開記 |
| 2 | 清 WP Rocket | 後台「Clear and preload cache」,或 wp rocket clean --confirm |
| 3 | 清 Cloudways 的 Varnish | 平台 Manage Services 的 Varnish「Purge」,或 Cloudways API;用 wp rocket clean 時一定要做這步 |
| 4 | 視情況清 Cloudflare | Cloudflare 有快取 HTML,或改了 CSS、JS 時,用 Custom Purge 依網址清 |
| 5 | 用無痕視窗確認 | cf-cache-status 不是 HIT、age 歸零或很小,畫面已經是新版 |
| 6 | 把規則寫進 AI 的工作規則 | 讓下一個工作階段也照這個順序做 |
第 6 步是 10 月 10 日之後加的:兩層一起清的規則寫進了 Claude 的長期記憶,換一個工作階段部署,也會照同樣的順序做。我怎麼限制 AI 在正式網站上的權限,見〈看不懂 SSH 也能維運 WordPress〉;更多文章在 AI 創業主題頁。
常見問題
為什麼清了 WP Rocket 快取,WordPress 網站還是沒變?
Cloudways 主機層還有一層 Varnish 快取。Jason Career 在 2026 年 10 月 10 日就遇過:只清 WP Rocket 不夠,要另外清 Varnish,訪客才看得到變更。之後每次部署都兩層一起清。
WP Rocket 不是會自動清 Cloudways 的 Varnish 嗎?
WP Rocket 官方文件說,在 Cloudways 上它會自動啟用 Varnish 外掛,清自己的快取時一併清 Varnish。但文件也寫了兩個例外:WP-CLI 的 wp rocket clean 指令不會清 Varnish;網站前面有 Cloudflare 這類代理時,Varnish 可能清不掉。
Cloudways 的 Varnish 快取要在哪裡清?
Cloudways 官方部落格的做法是在平台後台進入伺服器的 Manage Services,按 Varnish 那一列的 Purge。Cloudways 也有 API 可以清 Varnish。
Cloudflare 會快取 WordPress 的 HTML 頁面嗎?
Cloudflare 官方文件說,CDN 預設不快取 HTML。除非另外設定了快取規則,否則文章頁面通常不會被 Cloudflare 存著。要確認可以看回應標頭的 cf-cache-status,是 HIT 才代表頁面來自 Cloudflare 的快取。
怎麼知道訪客看到的頁面是哪一層快取給的?
用無痕視窗打開頁面,在瀏覽器開發者工具的 Network 分頁看第一個請求的回應標頭。cf-cache-status 是 HIT 代表來自 Cloudflare;不是 HIT 時再看 age,WP Rocket 文件說它是 Varnish 快取的秒數,清掉 Varnish 後會歸零。
部署 WordPress 變更後要清哪些快取?
由內往外清:先清 WP Rocket,再清 Cloudways 的 Varnish;如果 Cloudflare 有快取 HTML,最後清 Cloudflare。清完用無痕視窗和回應標頭確認,再把這個順序寫進部署流程。
延伸閱讀
- 一個人用 AI 潤稿多語系網站:我怎麼讓 Claude Code 檢查 271 個檔案AI 潤稿實例:Jason Finance 用 Claude Code 和自訂潤稿 skill 重跑 271 個四語檔案,先試 5 篇再全站分 10 批,改了 178 個檔案,再用腳本確認標題、連結和數字沒變。
- WordPress 電商課程網站怎麼搭:一個人經營 Jason Career 的 Cloudways、Flatsome 架構WordPress 電商課程網站的實際架構:Jason Career 用 Cloudways、Cloudflare、Flatsome、WooCommerce 與 LearnDash,65 個外掛依用途分組,由 Claude Code 透過 SSH 維運。
- 嵌入 X 貼文不載入 X 的腳本:把社群貼文做成網站上的靜態卡片,處理備份、隱私與刪文嵌入 X 貼文的另一種做法:Jason Finance 不用官方 widgets.js,改成自己存檔的截圖、作者、時間與原文連結做成靜態卡片,貼文被刪也看得到。附存檔方式與著作權處理。

留言
使用 Google 登入即可留言。留言「不會」使用您的 Google 頭像或姓名,對外顯示的暱稱是系統隨機產生的代號,以保護您的隱私。
登入即表示你同意本站的隱私權政策。