搜索抓取

多域名与子域名下的 URL 发现:抓取预算被分散后怎么收拢

站点扩展到多个域名或子域名后,蜘蛛其实是按主机分别记账的。本文梳理主机清单怎么列、各主机的 robots.txt 与 Sitemap 如何各自闭环、内链如何回流到主力主机,以及按 host 拆分抓取日志做对账的方法,帮助把分散的抓取预算重新收拢到需要收录的页面上。

搜索抓取

多域名与子域名下的 URL 发现:抓取预算被分散后怎么收拢

很多站点一开始只有一个域名,后来慢慢长出了 m 站、地区域名、活动独立域、静态资源域,甚至几个测试主机。URL 总量没变多少,但蜘蛛的抓取资源被拆到了多个主机上,于是常见的情况是:主站抓取频次下降,某个子域却天天被扫。理解蜘蛛怎么按主机记账,是把这件事理清楚的第一步。

蜘蛛是按主机分别记账的

抓取调度里,主机(更准确地说,是协议加主机名加端口的组合)是相对独立的单位。robots.txt、抓取频次、连接数控制、Sitemap 的归属,通常都以主机为边界生效。这带来两个直接后果:

  • 一个主机抓得慢,不会自动把额度让给另一个主机,只是那个主机自己没抓满;
  • 把内容铺到三个主机,等于让蜘蛛在三个地方分别学习、分别排队。

所以在讨论抓取预算之前,先承认它不是一个总池子,而是一组按主机划分的小池子。

先把主机清单画出来

在做任何调整之前,把所有能被蜘蛛访问到的主机列成一张表,并标出每个主机的角色:

  • 承接索引的主力主机:正文、列表、详情页都在这里;
  • 跳转主机:只做 301 或短链,页面上没有可索引内容;
  • 资源主机:CSS、JS、图片;
  • 附属主机:m 站、地区站、活动页、历史遗留域。

角色写清楚之后,很多问题会自己浮出来:跳转主机为什么还有内链入口?资源主机为什么被请求了正文页?

每个主机的发现通道要各自闭环

robots.txt 与 Sitemap 不要跨主机硬塞

Sitemap 文件里的 URL 应当与 Sitemap 自身同源,把跨主机的 URL 塞进主站的 Sitemap,通常不会被当成有效信号处理。比较稳妥的做法是:每个需要收录的主机各自有 robots.txt 和 Sitemap,再在主站的 Sitemap 索引里引用它们的绝对地址。

主路径尽量在同一主机内走完

从首页到详情页的跳转如果中途换主机,蜘蛛需要额外对陌生主机做一次判断,路径变长,成功率也更容易受影响。能让主路径留在主力主机里,就不要让它绕到附属主机再绕回来。

把抓取预算往需要收录的主机收

  1. 需要被索引的正文,集中到一个主机,附属主机只保留必要页面;
  2. 跳转主机上的旧 URL 用单跳 301 指向目标,不要再链式中转;
  3. 资源主机只在蜘蛛需要渲染时放开,明确不需要抓的路径可以在 robots.txt 里挡掉;
  4. m 站或地区站若与主站是同一套内容,用 canonical 或 hreflang 说明关系,而不是让两边各自被当作独立站点反复抓。

日志按 host 拆开看

把抓取日志汇总到一张表时,加上 host 字段,按主机分组后关注这几项:

  • 每个主机每天被请求的总量与状态码分布;
  • 主力主机的抓取量占全站的比例;
  • 附属主机上被反复抓取、但从不产生有效页面的路径;
  • 跳转主机的 301 是否都是单跳完成。

如果发现主力主机的抓取量在下降,而某个附属主机的请求量在上涨,通常说明入口或 Sitemap 里混进了不该出现的主机。

多主机本身不是问题,问题往往是同一份内容被多个主机同时声明为正式版本,蜘蛛只能自己挑一个。

几个容易踩的坑

  • 为了看起来收录多,把同一批内容复制到多个域名,结果是互相稀释;
  • 证书、DNS 解析或防火墙规则只配了主站,附属主机对蜘蛛不可达,链接变成死路;
  • Sitemap 里混入跨主机 URL,提交后大量被忽略或直接校验失败。

多主机下的抓取问题,本质上不是让蜘蛛多来,而是让它在正确的主机上、沿着清晰的路径走完该走的页面。把主机清单、发现通道和日志对账这三件事定期过一遍,比反复手动提交 URL 更有实际意义。