两条指令,管的不是一回事
meta robots 是页面级的抓取与索引指令,告诉蜘蛛这个页面要不要收进索引、要不要跟进链接;canonical 是正本声明,告诉搜索引擎在多个相似 URL 中哪个才是应该被收录的那一个。一个做减法,一个做加法,单独看都不复杂,但放在同一个模板里,很容易互相打架。
尤其是批量生成的页面、带筛选参数的列表页、以及改版过渡期的旧模板,最常出现指令矛盾的情况。等到发现流量掉了再回头查,往往已经过了好几周。
常见的冲突组合
- noindex 配自指 canonical:两条指令对同一个 URL 给出相反态度,搜索引擎一般会遵守 noindex,canonical 等于白写,但容易让人误以为页面是可索引的。
- noindex 配指向他页的 canonical:页面本身不索引,却把信号集中送给目标页。如果目标页内容并不对应,等于把不相干的权重堆过去。
- canonical 指向一个 noindex 页面:正本指向了一个明确说“别收我”的地址,结果两个 URL 都可能进不了索引。
- canonical 指向 404 或 301 链上的地址:目标不存在,声明自然无效,页面只能按自身情况参与索引判断。
- HTTP 头与页面内指令不一致:服务器在响应头里加了 X-Robots-Tag,模板里又写了另一套 meta robots,两者叠加时以更严格的一方为准。
- 分页列表的 canonical 全部指向第一页:如果第一页恰好是 noindex,整组列表页就会一起被挡在索引之外。
批量自查怎么做
单页肉眼检查意义有限,关键是覆盖到位。可以按下面的顺序走一遍:
- 从后台或日志里导出全站可访问 URL 清单,按模板类型分组,比如文章页、列表页、标签页、搜索页。
- 用抓取工具批量请求这些 URL,把响应状态码、响应头中的 X-Robots-Tag、HTML 里的 meta robots、link rel=canonical 提取成表格。
- 筛选出 noindex 与 canonical 同时存在的行,逐条判断是有意为之还是模板误伤。
- 对每个 canonical 目标单独抓一次,确认它返回 200、自身没有 noindex、也没有再指向另一个地址。
- 检查模板变量,看是否有页面因为字段为空而输出了空 canonical 或默认指向首页的情况。
先修模板,再修数据。模板不改,手工改完的页面下次生成又会回到原样。
几个容易忽略的细节
- canonical 建议使用绝对地址,相对路径在部分解析场景下容易出错。
- canonical 指向的地址最好与页面主域名、协议、大小写保持一致,带不带 www、http 还是 https 都算不同 URL。
- 站内搜索页、排序参数页这类低价值页面,用 noindex 更合适,但不要再给它们写 canonical,保持指令单一。
- 如果页面需要保留权重传递,可以考虑 noindex, follow,让蜘蛛继续跟进站内链接。
- 测试环境如果对外开放,记得整体加一层访问限制,而不是只靠页面里的 noindex。
改完之后的验证节奏
指令调整不会立刻生效,通常需要等下一次抓取和重新评估。比较稳妥的做法是先挑一个小栏目试点,观察两三周,确认索引状态和落地页表现没有异常,再推到全站模板。同时在内容更新记录里写清修改时间、影响范围和责任人,避免下一次改版时又踩同一个坑。
最后提醒一句:这两条指令只能影响搜索引擎的处理方式,不能决定收录结果。把它们写对,是减少干扰,不是保证什么。