很多人把 robots 当成一句随手寫的礼貌用语,在蜘蛛池里複製一段就上线了。實际上,入口頁的抓取路径是否顺畅、抓取预算花在哪里,都會被這几行配置直接影响。寫错的地方不用多,一两個 disallow 就能把蜘蛛挡在门外,或者反過来把不该暴露的目錄全部摊開。
robots.txt 管的是能不能爬,不是能不能收錄
robots.txt 放在域名根目錄,用来告诉爬虫哪些路径可以抓取。它只约束抓取行為,並不决定收錄结果:被 Disallow 的 URL 仍可能因為外部連結出現在索引里,只是没有内容摘要;而 Allow 也不代表一定會被收錄。這两件事经常被混為一谈,于是有人用 Disallow 去控制收錄,结果两头落空。
入口頁的诉求是让蜘蛛顺畅通過,所以 robots.txt 通常保持简單:允许全站抓取,只挡掉後台、日誌、接口這類非内容路径。不要為了所谓的整洁去 disallow 入口頁本身,那等于自己把鏈路剪断。
meta robots 與 X-Robots-Tag 的分工
頁面級的 noindex、nofollow 寫在 HTML 的 head 里,作用于單個頁面。非 HTML 资源,比如 PDF、图片、接口返回的 JSON,用响應头 X-Robots-Tag 更合适,因為這類文件里塞不進 meta 标簽。两者蜘蛛都能讀到,但覆盖范围不同,配置时要分清對象。
哪些该放行
- 入口頁、列表頁、聚合頁,這些是 URL 發現的主干
- 承载實质内容的目标頁
- 分頁連結,前提是分頁里确實带着可繼續爬取的詳情連結
- sitemap 文件與必要的静態资源
哪些该屏蔽
- 後台、測試目錄、临时环境、备份文件
- 带排序、篩選參數、能生成大量近似 URL 的頁面
- 站内搜尋结果頁與搜尋參數
- 統計脚本、跳轉脚本所在的路径
- 與已收錄頁面高度重复的副本頁
最後一條要說明一下:重复内容既可以屏蔽,也可以用 canonical 處理,選哪種取决于你是否希望這些 URL 被索引。拿不准时,先屏蔽更保險, spiders 的注意力是有限的。
nofollow 什么时候用
頁面里如果有大量不可控的外鏈,比如评论区、采集来的正文,加上 rel="nofollow" 能减少蜘蛛注意力被带走的情况。但入口頁之間、入口頁到目标頁的關键連結不要加 nofollow,否則整條 URL 發現鏈路會被削弱。另外,nofollow 如今更多是提示而非硬性指令,別指望它百分百管用。
容易踩的坑
- 一邊用 Disallow 屏蔽頁面,一邊期待它被收錄,指令自相矛盾
- 上线时直接複製主站的 robots.txt,把整個入口目錄挡掉
- 通配符規則寫得不嚴谨,该放行的路径被誤伤
- 測試环境没有 robots.txt,蜘蛛誤抓一堆临时頁面
- meta noindex 和 canonical 同时指回自己,指令互相打架
上线前的检查清單
- 用 robots.txt 測試工具驗證關键路径是 Allow
- 抽查入口頁的 head,確認没有意外出現的 noindex
- 確認 X-Robots-Tag 没有被誤加到普通 HTML 頁面
- 翻服務器日誌,看蜘蛛是否真的抓到了入口頁和目标頁
- 改動後观察几天抓取量變化,不要一次性大改
還有一点值得提醒:robots 只是抓取层的開關,它既不解决内容质量問题,也不會让排名變好。把放行和屏蔽的邊界理清楚,让蜘蛛少走冤枉路,剩下的事仍然要靠内容本身和正常的运营节奏。