做抓取優化时,大家习惯盯内鏈和 Sitemap,却很少回头看 robots.txt。它本身不产生抓取,但它决定了蜘蛛能走到哪一步。規則寫得含糊,蜘蛛實际走的路线就會和你的预期差出一截。
它管的是抓取,不是索引
robots.txt 里的 Disallow 只表示不要抓這個 URL,不等于這個 URL 不會出現在搜尋结果里。如果某個被屏蔽的地址有足够多的站外連結,搜尋引擎仍然可能把它保留為一個没有摘要的结果頁。想让它彻底不出現,用的是頁面級的 noindex,而 noindex 生效的前提恰恰是:這個頁面允许被抓取。两者寫反,是最常见的组合错誤。
Disallow 挡住的是抓取動作,不是 URL 的传播。連結還在,URL 就還在被传递。
前缀匹配:一條規則可能带走一整個目錄
多數搜尋引擎的 robots.txt 按路径前缀匹配,而不是按完整路径精确匹配。寫 /tag 时,/tag、/tag/xxx、/tags 這類路径都可能被一起挡住——原本只想挡聚合頁,结果连正文章节頁也進不去。寫規則前,先把站点里所有以该字符串開头的路径列一遍,再决定要不要加斜杠收窄范围。
适合交给 robots.txt 的路径
- 站内搜尋结果頁,參數组合几乎無限,抓取價值低;
- 排序、篩選、打印、分享等衍生版本;
- 後台、測試、临时目錄等不该被訪問的地址;
- 容量巨大的日歷归档、标簽聚合頁的分頁尾部。
這些路径的共同点是:數量大、内容重复、對用戶没有獨立價值。把抓取预算留给正文,比让蜘蛛在參數组合里打轉更划算。
別把渲染需要的资源一起挡掉
如果頁面依赖 CSS 和 JS 才能呈現出主要内容與連結,把 /assets、/static 這類目錄整段屏蔽,蜘蛛拿到的就是半成品。它看不到渲染後的结构,内鏈也走不通,抓取路径會在這里断掉。屏蔽規則要具体到文件或目錄,而不是為了省事一刀切掉整個静態资源域。
改完規則,用日誌看路线
規則上线後,別只看文件有没有寫错,要去服務器日誌里看蜘蛛的實际訪問记錄:被挡住的目錄是否還有請求,有則說明規則没生效或被忽略;正文頁面的抓取量是否上升;原来经過聚合頁到達的深层頁面有没有失去入口。抓取路径是一條鏈,挡住中間一环,後面的頁面可能再也走不到,必要时给它們补一條内鏈或放進 Sitemap。
几個容易忽略的细节
- robots.txt 本身要返回 200,且不要返回 HTML 頁面;
- 路径区分大小寫,寫法要和實际 URL 一致;
- 避免多條互相矛盾的規則同时存在;
- 整站禁止抓取只适合临时下线,長期使用等于放弃自然流量。
robots.txt 是一道闸门,不是優化手段。它负责把不值得抓的東西挡在外面,真正决定蜘蛛能走多遠的,仍然是内鏈结构、Sitemap 和服務器稳定性。開合這道闸门之前,先想清楚你要让蜘蛛看到什么。