先把 robots.txt 的定位说清楚
很多站点在排查 URL 為什么迟迟没被抓时,第一反應是看内鏈和 Sitemap,却很少回头看 robots.txt。這份文件放在根目錄,蜘蛛每次抓取前基本都會先讀一遍,它的作用不是帮你提升收錄,而是给蜘蛛划出一條可走的范围。范围划错了,後面的内鏈和 Sitemap 做得再细,也可能白費。
Disallow 挡的是抓取,不是 URL 的传播
一個常见誤解是:頁面寫進 Disallow,蜘蛛就完全不知道它的存在。實际上,如果這個 URL 出現在別處的連結、Sitemap 或外部引用里,蜘蛛依然可能“知道”它,只是不會去抓内容。反過来,一個頁面即使没有被 Disallow,只要没有任何入口指向它,也同样难被抓到。抓取路径是由“能不能抓”和“有没有路”两件事共同决定的。
把 robots.txt 当成一道门:门開着不代表有人會走進来,门鎖着則一定進不来。
几處最容易寫错的地方
- 整站屏蔽忘了撤。測試环境用 Disallow: /,上线後没删,结果正式站也一直被挡在外面。
- 規則過宽。Disallow: /*? 本意是挡掉無用參數,却连正常的分頁、篩選列表頁一起挡掉,连带把列表頁里的深层連結也断了。
- 目錄名少寫斜杠。Disallow: /news 會同时匹配 /newsletter、/news-2024 這類前缀相同的路径。
- 顺序理解偏差。現在主流蜘蛛對 Allow 與 Disallow 多按“最長匹配優先”處理,不是简單地按书寫先後生效,規則越复杂越容易出错。
- 移動端與主站規則不一致。移動優先抓取下,蜘蛛主要按移動端地址取内容,如果两套地址的 robots 規則不同,實际放行的范围也會不同。
Crawl-delay 與並發的關系
有些 robots.txt 里會寫 Crawl-delay。要注意两点:一是主流搜尋蜘蛛對此的支持程度並不一致,真正影响抓取压力的更多是服務器响應速度和站点在蜘蛛侧的整体表現;二是把 delay 調得過大,抓取节奏會明顯變慢,URL 從被發現到被抓的等待期被拉長。服務器有余量时,不建议用這條規則人為踩刹车。
Sitemap 声明別只放在一處
在 robots.txt 里寫 Sitemap: 是常见做法,能让蜘蛛在讀取規則的同时拿到 URL 清單。但要留意三点:文件必须可正常訪問並返回 200;地址要用完整 URL;如果 Sitemap 分了片,索引文件也要一並声明。robots.txt 本身如果返回 5xx,蜘蛛可能暂时放缓甚至暫停抓取,返回 404 則通常被视為没有限制。
一份可执行的自查顺序
- 在浏览器直接打開 /robots.txt,確認能正常返回,且没有意外規則。
- 用平台提供的 robots 測試工具,輸入几個關键 URL,看是被允许還是被拦截。
- 對照抓取日誌,統計被 robots 拦截的抓取占比,重点找被誤挡的栏目和列表頁。
- 核對 Sitemap 声明與實际文件是否一致,分片是否完整。
robots.txt 的作用是划邊界,不是做優化。把邊界划清楚,让该抓的能抓、不该抓的別浪費,URL 發現和抓取路径才有讨论的余地。