搜尋抓取

多域名與子域名下的 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 更有實际意义。