同一篇内容在站内出现多个 URL,是收录不稳定的常见原因。参数、排序、筛选、打印版、大小写、末尾斜杠、协议和主机名,都可能让一个页面变成多个地址。对爬虫来说,每个 URL 都是独立入口,需要先抓取,才能判断内容是否重复。
先分清抓取和收录
抓取是搜索引擎访问页面并读取内容,收录是它决定把某个 URL 放进索引。一个页面被抓取,不代表它会被收录;多个 URL 内容相同,也不代表每个都会进索引。常见状态是:变体 URL 被“已抓取,未编入索引”,或者索引里只保留了一个代表 URL。所以处理重复 URL,目标不是让每个地址都被收录,而是让该留下的那个稳定下来。
多个 URL 通常从哪来
- 跟踪参数、推荐参数、会话 ID,让同一页面产生大量地址。
- 排序、筛选、视图切换等交互,生成可被抓取的 URL。
- 打印版、AMP 版、移动版与桌面版分开部署。
- http 与 https、www 与非 www、末尾带不带斜杠、路径大小写不统一。
- 站内链接、sitemap、分享按钮各自指向不同版本。
这些变体越多,抓取预算被消耗得越快,真正需要收录的页面反而可能被拖慢。
搜索引擎怎么选代表 URL
canonical 是一个提示,不是强制指令。搜索引擎会综合看内链指向、sitemap 里放的是哪个地址、外链落在哪、重定向关系、内容一致程度和历史表现。也就是说,页面里写了 canonical,但站内链接仍然大量指向另一个地址,代表 URL 仍可能不是你想要的那个。
想让某个 URL 被选为代表,先让站内信号统一指向它,再谈 canonical 和 sitemap。
按影响面处理,顺序可以参考
- 先确定希望被收录的目标 URL。它应当返回 200,内容完整,不需要登录或特殊操作就能访问。
- 把导航、面包屑、正文内链、sitemap、分享按钮统一指向目标 URL,减少变体入口。
- 对不打算收录的变体,优先用 301 永久重定向;参数类无法重定向时,再用 canonical 指向目标版本。
- sitemap 只放目标 URL,不要把同一内容的多个版本混在一起提交。
- 观察一轮抓取周期,看索引里保留的是哪个地址,不要每天改一次规则。
常见变体的处理建议
参数与排序筛选
能改成静态路径的,优先改。不能改的,让无参数版本可正常访问,并在变体上 canonical 到该版本。不要用 robots.txt 直接屏蔽目标页,以免连正常抓取也挡掉。
打印版、AMP 与移动版
打印版通常没有独立价值,可以 noindex 或 canonical 到正文。移动版如果和桌面版分开部署,要确认两端对应关系正确,避免把收录分散到两个地址。
大小写、斜杠、协议与主机名
这些应在服务器层面用 301 统一到唯一形式,而不是靠页面里的 canonical 兜底。规范形式确定后,所有入口都指向它。
分页
分页通常不是重复内容,每一页有自己的内容。一般情况下自 canonical 即可,不要把第二页之后的页面全部 canonical 到第一页,除非那确实是“查看全部”。
收敛之后看什么
重点看索引中的代表 URL 是否稳定、抓取频次是否更集中、目标页能否进入索引。只盯收录总量容易误判,因为变体减少时总量可能下降,但有效页面反而更清楚。如果目标页仍不被选,回头看内链是否统一、内容是否存在实质差异。
处理重复 URL 的核心,是让搜索引擎清楚哪个地址值得留下,而不是把同一份内容反复投喂。收敛完成后给系统一点时间,再根据索引状态做下一轮调整。