很多人把 robots.txt 当成提交给搜尋蜘蛛的白名單,認為只要地址没被挡住,蜘蛛就會来抓;反過来,一旦被 Disallow,地址就彻底消失。實际規則里,robots.txt 约束的是能不能抓取,而不是會不會被發現。把這两條线分開之後,很多奇怪現象就说得通了。
被發現和被抓取是两件事
URL 的發現来源通常有站外連結、站内連結、Sitemap、歷史抓取记錄等。搜尋蜘蛛在爬 A 頁面时看到指向 B 的連結,就會把 B 记進待抓队列,不管 B 是否被 robots.txt 禁止。禁止的结果只是:轮到抓 B 时,蜘蛛會退回去,B 的正文不會被讀取。于是抓取日誌里會出現一條被拦截的记錄,而不是完全看不到這個地址。
這也解释了另一種情况:某一批 URL 在 Sitemap 里提交了,日誌里却几乎没有抓取记錄。可能不是清單格式問题,而是這些地址正好落在 Disallow 規則里,蜘蛛讀取了清單但無法繼續。
常见的几類誤配
- 用 Disallow 處理重复内容。屏蔽之後蜘蛛抓不到頁面,也就看不到頁面里的 canonical,去重反而更难完成。
- 屏蔽 CSS、JS 等静態资源。頁面能抓,但渲染後看到的结构和资源加载後的實际内容不一致。
- Sitemap 與 robots.txt 互相打架。清單里提交的地址被規則挡住,两邊都需要回头检查。
- 舊規則長期不清理。目錄調整或更換框架後,新路径被歷史規則意外拦住。
- 只在 robots.txt 层排查,忽略 CDN、WAF 和防盗鏈設定。有些拦截發生在更前面,日誌里的狀態碼並不一样。
核對时建议的顺序
- 確認目前生效的 robots.txt 版本。搜尋引擎讀取的是线上文件,本地副本和 CDN 缓存都可能有差异。
- 用單 URL 检查工具請求几個代表性地址,看是否被拦截,而不是只看整站規則。
- 在服務器日誌里筛出 robots.txt 的請求记錄,確認蜘蛛能正常拿到文件,並且返回的是 200。
- 把 Sitemap 提交清單與 robots 規則做交集比對,找出被挡住的地址。
- 检查 CDN 回源與安全策略,確認没有額外一层在返回 403 或驗證頁面。
顺序上建议先確認谁發現了 URL,再確認是否允许抓取,最後看服務器是否正常响應。跳過前两步,容易把抓取問题誤判成索引問题。
放行之後還要补什么
把規則放開只是恢复了抓取资格。一個地址要被稳定抓取,通常還需要至少一個可被跟踪的内鏈入口,或者在 Sitemap 里有明确记錄;服務器也要能持續返回正常狀態。對于依赖前端渲染的頁面,還要確認渲染所需的资源没有被挡住。
robots.txt 决定蜘蛛能不能進门,連結和 Sitemap 决定有没有人告诉它门在哪里。两件事都做了,抓取才谈得上顺畅。
如果站点近期做過改版或目錄迁移,可以顺手對照舊規則,把已经不适用的 Disallow 條目删掉。規則越少、越贴近目前目錄结构,排查时越不容易出错。
维護节奏
不需要频繁修改 robots.txt,但每次结构調整、上线新频道、更換 CDN 时,都應该重新核對一次。把拦截規則、Sitemap、内鏈和日誌放在同一套检查清單里,遇到抓取量波動时,先分清是發現环节還是抓取环节出了問题,再决定要不要動規則。