后台页、筛选参数页、临时活动页、重复的列表页——站点里总有一些 URL 不该出现在搜索结果里。这时候常被翻出来的三个工具是 robots.txt、noindex 和 canonical。它们确实都能影响收录结果,但作用的环节完全不同,混着用经常得到相反的效果。
先分清三件事:能不能抓、要不要索引、留哪个版本
收录大致可以拆成两步:蜘蛛先把 URL 抓下来,搜索引擎再决定要不要把它放进索引。三个工具分别卡在不同的位置上。
- robots.txt:管抓取。写了 Disallow,蜘蛛通常不会去请求这个 URL,也就读不到页面内容。
- noindex:管索引。写在 head 里的 meta 标签或响应头中,但蜘蛛必须抓到页面才能看到它。
- canonical:管版本选择。它不阻止索引,只是提示“这几个内容相近的 URL 里,哪个是主版本”。
一句话记法:robots.txt 是不让人进门,noindex 是让人进了门也别登记,canonical 是说“登记这一个就够了”。
最常见的坑:robots.txt 和 noindex 一起用
如果一个页面既被 robots.txt 挡住,又加了 noindex,蜘蛛抓不到页面,自然读不到 noindex,那个标签等于不存在。结果是页面可能仍以“仅 URL”的形式留在索引里,而你也没有别的办法把它请出去。
想移除一个已经收录的页面,顺序一般是:先放开抓取,加上 noindex,等索引里确实不见了,再决定要不要重新挡抓取。急着先 Disallow,往往把问题拖得更久。
不同场景该怎么选
内容有价值,只是存在多个版本
用 canonical 指回主版本,或者直接 301。不要用 noindex 一刀切,否则主版本也会丢掉入口。
内容没必要出现在搜索结果里
比如后台、订单页、测试页。加 noindex,同时保持可抓取,让蜘蛛能读到这个指令。这类页面通常也不必做内链。
纯内部搜索、接口、无限滚动的参数组合
这类 URL 数量可能极大,用 robots.txt 减少抓取浪费是合理的,但要接受一个前提:已经收录的旧 URL 不会因为 Disallow 就自动消失,该清理的还是要走 noindex 或者 404/410。
页面已经废弃
有替代页面的用 301,没有的用 410 或 404,比留着 noindex 更干净——noindex 的页面本身仍占一个 URL。
几个容易忽略的细节
- noindex 和 canonical 同时出现在一个页面上,信号会互相干扰,尽量避免。
- canonical 要指向真实可访问、可被抓取的 URL,指向一个 404 或重定向地址基本无效。
- canonical 是建议不是命令,搜索引擎仍可能按自己的判断选择版本。
- 响应头里的 X-Robots-Tag 对 PDF、图片等非 HTML 资源同样有效,meta 标签则不行。
上线后的验证顺序
- 用 URL 检查类工具看蜘蛛实际抓到的 HTML 里有没有 noindex,canonical 是否被识别。
- 确认 robots.txt 没有把需要读取 noindex 的页面挡住。
- 翻服务器日志,看这些页面有没有被抓过。日志里一次都没有,说明卡在抓取环节,先解决那一步。
- 用 site: 粗略观察某个目录下还剩多少 URL,只看趋势,数字本身不精确。
- 给足时间。指令要等重新抓取才会被读到,观察周期通常以周计。
收录控制是一个“发出建议、然后等待”的过程,没有哪个标签是按下就立刻生效的开关。