robots.txt 通常只有几行,却决定了蜘蛛進门之後能看到什么。它最容易被誤解的地方是:很多人把它当成“收錄開關”,實际上它只是抓取许可的一部分,管的是蜘蛛能不能来取這個 URL,不管取回来之後是否被索引。
Disallow 挡抓取,不等于挡收錄
一個 URL 被 Disallow,蜘蛛不會去抓它的内容,但如果站外有連結指向它,搜尋引擎仍然可能把它放進索引,只是没有标题和摘要,用戶点進去看到的是提示頁或者被跳回首頁。這種结果通常比直接放行更难控制。
更常见的错誤是同时使用 Disallow 和 noindex。noindex 寫在頁面里,蜘蛛必须先抓到頁面才能讀到這條 meta 指令;一旦路径被 Disallow,蜘蛛進不来,noindex 就永遠不生效。想让某個頁面從索引里消失,比較稳妥的顺序是先放開抓取、让 noindex 被讀到,等頁面确實從结果里消失之後,再考虑是否屏蔽抓取。
路径匹配的誤伤,往往出在几個字符上
- 前缀匹配:只寫 Disallow: /search,會连 /search-engine-guide 這類正常頁面一起挡住,需要寫完整路径或补上結束符。
- 通配符過宽:用一條規則拦掉所有带參數的 URL,訂單確認頁、篩選頁、分頁參數會被一並挡住,其中有些恰恰是有内容價值的。
- 根目錄全挡:測試环境遗留的 Disallow: / 被带到线上,蜘蛛一條都抓不到,站内其他優化做得再好也没有入口。
- 大小寫與尾斜杠:路径匹配区分大小寫,/About 和 /about 是两條不同的規則;站点上如果两種寫法並存,規則也要跟着覆盖。
Crawl-delay 能做的事比想象中少
Crawl-delay 只有部分蜘蛛支持,主流搜尋引擎的爬虫早已不把它当作主要节流手段。它更像一份建议,不是硬性限速。真正影响抓取节奏的是服務器返回的响應狀態:持續返回 429、503 並给出 Retry-After 头,比在 robots.txt 里寫一個固定延迟更有效,也更贴近實际的负载情况。把 Crawl-delay 当成服務器扛不住时的挡箭牌,往往既不及时也不精确。
被挡住的 URL 如果還被内鏈指着,就變成了积压
站内連結指向一個 Disallow 的路径时,蜘蛛會在別處看到這個 URL,标记為“已發現”,然後按規則不去抓取。這類 URL 會長期占着發現队列,也让抓取路径的判断變得模糊:蜘蛛知道有這么一個地址,却拿不到任何内容来判断它的價值。比較稳妥的做法是,把導航、列表、詳情頁里指向被屏蔽路径的連結一並處理掉,让 robots.txt 的邊界和站内連結的邊界保持一致。
上线前值得逐條核對的地方
- robots.txt 是否放在域名根目錄,並且直接返回 200,而不是被重定向到別處或者返回 404。
- Sitemap 声明是否寫在文件里,地址與實际的 sitemap 位置是否一致。
- 規則是否按“更具体的路径排在前面”来组织,避免一條宽規則盖住後面的细規則。
- 是否清理了測試环境留下的临时規則,尤其是屏蔽全站這一類。
- 抓一份訪問日誌,對照当天蜘蛛實际抓到的 URL,看看有没有本该抓取的路径一條都没出現。
robots.txt 是一份抓取许可,既不是收錄控制,也不是安全措施。它比較理想的狀態是:表述清楚、范围收敛、和站内實际的内鏈结构對得上。