蜘蛛池里让爬虫發現新入口頁,最常用的办法是互鏈和外围連結。但連結能不能被跟着抓,取决于爬虫愿不愿意爬到那個位置、愿意爬多深。sitemap 提供的是另一條通道:直接把 URL 清單摆到爬虫面前。它不保證抓取,也不保證收錄,但在池子里作為一種补充手段,成本低、配置简單,值得顺手做對。
先摆正位置:它是补充,不是主力
蜘蛛池的入口頁數量常常在几千到几萬的量級,纯靠連結传递,爬虫需要一层层往下走,總有一些頁面長期走不到。sitemap 的作用是把這批 URL 一次性列出来,减少這種“爬不到”的情况。
但有两件事要有预期:一是搜尋引擎對 sitemap 的采信程度,和站点整体情况有關,池子域名本身没有积累时,sitemap 更多只是提示;二是 sitemap 里的 URL 之後仍要经過抓取、内容判断等一整套流程,和通過連結發現走的是同一套後續逻辑,不會因為来源不同就被特殊對待。
格式與硬性限制
- 單個 sitemap 文件最多 50,000 條 URL,未压缩体积不超過 50MB;
- 超過這個量級要用 sitemap 索引文件,把多個子 sitemap 串起来;
- 只允许放同一主机下的 URL,跨域混放基本無效;
- lastmod 用規范日期時間格式,寫错會導致整條记錄被忽略;
- changefreq 和 priority 主流搜尋引擎已基本不再參考,不必花時間精细調整。
放在哪、怎么声明
常規做法是把 sitemap.xml 放在域名根目錄,再在 robots.txt 里加一行 Sitemap 指令指向完整地址。爬虫抓取 robots.txt 时就能顺带看到,不用額外找。
如果池子里每個入口頁域名各自獨立,那就每個域名配一份自己的 sitemap。不要把 A 域名下的 URL 寫進 B 域名的 sitemap,這類跨域條目通常會被直接跳過,寫了也白寫。
和入口頁互鏈怎么配合
两者並不冲突。互鏈负责“爬虫已经在池子里时,從 A 頁走到 B 頁”;sitemap 负责“爬虫刚進池子、還不知道有哪些頁时,给一份清單”。比較稳的组合是:入口頁保持少量、结构清晰的互鏈,同时用 sitemap 把那些連結深度較深、不容易被走到的頁面补進去。
但不要把 sitemap 当成萬能补漏。如果某個 URL 只能靠 sitemap 被發現,站内没有任何連結指向它,這類頁面在爬虫眼里通常優先級偏低,塞進去也很难有起色。
几個常见誤区
- 以為提交 sitemap 就會抓。它只是告知,抓不抓仍由爬虫决定;
- 反复調用早已废弃的 ping 接口,浪費時間且没有效果;
- 把目标站的頁面 URL 直接塞進入口頁域名的 sitemap,跨域條目會被忽略;
- sitemap 里混入大量 404、410、跳轉或加了 noindex 的地址,白白消耗抓取预算,還可能拉低整份清單的可信度;
- 只寫 URL 不寫 lastmod,内容更新後爬虫没有理由優先回来。
怎么判断它有没有起作用
最直接的是看訪問日誌:日誌里有没有對 /sitemap.xml 的請求、频率如何、抓完之後有没有顺着里面的 URL 繼續抓頁面。如果 sitemap 被频繁抓取,但清單里的 URL 几乎没人訪問,說明這些頁面在爬虫看来優先級不够,問题多半出在内容或整体信号上,而不是 sitemap 本身。
sitemap 解决的是“告知”,不是“说服”。告知之後爬虫来不来,取决于頁面本身值不值得抓。
一份可用的检查清單
- 每個入口頁域名是否都有可訪問的 /sitemap.xml,並正常返回 200;
- robots.txt 里是否声明了正确的 sitemap 地址;
- 清單里的 URL 是否都在同域内,是否清掉了參數混乱和重复的地址;
- 條數是否超過 50,000,超過时是否用了索引文件;
- lastmod 格式是否正确,内容變更时是否同步更新;
- 有没有把 404、跳轉、noindex 的 URL 混進去;
- 日誌里能否看到 sitemap 被抓取,以及後續頁面抓取是否跟上。
sitemap 在蜘蛛池里是個便宜好用的补充手段,但要摆正位置:它只负责把 URL 递到爬虫面前,後面的抓取、判断、收錄都不是它能决定的。把清單维護干净、格式寫對、和互鏈配合使用,比反复纠结“提交了為什么没反應”更有意义。