抓取许可和 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 的地址。這两類内容會稀释清單的可信度,让真正需要被發現的頁面排在後面。
調整时的操作顺序
- 先導出目前規則,逐條标注“為什么存在”,没有理由的先列為待删。
- 用抓取測試工具驗證几條代表性 URL 的许可狀態,確認通配符的實际命中范围。
- 把“不该索引”和“不该抓取”分開處理:前者用 noindex 並允许抓取,後者才用 Disallow,比如後台、搜尋结果頁、無限參數组合。
- 同步更新 Sitemap,删掉被禁止或已失效的地址。
- 检查内鏈,把指向被禁路径的連結換成有效的規范地址。
- 观察一段時間抓取日誌,看被挡路径的訪問量是否下降、有效頁面的抓取是否回升。
robots.txt 是一道门禁,不是一块橡皮。它决定抓取器能走進哪些房間,却管不了這些房間是否被人提起。想让一個 URL 彻底消失,做法常常正好相反:放它進来,再明确告诉抓取器不要索引。
如果站点規模不大,規則保持简單、只挡必要路径就好。規則越少,改完之後越容易判断問题出在哪里。