这三个标签在蜘蛛的哪一步生效
蜘蛛访问一个入口页,动作顺序大致是:发起请求、拿到 HTML、解析 head、决定要不要继续抓正文、提取正文里的链接。meta 标签在第三步就起作用,也就是说,它比页面正文更早影响蜘蛛的判断。
三个标签各管一件事,互不替代:canonical 管“哪一份是正本”,nofollow 管“链接跟不跟”,noindex 管“这个页面收不收”。把它们混着用,或者凭感觉加一个“保险”,很容易把入口页本该有的链接发现能力挡掉。
canonical:别把入口页的正本身份让出去
入口页的价值在于承载一批待发现的链接。如果给所有入口页加上一个指向主站首页的 canonical,等于告诉蜘蛛“这些页面都是首页的副本”。结果是这批页面可能被合并进首页,而首页上并没有那么多目标链接,链接发现能力反而被集中到了一个不产生链接的地方。
几个常见误操作:
- canonical 跨站指向目标站点。这等于把入口页当作目标页的副本,入口页自身通常不会再被单独保留。
- canonical 指向一个 302 地址、404 地址或不存在的 URL。蜘蛛会忽略或判定为无效,等于白设。
- 同一个页面输出了多个互相冲突的 canonical,多数情况下蜘蛛会忽略全部。
- canonical 由 JS 动态插入。不同爬虫对脚本的渲染能力差异很大,能服务端输出就别靠脚本。
比较稳妥的做法是:入口页之间如果要归并,指向一个真实存在、可正常抓取的入口聚合页,不要跨站指向目标站,也不要把一批功能不同的入口页统一 canonical 到首页。
nofollow:页面级和链接级的差别很大
nofollow 有两种用法,效果天差地别。
写在 a 标签上,只影响那一条链接;写在 meta robots 里,影响整页的所有链接。新手最容易犯的错,是担心“链接太多被当成作弊”,于是在入口页 head 里加一个页面级 nofollow,结果整页目标链接一条都不会被跟随,入口页彻底失去意义。
还需要注意:rel="nofollow" 在部分搜索引擎眼里只是提示,但在另一些引擎里仍被比较严格地执行。如果你的流量来源以百度为主,页面级 nofollow 的杀伤力会更明显。rel="sponsored" 和 rel="UGC" 是给广告位和用户投稿内容用的,不要拿来标入口页的目标链接。
合理的用法是:只对确实不想被跟的链接单独加,比如登录入口、隐私政策、后台地址这类噪音链接。
noindex:不收录不等于不抓取
noindex 的作用是让页面不进索引,但蜘蛛通常仍会抓取这个页面,并且仍然会跟随页面里的链接——前提是链接没有被 nofollow。
这一点对入口页很关键。如果你的定位是“不想让入口页出现在搜索结果里,但希望它能带出目标链接”,那么 noindex + follow 是一组常见搭配。
但要注意两个坑:
- noindex 和 nofollow 同时加,等于“别收录,也别跟链接”,入口页的价值直接归零。
- robots.txt 里禁止抓取,同时又指望 noindex 生效。蜘蛛抓不到页面,自然也读不到 noindex,这个组合是死结。
另外,长期处于 noindex 状态的页面,回访频率往往会下降。如果你的入口页需要按节奏轮换目标链接,这一点会影响到轮换周期的设置。
常见组合对照
- 希望被收录,也传递链接:默认状态即可,不需要额外写 index、follow。
- 不希望被收录,但要传递链接:noindex, follow。
- 希望被收录,但不传递链接:index, nofollow,入口页场景里很少用。
- 既不收录也不传递:noindex, nofollow,入口页基本等于废页。
注意,多个 robots 相关的 meta 标签如果同时出现,蜘蛛一般按最严格的合并处理,所以别在同一页里堆好几条。
上线前的自查动作
这三个标签都属于“写错了不会报错、但从数据上看不出来”的类型。建议在入口页上线前做几件事:用命令行工具或查看页面源代码,确认 head 里实际输出了什么,而不是只看模板文件;确认 canonical 只有一个,且指向的地址能正常打开;确认 robots meta 是服务端渲染出来的,不是脚本塞进去的。
入口页的定位越单纯,标签就应该越简单。一个只负责把链接摆出来让蜘蛛看到的页面,通常不需要 canonical,也不需要页面级 nofollow。加得越多,越容易把自己挡住。