搜尋抓取

robots.txt 划出的抓取邊界:放行、拦截與常见誤伤

robots.txt 是蜘蛛抓取前通常會讀取的协议文件,它只控制抓取,不直接控制索引。本文梳理哪些路径應该放行、哪些适合拦截,Disallow 與 noindex 如何配合,常见的配置错誤,以及修改後如何通過日誌核對實际抓取行為。

搜尋抓取

robots.txt 划出的抓取邊界:放行、拦截與常见誤伤

站点的抓取路径不是從首頁開始的,而是從 robots.txt 開始的。蜘蛛在抓取前通常會先請求這個文件,確認哪些目錄可以走、哪些不能走。很多人把它当成“收錄開關”,结果要么把该抓的路径拦掉,要么把不该抓的路径放進来,日誌里就會出現一堆無效請求。

robots.txt 管的是抓取,不是索引

先把邊界说清楚:robots.txt 里的 Disallow 只表示“不要抓取”,並不等于“不要索引”。如果一個被屏蔽的 URL 從外部获得了連結,蜘蛛無法抓取内容,但仍可能把這個地址放進索引,只是没有摘要或摘要来自外鏈文本。反過来,想让一個頁面彻底不出現,通常需要允许抓取,再在頁面上返回 noindex。

所以,用 robots.txt 去處理“不想被收錄”的頁面,往往達不到目的。它更适合處理“不想被频繁抓取”或“抓了也没價值”的路径。

哪些路径通常應该放行

放行的原則是:對蜘蛛理解站点有用、且不會造成大量重复或無效請求的路径。

  • 正常的内容頁、栏目頁和文章詳情頁。
  • 分頁路径,比如 /list/page/2/。如果分頁被拦,蜘蛛可能只能看到第一頁的連結。
  • 渲染依赖的 CSS 和 JS 文件。屏蔽它們,蜘蛛拿到的可能是缺少样式和内容的空壳。
  • 图片和视频等资源文件,除非你确定不需要它們出現在图片搜尋里。
  • Sitemap 文件本身,以及 robots.txt 里声明的 Sitemap 地址。

如果站点使用了客戶端渲染,還要確認蜘蛛能拿到渲染後的内容。此时屏蔽 JS 资源,等于把内容入口關掉。

哪些路径适合拦下

拦截的目标是减少無效抓取,把抓取次數留给真正需要收錄的頁面。

  • 後台、登入、註冊、购物车、訂單查询等用戶功能路径。
  • 站内搜尋结果頁。參數组合多,内容重复,容易产生大量低质 URL。
  • 带篩選參數的列表頁,如果參數组合几乎無限,可以只放行少數有價值的组合,其余拦截。
  • API 接口、資料導出、临时測試目錄、废弃的舊版路径。
  • 會生成重复内容的打印頁、分享頁、跟踪連結路径。

這里有一個常见矛盾:如果某個篩選頁只是因為重复而不想收錄,用 noindex 更合适,那就不能屏蔽抓取。因為蜘蛛讀不到頁面,就看不到 noindex。只有確認這些頁面没有任何收錄價值,並且不需要通過頁面指令控制时,才直接用 Disallow。

容易踩的配置错誤

  • Disallow: / 全站屏蔽。除了測試环境,一般不要這样寫。一旦上线,蜘蛛會停止抓取,恢复需要時間。
  • 把 Sitemap 也屏蔽掉。Sitemap 地址被拦,蜘蛛讀不到站点地图,URL 發現會變慢。
  • 規則顺序和通配符寫错。例如 Disallow: /*?* 會拦掉所有带參數的 URL,可能誤伤正常分頁或跟踪參數之外的有用路径。
  • 大小寫和结尾斜杠不一致。路径匹配是区分大小寫的,寫错一個字母就可能放行不该放的目錄。
  • 子域没有各自的 robots.txt。每個子域都要單獨配置,不能靠主域文件覆盖。
  • 用 robots.txt 屏蔽 CSS/JS,同时又希望蜘蛛渲染完整頁面。

改完 robots.txt 後怎么核對

修改後不要只看文件内容,要看蜘蛛的實际行為。可以用抓取測試工具检查某條 URL 是否被允许,再對照服務器日誌:之前频繁出現的被拦路径,是否逐渐减少;原本该抓的詳情頁,是否還在正常請求。

生效需要時間。蜘蛛不會立刻重新讀取 robots.txt,舊規則可能還會被沿用一段時間。如果改動較大,建议分步調整,先放行關键路径,再逐步收紧無效路径。

把 robots.txt 当成抓取路径的邊界线,而不是收錄開關。邊界清晰,蜘蛛才能把有限的抓取次數用在有價值的内容上。