Google Ads 品質分數卡在 3,查到最後是到達頁沒吃到快取
整理日期:2026-07-15
一個服務業網站,所有 Google Ads 廣告都導到同一個到達頁。品質分數長期卡在 3,實付的單次點擊偏高,等於有一部分預算一直花在貴的點擊上。
打開品質分數的細項看,線索很明顯:最花錢的那批通用字,「到達網頁體驗」全部低於平均;「廣告關聯性」反而高於平均。
這個組合會說話:不是文案問題,是頁面本身。而且所有廣告都指向同一頁——修好這一頁,所有關鍵字一起受惠。
實測這一頁:伺服器回應(TTFB)0.84 秒。每個點廣告進來的人,都要先白等這 0.84 秒。
先拆成幾層看
Section titled “先拆成幾層看”第一個反射動作通常是「WordPress 太慢、主機太爛」。這次不是。
看回應標頭(header)就能拆開:
- 標頭裡有
x-cache-age——主機端的快取(CLP Varnish)其實有在工作,HTML 不是每次重新產生。主機沒有慢。 - 但 WordPress 同時送出
cache-control: no-store——等於告訴 Cloudflare「這頁不要存」。Cloudflare 就真的不存(cf-cache-status顯示 DYNAMIC)。
結果就是:每一次廣告點擊,Cloudflare 都要從離訪客最近的節點,繞回主機重抓一次 HTML。那 0.84 秒幾乎全花在這趟來回。不是主機慢,是「每次都回主機」這件事慢。
那個 no-store 是哪來的?站上同時開著兩個快取外掛(CLP Varnish + WP-Optimize)。兩套設定互相打架,是這種標頭最常見的來源。
另外一半的問題是前端資源太重:字型載了六種字重(設計實際用不到那麼多)、腳本從外部網域阻塞載入。圖片反而沒問題。這一半這次先不動,屬於下一階段。
這次怎麼處理
Section titled “這次怎麼處理”在 Cloudflare 加一條快取規則(Cache Rule),只圈這一個到達頁,不動全站,隨時可以停用回滾。三個設定,缺一個就白做:
- 匹配網址用萬用字元收尾:
https://你的網域/到達頁路徑/*。結尾那個*,是讓帶參數的廣告網址也對得上。 - 邊緣 TTL 選「忽略 cache-control 標頭並使用此 TTL」,設 2 小時。這步是關鍵——WordPress 在送 no-store,不蓋掉它的話,規則加了 Cloudflare 還是不存。
- 快取索引鍵打開「忽略查詢字串」。這是最容易漏的一步。每個廣告點擊帶的 gclid 都不一樣,不忽略的話,Cloudflare 會把每個點擊當成不同網址、每次都未命中——對真正要救的廣告流量完全沒效。開了之後,所有
?gclid=…共用同一份快取。
(快取索引鍵裡「指定包含/排除特定參數」是付費功能,這裡用不到——免費的「忽略查詢字串」開關就夠。)
廣告追蹤不受影響:gclid 是頁面上的程式在瀏覽器裡從網址列讀的。Cloudflare 發同一份 HTML 給大家,不會改到每個人的網址列,GA4、GTM 都照常運作。
維運提醒:之後改這頁的內容,記得回 Cloudflare 對這個網址清一次快取。忘了也最多舊 2 小時。
改完後實測同一頁:
| 改之前 | 改之後 | |
|---|---|---|
| cf-cache-status | DYNAMIC(不快取) | HIT |
| TTFB | 0.84 秒 | 0.04 秒 |
帶 gclid 的網址也回 HIT——代表「忽略查詢字串」有生效,廣告流量真的吃到快取了。
品質分數不會馬上動。Google 要重新爬、再累積一兩週的流量,才會重評到達網頁體驗。所以規則做完先別急著下結論,排一個兩週後回頭看分數的行程。
下次遇到先整理什麼
Section titled “下次遇到先整理什麼”- 品質分數的三個細項(預期點閱率/廣告關聯性/到達網頁體驗),哪一項低於平均。
- 到達頁的回應標頭:
cf-cache-status是 HIT 還是 DYNAMIC、cache-control有沒有 no-store、有沒有主機端快取的痕跡。 - 站上開了幾個快取外掛。
- 廣告網址帶哪些參數——gclid 這種每次都不同的,就是快取未命中的元兇候選。
TTFB 慢,先確認是不是「邊緣沒快取、每次回主機」,再去怪程式或資料庫。標頭一看就知道。
自己顧的話,照上面的順序查一次。要找人看的話,先把這四項整理好再問,會快很多。