搜尋抓取

robots.txt 與 Sitemap 的先後:蜘蛛進站前先讀哪份文件

蜘蛛進入一個站点前,通常會先請求 robots.txt,再根據其中的声明和 Sitemap 地址去發現 URL。本文梳理這两份文件在抓取路径里的分工、常见寫法與自查点,帮助站点把入口信息交代清楚,减少蜘蛛在無效路径上的停留。

搜尋抓取

robots.txt 與 Sitemap 的先後:蜘蛛進站前先讀哪份文件

蜘蛛進入一個站点时,並不是随机挑一個頁面開始。多數情况下,它會先請求根目錄下的 robots.txt,讀取抓取規則和其中声明的 Sitemap 地址;随後再根據 Sitemap、内鏈或其他外鏈线索去發現具体 URL。這两份文件一個管“能不能抓”,一個管“有哪些 URL”,顺序和作用並不相同。

robots.txt:抓取前的規則文件

robots.txt 放在域名根目錄下,蜘蛛請求它时並不需要先抓取首頁。它的主要作用是告诉蜘蛛哪些路径可以抓、哪些路径不建议抓。常见寫法包括:

  • User-agent:指定規則對哪些蜘蛛生效,例如针對全部蜘蛛用星号。
  • Disallow:不希望被請求的路径。注意它只是建议,不是强制屏障。
  • Allow:在整体禁止的目錄里開放個別路径。
  • Sitemap:声明 Sitemap 的完整地址,可以是 XML 文件,也可以是索引文件。

如果 robots.txt 寫错,影响往往不是單頁,而是整條抓取路径。比如誤把整站设為 Disallow,蜘蛛可能连首頁都不再請求;或者把 Sitemap 地址寫成了相對路径,蜘蛛無法定位。自查时可以用浏览器直接訪問域名下的 robots.txt,確認返回 200、内容可讀、没有多余跳轉。

Sitemap:给蜘蛛的 URL 清單

Sitemap 不是抓取指令,更像一份候選 URL 清單。它把站点希望被發現的頁面集中列出,並可以附带最後修改時間。對蜘蛛来说,Sitemap 的價值在于减少“猜 URL”的成本,尤其是新頁面、深层頁面和站内連結較少的頁面。

常见组织方式有两種:小站直接輸出一個 XML 文件;大站用索引文件把多個分片 Sitemap 串起来。無论哪種,都要保證:

  1. 列出的 URL 返回 200,不是 404、301 或 5xx。
  2. 只放規范 URL,不把带跟踪參數、排序參數或重复入口的地址混進去。
  3. 更新時間真實,不要每次請求都改,否則蜘蛛會反复回訪同一批頁面。
  4. Sitemap 地址在 robots.txt 中声明,或通過搜尋资源平台主動提交。

两者在抓取路径里的先後關系

從服務器日誌看,一個此前未接触過的站点,蜘蛛常见的請求顺序是:先請求 /robots.txt,再請求 Sitemap,然後才開始抓取具体頁面。如果 robots.txt 里没有声明 Sitemap,蜘蛛也可能通過首頁内鏈、外鏈或歷史记錄去發現 URL,只是路径會更長、更依赖站内结构。

robots.txt 决定蜘蛛“能走哪條路”,Sitemap 决定蜘蛛“知道有哪些目的地”,内鏈决定蜘蛛“在路上會不會真的走過去”。三者缺一,抓取覆盖都可能變窄。

有些站点把 Sitemap 当成提交收錄的保證,這是誤解。Sitemap 只提供發現线索,是否抓取、何时抓取、是否收錄,仍取决于蜘蛛對頁面质量、站点稳定性和抓取配額的综合判断。蜘蛛池或外部連結可以增加入口,但入口多了以後,如果 robots.txt 和 Sitemap 没有把規范路径讲清楚,反而容易让蜘蛛在重复 URL 之間打轉。

服務器稳定性與路径连續性

蜘蛛請求 robots.txt 和 Sitemap 时,同样會遇到服務器狀態。如果這两個文件频繁超时或返回 5xx,蜘蛛可能推迟後續抓取;如果 robots.txt 返回 404,蜘蛛通常會按“没有限制”處理,但這不代表可以放任不管,因為一旦後来补上規則,行為會發生變化。

建议把 robots.txt 和 Sitemap 放在稳定的静態路径上,避免经過复杂的動態路由、登入校驗或频繁變動的 CDN 規則。文件体积也不要過大,Sitemap 單文件通常控制在 5 萬條 URL、未压缩 50MB 以内,超出就分片。

一份基础自查清單

  • robots.txt 可公開訪問,返回 200,没有跳轉鏈。
  • User-agent 分组清晰,没有誤封整站或關键目錄。
  • Sitemap 地址寫的是完整 URL,且能正常打開。
  • Sitemap 内只保留規范、可抓取的頁面地址。
  • 首頁、導航和正文内鏈能覆盖重要栏目,不單靠 Sitemap。
  • 服務器對 robots.txt 和 Sitemap 的响應稳定,少有超时。

把這两份文件寫好,不是為了让蜘蛛“一定抓什么”,而是减少它在入口處的犹豫和绕路。站点运营里很多抓取問题,回头检查 robots.txt 與 Sitemap 的声明,往往能找到最早的那一處卡点。