為什么要做两套入口的交叉核對
Sitemap 和内鏈是搜尋蜘蛛發現 URL 的两條主要路径。前者是站点主動声明的清單,後者是蜘蛛顺着連結爬出来的實际路径。日常运营中常见的情况是:Sitemap 里的 URL 早就随改版删掉了,内鏈里却還有一批頁面從未進入過 Sitemap,两邊各说各话。只看其中一份資料,很容易得出“入口很全”或“抓取很少”的错誤结论。
交叉核對的目的是找出几份清單之間的差集,判断每個差集属于正常現象,還是需要處理的入口問题。
三份資料從哪来
- Sitemap 清單:线上 Sitemap 文件(含索引文件展開後的全部 URL)去重後的集合。
- 内鏈可達集:從首頁出發、按站内連結逐层抓取,得到的返回 200 的 URL 集合。多數站内爬虫工具都能導出。
- 實际抓取集:服務器訪問日誌中搜尋蜘蛛 UA 訪問過的 URL 集合。注意日誌要覆盖足够長的周期,並做好 URL 归一化,去掉片段标识與追踪參數、统一大小寫。
三份資料的時間窗口要尽量對齐。拿上個月的内鏈抓取结果去比對本周的 Sitemap,差集里會混入大量改版噪声。
四類差集的解讀
只在 Sitemap 中、内鏈不可達
這是最需要優先看的一類。可能是頁面已刪除、被 robots 拦截,或者根本没在任何頁面里出現,也就是常说的孤岛頁。如果 URL 本身還返回 200 且有内容,說明入口断了,應补内鏈;如果已经返回 404 或 410,應從 Sitemap 中移除,避免持續占用抓取配額。
只在内鏈中、不在 Sitemap 里
不一定有問题,但值得分類。分頁、标簽聚合、篩選结果這類頁面通常不需要進 Sitemap;而文章詳情、产品頁如果長期不在 Sitemap 中,可能說明生成逻辑有遗漏。
只在日誌中、两邊都没有
常见来源是外部連結、舊版 URL、參數拼接頁。重点看這類 URL 是否返回 200 且有獨立内容:有的话就是真實入口缺口;返回 404 或重定向的,属于歷史噪音,观察即可。
业務期望有、三份都没有
真正的内容缺口。多半是發布流程里漏了推送,或者頁面只通過 JavaScript 渲染出連結,静態 HTML 里看不到。
核對流程
- 導出 Sitemap URL 清單,展開索引並去重。
- 跑一次站内爬虫,導出狀態碼為 200 的可達 URL。
- 從服務器日誌中提取搜尋蜘蛛訪問過的 URL,按周期切片。
- 统一 URL 格式後做集合运算,得到四個差集。
- 按是否返回 200 且有獨立内容给差集打标,区分待修复與可忽略。
- 修复後记錄日期,在下一次核對时观察差集是否收敛。
几個容易誤判的点
- 归一化不做干净:结尾斜杠、大小寫、URL 编碼、追踪參數會让同一個頁面被算成多個 URL,差集立刻膨胀。
- 日誌不完整:CDN 或反向代理只保留了部分日誌,抓取集會偏小,容易誤判成没有被抓取。
- 把 Sitemap 当补漏工具:Sitemap 只能声明入口,不能替代内鏈。孤岛頁即使出現在 Sitemap 中,後續被發現和被重新訪問的机會通常也不理想。
- 只做一次性核對:入口問题會随改版、發布、下架反复出現,按季度或半年做定期核對更實际。
和抓取观察配合使用
差集核對解决的是入口有没有,抓取日誌與狀態碼分布解决的是抓得怎么样。两者结合,才能判断是该补入口、清入口,還是该調整服務器响應。核對结果建议同步给内容發布和前端同学,避免同样的缺口在下一次改版里重复出現。