搜索蜘蛛怎么判断“这是同一个站”
抓取队列是按 URL 组织的,而 URL 里最靠前的部分就是协议和主机名。http 与 https、带 www 与不带 www、example.com 与 example.com:8080,在抓取系统眼里是几个不同的入口。哪怕页面内容完全一样,它们也会各自形成一条发现路径,各自记录自己的抓取情况。
这类问题在改版、上 CDN、加证书之后特别容易出现:新入口出现了,旧入口没有关掉,两边的内链还在互相指。
多入口会带来哪些具体麻烦
- URL 发现被摊薄:站内链接一半指向 A 主机、一半指向 B 主机,蜘蛛要跑两遍才能覆盖同一批页面。
- Sitemap 声明冲突:文件里写的是 https 版本,站内链接却大量使用 http 版本,声明和实际入口对不上。
- 日志失真:按 URL 统计访问时,同一页面被拆成几份,很难判断哪些入口真的被走过。
- canonical 与重定向打架:页面自己声明 A 为主,服务器又把 A 跳到 B,蜘蛛拿到的是矛盾信号。
- 测试域名被带进来:预发环境、CDN 默认域名如果缺少访问限制,可能被外部链接拉进抓取队列。
先做一次入口盘点
不依赖工具也能查个大概:
- 用 curl -I 分别请求 http 与 https、带 www 与不带 www 的首页,看返回的是 200 还是 301,跳转终点是哪一个。
- 在服务器日志里按 host 分组统计,看有几个主机名在持续被访问,其中哪些是自己没打算公开的。
- 抽查首页、栏目页、详情页源码,看内链写死的主机名是否一致;导航、页脚、面包屑经常是三套写法。
- 打开 sitemap 索引和分片文件,确认里面所有 loc 都指向同一个主入口。
- 检查 CDN 与反向代理配置,有没有把某个域名的请求直接回源到同一份内容。
整理动作按这个顺序做
先选定一个主入口,再让其它入口全部 301 过去,顺序不要反过来。
- 服务器层面:把非主入口的协议与主机名统一 301 到主入口,保留原路径和参数,不要一律跳到首页。
- 站内层面:模板里的内链、分页、筛选、RSS 输出,全部改用主入口。
- Sitemap 层面:文件内容与主入口一致,旧文件如果不再使用就替换掉,不要长期留两份。
- 声明层面:canonical、og:url 与主入口保持一致,避免和 301 给出相反信号。
不要用 robots.txt 屏蔽旧入口来代替跳转。被屏蔽的 URL 仍然可能被外部链接发现,蜘蛛只是拿不到跳转信号,入口问题会一直留着。
容易被忽略的小入口
- 端口号:不带端口与带 80/443 的写法,在部分服务器配置下会被当成不同来源。
- 大小写与结尾点:Example.com、example.com. 在部分解析环境下指向同一份内容。
- IP 直连和临时域名:调试时留下的链接、监控探针、第三方截图服务都可能留下记录。
- m 站与多语言子域:如果内容与主站重复,需要明确各自的主入口关系,而不是让两边互链。
- 混合内容:HTTPS 页面里引用 HTTP 资源,会让蜘蛛在两种协议之间来回切换。
整理之后看什么
观察两周左右的日志,重点看三件事:持续被访问的主机名是否收敛到一个;同一页面的抓取记录是否合并;新页面上线后第一次被发现的时间有没有变短。这些指标比“收录了多少条”更能说明入口是否已经理顺。