蜘蛛池知识

蜘蛛池里的 robots.txt 與 sitemap:给爬虫留门還是设限

robots.txt 和 sitemap 常被当成開關,其實它們只负责引導。本文讲清楚蜘蛛池里這两個文件该怎么寫:哪些路径值得挡、入口頁目錄怎么留、sitemap 放多少條地址、分片與更新频率,以及两類規則互相打架时的排查顺序。

蜘蛛池知识

蜘蛛池里的 robots.txt 與 sitemap:给爬虫留门還是设限

入口頁和連結结构安排好了,還是经常有人問:robots.txt 要不要寫、sitemap 要不要放。這两個文件不是開關,寫错了反而會把本来能抓的路径挡掉,等于自己给爬虫關门。

robots.txt 在蜘蛛池里的實际作用

它只是一個约定,遵守與否取决于爬虫方。真正有用的地方是减少無效抓取,把有限的抓取次數留给想被發現的入口頁和目标頁。

  • 先保證没寫错:Disallow 後面跟的是路径,不是完整網址;不同 user-agent 组之間用空行分隔,否則前一组規則會把後一组吞掉。
  • 別顺手全站禁止:測試环境留下的 Disallow: / 忘了删,是日誌里抓取量突然归零最常见的原因之一。
  • 挡掉该挡的:後台路径、站内搜尋结果頁、带排序和篩選的無限參數、重复的打印頁,放出来只會消耗抓取配額。
  • 留出入口頁目錄:如果入口頁集中在某個目錄下,確認它没有被別的規則意外覆盖。
  • 声明 sitemap 位置:在文件末尾用 Sitemap 指向地址,成本很低,顺手寫上没坏處。

還要注意 robots.txt 和 meta robots 的分工:前者管整站路径,後者管單個頁面。meta robots 里的 noindex 只對已经抓到頁面的爬虫起作用,如果 robots.txt 先把路径挡住,爬虫可能压根看不到那條 noindex,两套規則別互相打架。

sitemap 值不值得放

它的作用是把地址主動列出来,减少爬虫自己摸索的成本。入口頁只有几十條时收益有限;几百上千條时,它能让發現路径更直一些。

放什么地址

  • 只放入口頁和少量高價值目标頁,不要把整站所有地址一股脑塞進去。
  • 同一批地址不要在多份 sitemap 里重复出現,重复本身就是噪音。
  • 狀態碼要干净:列表里出現 404,或者 301 跳到完全不相干的地方,整份文件的可信度都會下降。

分片與更新

單份文件建议控制在几萬條以内,超了就拆成索引加子文件。更新频率跟着入口頁的實际變化走,内容没動就没必要每天重寫時間戳。

几個常见誤区

  • 用 robots.txt 挡目标頁,却指望入口頁把爬虫带過去——被挡的路径爬虫不會主動訪問,這條鏈路是断的。
  • sitemap 里塞大量跳轉地址,爬虫跟過去拿到的是另一套内容,反而浪費了抓取。
  • 改完 robots.txt 就以為抓取會立刻變化。生效有延迟,日誌要观察几天再下结论。

落地时的检查顺序

  1. 浏览器直接打開這两個地址,確認能正常訪問,不是 404,也不是登入頁。
  2. 逐條核對 Disallow 規則,確認没有覆盖入口頁目錄。
  3. 從 sitemap 里抽查五到十條地址,看看返回的狀態碼。
  4. 過几天翻日誌,看被抓的路径是否落在预期范围内。
這两個文件解决的是“让爬虫少走弯路”,不解决“愿不愿意抓”。抓取量最终取决于入口頁本身的更新、结构和被訪問的價值。

所以別把它們当成優化按钮。規則寫清楚、別自相矛盾、別挡住自己要走的路,這部分工作就算做到位了。