站点的抓取路径不是从首页开始的,而是从 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 当成抓取路径的边界线,而不是收录开关。边界清晰,蜘蛛才能把有限的抓取次数用在有价值的内容上。