搜尋抓取

多入口站点的 URL 發現:先统一主机名與协议

同一份内容挂在 http、https、带 www 和不带 www 等多個入口上时,抓取路径會被拆散,URL 發現效率随之下降。本文說明搜尋蜘蛛区分站点的依據,给出入口盘点方法、301 收敛顺序,以及端口、測試域名、m 站等容易被忽略的小入口。

搜尋抓取

多入口站点的 URL 發現:先统一主机名與协议

搜尋蜘蛛怎么判断“這是同一個站”

抓取队列是按 URL 组织的,而 URL 里最靠前的部分就是协议和主机名。http 與 https、带 www 與不带 www、example.com 與 example.com:8080,在抓取系統眼里是几個不同的入口。哪怕頁面内容完全一样,它們也會各自形成一條發現路径,各自记錄自己的抓取情况。

這類問题在改版、上 CDN、加證书之後特別容易出現:新入口出現了,舊入口没有關掉,两邊的内鏈還在互相指。

多入口會带来哪些具体麻烦

  • URL 發現被摊薄:站内連結一半指向 A 主机、一半指向 B 主机,蜘蛛要跑两遍才能覆盖同一批頁面。
  • Sitemap 声明冲突:文件里寫的是 https 版本,站内連結却大量使用 http 版本,声明和實际入口對不上。
  • 日誌失真:按 URL 統計訪問时,同一頁面被拆成几份,很难判断哪些入口真的被走過。
  • canonical 與重定向打架:頁面自己声明 A 為主,服務器又把 A 跳到 B,蜘蛛拿到的是矛盾信号。
  • 測試域名被带進来:预發环境、CDN 預設域名如果缺少訪問限制,可能被外部連結拉進抓取队列。

先做一次入口盘点

不依赖工具也能查個大概:

  1. curl -I 分別請求 http 與 https、带 www 與不带 www 的首頁,看返回的是 200 還是 301,跳轉终点是哪一個。
  2. 在服務器日誌里按 host 分组統計,看有几個主机名在持續被訪問,其中哪些是自己没打算公開的。
  3. 抽查首頁、栏目頁、詳情頁源碼,看内鏈寫死的主机名是否一致;導航、頁脚、面包屑经常是三套寫法。
  4. 打開 sitemap 索引和分片文件,確認里面所有 loc 都指向同一個主入口。
  5. 检查 CDN 與反向代理配置,有没有把某個域名的請求直接回源到同一份内容。

整理動作按這個顺序做

先選定一個主入口,再让其它入口全部 301 過去,顺序不要反過来。

  • 服務器层面:把非主入口的协议與主机名统一 301 到主入口,保留原路径和參數,不要一律跳到首頁。
  • 站内层面:模板里的内鏈、分頁、篩選、RSS 輸出,全部改用主入口。
  • Sitemap 层面:文件内容與主入口一致,舊文件如果不再使用就替換掉,不要長期留两份。
  • 声明层面:canonical、og:url 與主入口保持一致,避免和 301 给出相反信号。
不要用 robots.txt 屏蔽舊入口来代替跳轉。被屏蔽的 URL 仍然可能被外部連結發現,蜘蛛只是拿不到跳轉信号,入口問题會一直留着。

容易被忽略的小入口

  • 端口号:不带端口與带 80/443 的寫法,在部分服務器配置下會被当成不同来源。
  • 大小寫與结尾点:Example.com、example.com. 在部分解析环境下指向同一份内容。
  • IP 直连和临时域名:調试时留下的連結、监控探针、第三方截图服務都可能留下记錄。
  • m 站與多語言子域:如果内容與主站重复,需要明确各自的主入口關系,而不是让两邊互鏈。
  • 混合内容:HTTPS 頁面里引用 HTTP 资源,會让蜘蛛在两種协议之間来回切換。

整理之後看什么

观察两周左右的日誌,重点看三件事:持續被訪問的主机名是否收敛到一個;同一頁面的抓取记錄是否合並;新頁面上线後第一次被發現的時間有没有變短。這些指标比“收錄了多少條”更能說明入口是否已经理顺。