蜘蛛池入口頁最容易踩的一個坑,不是連結寫错了,而是連結改對了、搜尋蜘蛛却還是按老版本抓。表現通常是:你在入口頁新增或替換了一批目标 URL,過一段時間去看日誌,搜尋蜘蛛訪問的仍然是几天前甚至更早的那批連結。這種时候不要急着怀疑蜘蛛池本身失效,先把缓存這一层排掉。
一、怎么確認是缓存而不是別的
判断方法很简單:同一时刻對同一個入口頁 URL 發几次請求,比較返回的 HTML 内容是否一致,再和源站直连的结果對比。如果源站已经更新,走域名訪問拿到的還是舊 HTML,基本可以确定是 CDN、反向代理或對象存储缓存层在起作用。
看响應头
- Age:大于 0 說明這份响應来自缓存,數值是它在缓存里待了多少秒。
- X-Cache、CF-Cache-Status、X-Cache-Status 一類的字段:HIT 表示命中缓存,MISS 表示回源。
- Cache-Control、Expires:决定缓存能存活多久,也就是你更新後要等多久才生效。
- Last-Modified、ETag:和源站對比是否一致,能看出這份 HTML 到底是哪個版本。
換 UA 再测一次
有些缓存配置會把搜尋引擎 UA 單獨分流。用普通浏览器 UA 和常见的搜尋蜘蛛 UA 各請求一次,看返回内容和缓存狀態是否相同。如果两者不同,說明缓存規則里有按 UA 分版本的處理,這一层要單獨查。
二、缓存為什么會把舊連結繼續喂给搜尋蜘蛛
常见原因有三個。一是缓存键只看 URL,不看内容版本,只要 TTL 没到期就一直返回舊 HTML;二是回源失敗时啟用了“過期内容繼續提供”的策略,源站明明已经更新,缓存却因為回源超时把舊副本又吐了出去;三是多台邊缘节点各自缓存,你只刷新了其中一台,其他节点還在用舊副本。
對搜尋蜘蛛来说,後果不是“抓不到”,而是“抓到的是已经不存在的連結”。舊 URL 如果已经下掉,蜘蛛跟過去就是 404 或 410,等于把有限的抓取額度花在了废連結上,新連結的發現時間則被整体推後。
入口頁這類頁面更新频繁,通常不适合設定長缓存。把它当成需要即时生效的頁面来配置,比事後反复清缓存省事得多。
三、按這個顺序處理
- 先清缓存,刷新全部邊缘节点,不要只刷一台。
- 確認源站返回的已经是新 HTML,再去看缓存层是否同步。
- 检查缓存規則里 HTML 的 TTL。入口頁建议用較短的缓存時間,或者對 HTML 直接不缓存。
- 確認回源失敗时的兜底策略,關掉長期提供過期副本的選項。
- 更新完成後重新對入口頁發起一次抓取請求,看响應头里的缓存狀態和内容版本。
四、改配置时不要踩的两個坑
- 不要為了搜尋蜘蛛單獨返回一份不一样的内容。按 UA 给蜘蛛定制頁面容易被判定為作弊,而且一旦風控命中,损失比缓存舊連結大得多。
- 不要给 HTML 加上很長的 Cache-Control: max-age。搜尋蜘蛛會參考缓存头来决定多久之後再来,長缓存等于主動让它晚点回訪。
五、長期怎么减少這類問题
把入口頁和静態资源分開配置缓存策略:图片、CSS、JS 可以長期缓存,HTML 尽量短缓存或不缓存。每次批量更新連結之後,顺手做一次缓存刷新,並记錄目前時間,方便之後對照蜘蛛訪問日誌里的内容版本。如果入口頁是程序化生成、更新频率很高,可以從一開始就不走缓存,用性能換准确性,對抓取發現来说通常更划算。
最後提醒一句,缓存排查只能保證搜尋蜘蛛看到的是最新内容,不能保證它一定抓取或收錄。它解决的是“蜘蛛来了却看到舊頁面”這類問题,剩下的還是取决于入口頁本身的可抓取性和目标頁的质量。