在蜘蛛池的執行鏈路里,sitemap 常常被当成一個提交完就不管的動作。實际上它是蜘蛛發現 URL 最省力的通道之一:不用沿着一层层連結爬行,蜘蛛可以直接拿到一份清單。用得好,入口頁能更快進入抓取队列;用得随意,它反而會消耗蜘蛛對站点的信任。
sitemap 解决的是發現,不是收錄
先把邊界说清楚。sitemap 只负责告诉蜘蛛這里有這些 URL,它不保證抓取,更不保證收錄。把 sitemap 当成收錄開關,是最常见的期待错位。判断它是否起作用,應该看蜘蛛的發現量和抓取轉化有没有變化,而不是盯着索引量。索引结果由頁面质量、站点整体环境、竞争情况共同决定,單一入口文件改變不了這些。
一份能被顺利讀取的 sitemap
- 只放返回 200 的規范 URL,重定向、404、410 以及各種參數變体都不要寫進去
- URL 使用绝對地址,包含协议和域名,不要寫相對路径
- 數量超過單文件上限就拆成多個 sitemap,再用 sitemap index 匯總
- 文件体积過大时啟用 gzip,减少蜘蛛的下载開销
- 在 robots.txt 里用 Sitemap 指令声明地址,文件尽量放在根目錄方便定位
- 编碼统一為 UTF-8,特殊字符按 XML 規則轉义
這些细节看起来琐碎,但直接决定蜘蛛能否把清單完整讀下来。一份解析失敗或者半途中断的 sitemap,比没有 sitemap 更糟。
lastmod 要诚實
lastmod 是最容易被滥用的字段。每次生成 sitemap 就把全部 URL 的 lastmod 刷成目前時間,表面上看站点很活跃,實际會让蜘蛛在多次比對之後降低對這個字段的信任,後續即使真有更新也可能被忽略。比較稳妥的做法是:只在頁面内容确實發生實质變化时,更新對應 URL 的 lastmod,其余保持原值。changefreq 和 priority 目前更多是提示性字段,寫與不寫影响有限,不必花太多精力维護。
sitemap 不能替代内鏈
有些做法是入口頁只放少量導航,其余 URL 全部塞進 sitemap,指望蜘蛛顺着清單爬完。這會让蜘蛛拿到 URL 却没有合理的爬行路径,目标頁之間缺少互鏈支撑,即使被發現了也难以获得持續回訪。合理的分工是:sitemap 负责新增頁面和邊缘頁面的發現,内鏈负责爬行深度控制和連結關系传递。两者互补,不是替代。
几個常见誤区
- 把站内全部 URL 一次性倾倒進去,包括标簽頁、分頁和各種篩選參數
- sitemap 長期不更新,新增入口頁却指望蜘蛛自己找到
- 用 sitemap 批量提交低质頁面,拉低整体抓取效率
- 每個子域或每套入口程序各提交一份内容重复的 sitemap
上线後观察什么
- 發現量:日誌里蜘蛛請求 sitemap 的频率,以及随之带来的抓取量變化
- 抓取轉化:從 sitemap 拿到的 URL 里,有多少真正進入了抓取
- 狀態碼:被寫進 sitemap 的 URL 是否出現 404 或 5xx 增多
- 時間間隔:新入口頁從提交到首次被抓,周期是否缩短
sitemap 是發現通道,不是收錄保證。先保證清單干净、lastmod 真實,再谈規模。
還有一点需要耐心:sitemap 的效果通常要几周才能從日誌里看出趋势,短期内频繁改動只會让資料更难判断。设定一個固定的生成周期,定期清理失效 URL,比反复調整字段更有價值。