搜尋抓取

robots.txt 與 URL 發現:被 Disallow 的路径會牵连什么

robots.txt 决定抓取器能不能抓,却不决定 URL 能被谁發現。規則寫错时,頁面通常不會直接消失,而是内鏈指向被挡路径、Sitemap 申报冲突、资源文件拿不到,最终拖慢有效頁面的發現节奏。本文梳理規則與實际影响的關系,並给出检查與調整顺序。

搜尋抓取

robots.txt 與 URL 發現:被 Disallow 的路径會牵连什么

抓取许可和 URL 發現是两件事

不少人把 robots.txt 当成隐身開關,以為寫一條 Disallow,URL 就從搜尋里消失了。實际流程要分两步看:先是發現,也就是抓取器從外鏈、内鏈、Sitemap、推送等渠道拿到這個地址;再是抓取,判断允不允许取回、值不值得取回。robots.txt 管的是第二步。URL 被寫進 Disallow 之後,抓取器仍可能通過站外引用知道它存在,只是不取回頁面内容,因此也就無從判断頁面质量、無從判断该给什么展示。

這個区別會直接改變處理方式:把不该被索引的頁面统统 Disallow 掉,往往得到一個“存在但内容未知”的 URL,效果通常和预期相反。

被挡住的 URL 一般會经歷什么

一種常见情况是頁面本身是正常内容頁,只因為參數太多、目錄命名偏乱,被整段規則挡在外面。這類地址往往還被導航和正文反复引用,形成站内到處指、抓取器却進不去的矛盾狀態:連結在传递路径上被消耗,頁面内容始终没被评估過。

另一種情况是资源文件被誤挡。CSS、JS 一旦被禁止抓取,取回的 HTML 可能無法正确渲染,頁面里的連結就未必能被解析出来。這會把 URL 發現的問题伪装成渲染問题,让人往错誤的方向排查。

几類容易被寫坏的規則

  • 通配符放得太宽Disallow: /*? 這類寫法经常把正常内容頁一並挡住,生效范围要在測試工具里逐條驗證。
  • 想挡目錄却漏了斜杠Disallow: /tag 會同时挡住 /tags/ 這類正常路径,邊界要寫清楚。
  • Disallow 與 noindex 混用:想让頁面彻底不出現,通常是允许抓取再加 noindex;只用 Disallow,抓取器反而看不到那條 noindex。
  • Sitemap 與 robots 互相打架:Sitemap 里申报的地址又在 robots.txt 里被禁止,是明顯的矛盾信号,建议先清理掉一方。
  • 舊規則長期不清理:改版、栏目下线留下的條目越积越多,路径早就不存在,却仍在新地址上誤伤。

Sitemap 和内鏈要跟着一起改

調整 robots.txt 只是第一步。真正影响 URL 發現的是站内連結结构:主導航、面包屑、正文内鏈、列表頁分頁,這些位置指向的地址如果和许可范围一致,抓取路径才顺。反過来,如果内鏈大量指向被禁止的路径,抓取器會在這條死路上反复试探,其他頁面的發現节奏自然被拖慢。

Sitemap 更像一份申报清單。它不适合塞進被 Disallow 的 URL,也不适合包含大量重定向、404 的地址。這两類内容會稀释清單的可信度,让真正需要被發現的頁面排在後面。

調整时的操作顺序

  1. 先導出目前規則,逐條标注“為什么存在”,没有理由的先列為待删。
  2. 用抓取測試工具驗證几條代表性 URL 的许可狀態,確認通配符的實际命中范围。
  3. 把“不该索引”和“不该抓取”分開處理:前者用 noindex 並允许抓取,後者才用 Disallow,比如後台、搜尋结果頁、無限參數组合。
  4. 同步更新 Sitemap,删掉被禁止或已失效的地址。
  5. 检查内鏈,把指向被禁路径的連結換成有效的規范地址。
  6. 观察一段時間抓取日誌,看被挡路径的訪問量是否下降、有效頁面的抓取是否回升。
robots.txt 是一道门禁,不是一块橡皮。它决定抓取器能走進哪些房間,却管不了這些房間是否被人提起。想让一個 URL 彻底消失,做法常常正好相反:放它進来,再明确告诉抓取器不要索引。

如果站点規模不大,規則保持简單、只挡必要路径就好。規則越少,改完之後越容易判断問题出在哪里。