站点的技术配置常常互相矛盾:页面 meta robots 写了 noindex,链接上的 canonical 指向另一个地址,Sitemap 里还把这个 URL 列得好好的。三个信号都说自己代表站点意图,蜘蛛只能按优先级做取舍。理解这套优先级,比反复改配置更能省事。
三个信号各自管什么
- robots meta / X-Robots-Tag:页面级指令,管的是这个 URL 要不要进索引。它不阻止抓取,蜘蛛必须先把页面抓下来,才能读到这条指令。
- canonical:去重信号,表达“这段内容的首选地址是哪个”。它既不阻止抓取,也不保证被采纳,只是给蜘蛛一个参考。
- Sitemap:URL 发现渠道,告诉蜘蛛这里有页面、大致什么时候更新过。它是建议,不是命令。
冲突时通常怎么走
- noindex 与 canonical 同页:noindex 更硬,canonical 基本被忽略。但前提是蜘蛛能读到 noindex,所以这个 URL 仍会被抓取。
- noindex 加 robots.txt 屏蔽:蜘蛛读不到 noindex,URL 可能仍被外部链接发现,以无描述的形式出现在结果里。这两个不要叠加使用。
- canonical 指向 A,Sitemap 登记 B:抓取会分散到两个地址,收敛周期被拉长,日志里两条路径都会反复出现。
- Sitemap 里放了 noindex 页面:自相矛盾的配置,既浪费抓取,也会让整份 Sitemap 的可信度打折。
一套可以照着走的排查顺序
- 先确认哪些 URL 真的需要被索引。筛选页、排序参数页、登录后页面通常不在其中。
- 决定这些 URL 是用 noindex 处理,还是用 robots.txt 屏蔽。二选一,别叠加。
- 检查 Sitemap 是否只保留需要收录的规范地址,剔掉 noindex 页面和已经 301 的旧地址。
- 检查内链指向的地址与 canonical 是否一致。内链指向 A、canonical 写 B,是非常常见的自相矛盾。
- 观察一段时间的日志:抓取是否集中到规范地址,被 noindex 的 URL 是否还在被大量访问。
几个容易忽略的细节
noindex 得先被读到
如果 noindex 是靠脚本注入到 head 里的,蜘蛛不一定能执行到那一刻。用服务端直接输出,或者用 X-Robots-Tag 响应头,稳定性更高。
canonical 不是省抓取的工具
把一批参数页 canonical 到主页面,蜘蛛依然会抓取这些参数页,只是把权重归拢到主页面。想真的减少抓取,得靠 robots.txt 或 noindex。
Sitemap 的规模要真实
把大量重复或低质 URL 塞进 Sitemap,会让蜘蛛对整份文件的分发节奏变慢,真正需要收录的新页面反而排在后面。
跳转入口要尽量短
用外部跳转页做入口时,注意跳转方式。302 叠加脚本跳转的链路越长,蜘蛛走到目标页的概率越低,入口尽量直连目标 URL。
配置之间的一致性更重要
单项配置写得对,不代表整套配置能配合。定期把 robots.txt、meta robots、canonical、Sitemap 和内链放在一起对一遍,能省下很多说不清楚的抓取异常。
抓取异常往往不是某一条规则写错了,而是几条规则各自为政。先让它们口径一致,再谈优化。