问题出现得很突然,日志倒是留得挺全。站点有五个 CDN 边缘节点,抽查同一篇文章,两个节点返回改版后的 HTML,三个还是旧版,蜘蛛每次抓到的 canonical 都不一样。

刚开始盯着「发布时切换了回源目录,部分节点仍指向旧目录」,折腾了半个多小时,排掉了。

排查方向其实有限,先把可能性排一排。发布时只预热了部分节点,剩余节点缓存没有过期。少数情况下是缓存键忽略了 cookie,旧版本一直命中。

不容易想到的是,HTML 没有版本号,无法判断节点上是哪一版。

先抽查多个节点的返回内容

for i in 1..5 { curl -s -H "X-Debug-Node: node$i" https://www.example.com/post-1/ | Select-String canonical }

再往下对全节点提交刷新

curl -X POST "https://api.cdn.com/purge" -H "Content-Type: application/json" -d '{"urls":["https://www.example.com/post-1/"]}'

给 HTML 加版本标记

echo '<meta name="build" content="20261113-1">';

复核各节点版本是否一致

curl -s https://www.example.com/post-1/ | Select-String build

别只看报错消失,验证要多做一步。所有节点返回的 build 版本一致,canonical 指向相同,蜘蛛抓取不再出现两个版本。

提醒一点。发布流程里要把清缓存和预热做成一步,只清源站等于没清。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189