搜尋抓取

robots.txt 與抓取路径:哪些寫法會让蜘蛛在门口停下

robots.txt 决定蜘蛛能不能請求某個路径,却不决定 URL 會不會出現在结果里。把這两件事混在一起,是抓取問题反复出現的根源。本文梳理整目錄誤封静態资源、通配符與结尾符用错、規則冲突、noindex 與屏蔽叠加等常见寫法,並說明文件返回 404、403、5xx 时蜘蛛的不同反應與改動後的驗證方法。

搜尋抓取

robots.txt 與抓取路径:哪些寫法會让蜘蛛在门口停下

robots.txt 是站点入口處的一份規則文件,它决定蜘蛛能不能請求某個路径,但不决定這個 URL 會不會出現在搜尋结果里。把這两件事混在一起,是很多抓取問题反复出現的根源。規則寫错时,往往不是抓取量突然掉光,而是某些路径長期没人走,問题要過很久才在日誌里顯出来。

robots.txt 管的是“能不能抓”,不是“收不收”

被 Disallow 的 URL,蜘蛛不會發出請求,因此頁面里的 noindex 元标簽也讀不到。结果是這個地址仍可能以纯 URL 的形式出現在结果中,只是没有标题和摘要。反過来,如果希望頁面不出現,正确顺序是先允许抓取,等蜘蛛能讀到 noindex 之後,再考虑要不要重新屏蔽。

几處常见的誤封寫法

整目錄屏蔽静態资源

把 /assets/、/static/、/js/、/css/ 這類目錄直接寫進 Disallow,會让蜘蛛拿不到渲染頁面所需的脚本和样式。移動優先抓取的环境下,缺资源的頁面很容易只剩一個空壳,内鏈和正文都走不下去。

通配符與结尾符用错

/search、/search*、/search$ 的效果並不相同。带 $ 的規則只匹配到该字符串结尾的地址;不加结尾符时,凡是以前缀開头的路径都會被命中,例如 /search-help、/search-archive 也會一起被挡住。寫規則前,先把站内同類前缀的 URL 列一遍。

同一段里的規則冲突

Allow 與 Disallow 同时命中某個 URL 时,通常按最長匹配優先;長度相同时 Allow 優先。與其依赖书寫顺序,不如把更具体的路径寫完整,减少模糊匹配的范围。

目錄級屏蔽和頁面 noindex 叠在一起

常见的一種组合是:Disallow: /private/,同时该目錄下的頁面又加了 noindex。蜘蛛根本不會去請求,noindex 自然無從生效。類似情况還有把這些 URL 一並放進 Sitemap,提交的清單里夹着不可抓取的地址,只會让清單本身變得不可信。

  • 先放開抓取,確認蜘蛛能正常讀到頁面内容;
  • 再通過 noindex 表達“不要收錄”的意图;
  • 確認真實生效後,才决定是否需要回到屏蔽狀態。

文件本身打不開时,蜘蛛怎么處理

robots.txt 返回 404,一般被视作没有規則,站点可以正常抓取;返回 403,多數情况下也按可抓取處理。返回 5xx 时,蜘蛛通常會暫停或降低该站的抓取频率,長期如此會影响到整站,而不只是某一個目錄。所以不要把 5xx 当成屏蔽手段,也不要用 robots.txt 去承担限流或拦截攻击流量的职责。

改動之後怎么驗證

  1. 用几類典型 URL 做一次抓取測試,覆盖首頁、栏目頁、被拦路径和邊界前缀。
  2. 在服務器日誌里看被拦目錄的請求是否還在出現,是否存在本该放開却仍無請求的路径。
  3. 核對 Sitemap 中的 URL 是否都落在允许抓取的范围内,冲突項要么修正規則,要么從清單里移除。
  4. 观察一到两個抓取周期,注意抓取請求的分布是否向重要頁面移動,而不是只看總量。

哪些场景适合用規則拦下来

  • 後台、结算、訂單等登入後才可见的路径;
  • 會生成大量组合的排序與篩選參數;
  • 带會话 ID 或临时 token 的地址;
  • 供前端調用的資料接口和無限滚動接口。

把 robots.txt 当成一份需要長期维護的路径白名單,改動前先拿典型地址驗證,再對照日誌看真實請求,比一次性寫死然後遗忘要稳妥得多。