事情本身不复杂,线索都在日志里。上线当天用预热脚本把两千条新地址推到了 CDN,其中包含一批模板默认带 noindex 的草稿页。后来这些页面改成正式发布,源站已经是 index,但节点上还是三天前的副本,GSC 里一直显示被 noindex 排除。

第一反应是「缓存键带 cookie 变体,purge 只清掉了其中一个变体」,验证下来不成立。

原因不止一个,得分开看。预热脚本只按 URL 列表推送,不检查页面的 robots 状态。另一种情况是页面缓存 TTL 设成了七天,改状态后不会自动回源。

不容易想到的是,回源时命中了 304,边缘认为内容没变,继续用旧响应。

动手时先确认边缘返回的页面里 robots 是什么

curl -s https://www.example.com/p/1024 | grep -o '<meta name="robots"[^>]*>'

然后按 URL 逐个清理而不是整站刷新

curl -X PURGE https://www.example.com/p/1024

预热脚本里加一道 robots 过滤,只推可索引页面

grep -rn 'preheat' deploy/ | head

剩下的就是把 HTML 的 TTL 降到十分钟,靠回源验证新鲜度

proxy_cache_valid 200 10m;

改完先别撤,确认这几项。同一地址在节点和源站返回的 robots 标签一致,索引报告里的 noindex 排除数一周内归零。

容易忽略的是,预热是为了让用户更快拿到内容,不是为了让搜索引擎更快收录,把不可索引的页面也推上去只会帮倒忙。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189