不想让页面进搜索结果,是页面里写排除标记还是文件里写排除规则
先分清要挡的是哪一层:文件里的排除规则拦的是抓取,页面里的排除标记拦的是索引。想让页面不进搜索结果,用页面级排除标记,同时保证抓取方还能读到这个页面;只在 robots 文件里写一条禁止规则并不等于不会被收录,协议层面的公开文档就明确写过,被 robots 文件屏蔽的页面如果还有其他来源指向它,仍可能被收录。两者管的是两件事。
两者管的是两件不同的事
抓取控制决定「这个地址能不能被读到」,索引控制决定「读到的内容要不要出现在结果里」。robots 文件里的 Disallow 作用于前者:路径被屏蔽后,抓取方不会去请求这个地址。页面里的排除标记(常见的 noindex 一类写法)作用于后者:抓取方仍然请求并读取页面,从响应里的标记或响应头得知这篇不要进入索引。公开文档里那句「爬虫仍需要访问资源才能读取头部信息和元标签」说的就是这个依赖关系——排除标记要生效,页面必须可达。
只写文件排除规则为什么会漏
因为屏蔽抓取会让排除标记读不到。路径一旦在文件里被禁止,抓取方拿不到页面内容,也就看不到页面里写的排除意图;而这篇如果仍然被其他页面链接着,索引侧可以凭链接与已有的URL 信息保留一条记录,呈现为「无摘要」的那种结果。看起来像「明明屏蔽了还在」,实际是把抓取拦掉之后,索引层失去了判断依据。所以只在文件里写规则,效果是不可控的,而不是更强。
预览页和带参数地址该用哪一种
站内的草稿链接带预览参数才能访问,这类地址属于要挡索引的一类:它对外可读,但内容还没定稿,被收入索引就会出现旧版本或半成品页面。合理的分工是这样:预览与未发布内容用页面级排除标记,配合参数化地址不进站点地图;成批的后台目录、附件目录这类不需要被抓取的路径,用文件级规则挡抓取来省配额。站内的 robots 配置负责生成与维护文件层面的规则,而索引层面的意图要落在页面上。
配置顺序与验证方法
| 目的 | 用哪一种 | 前提条件 | 常见误用 |
|---|---|---|---|
| 单篇不要出现在结果里 | 页面级排除标记 | 该页面仍可被抓取读取 | 只在文件里禁止该路径 |
| 预览与带参数地址 | 页面级排除标记 | 参数地址不写进清单 | 当正式页一起推送 |
| 整个后台目录省配额 | 文件级排除规则 | 该目录无需要索引的内容 | 用它当不收录的手段 |
| 下线已收录内容 | 排除标记或返回正确状态码 | 等重新抓取生效 | 直接屏蔽抓取 |
顺序上先定页面级意图,再定文件级范围,避免后者把前者挡住。验证要等重新抓取,改完不会立刻在结果里变化;同时检查伪静态与站点地图这两处:清单里如果还带着这条地址,或者站内仍有链接指向它,索引侧就有继续保留它的理由。已下线的正式文档应从清单里移除,而不是留在里面靠排除标记互相抵消。
常见问题
问:加了排除标记但结果里还在,是没生效吗? 答:先看这条路径是否被文件规则屏蔽了抓取——读不到页面就读不到标记。其次看重新抓取是否发生过,索引层面的变化有延迟。
问:整站测试期怎么挡? 答:测试环境用访问控制或文件级规则都可以;一旦这个域名要正式对外,再逐项改成页面级意图,避免正式内容因为文件规则而读不到排除标记。
问:带参数的地址要逐个写规则吗? 答:不必。参数地址的处理原则是不进入清单、不给正式索引意图,比逐条写排除规则更省事,也更不容易漏。