站点运营

站点运营:搜尋蜘蛛的URL發現,從 www 與非 www、HTTP 與 HTTPS 的主机名统一说起

同一份内容可能對應带 www 與不带 www、http 與 https 等多套 URL,蜘蛛會把它們当成不同地址分別抓取。本文给出四條 curl 命令快速核對狀態碼,梳理從 301 跳轉、證书覆盖、内鏈與站点地图到 CDN 回源域名的统一做法,並列出測試子域、端口變体等容易漏掉的细节。

站点运营

站点运营:搜尋蜘蛛的URL發現,從 www 與非 www、HTTP 與 HTTPS 的主机名统一说起

很多站点在浏览器里看起来只有一個地址,但從抓取工具的角度看,同一份内容可能對應着好几套 URL:带 www 與不带 www 各一套,http 與 https 各一套,有的還带預設端口或測試子域。蜘蛛把每一套都当作獨立 URL 去發現和排队,抓取額度被摊薄,重复内容也更容易出現。這類問题不难查,但需要按顺序排查一遍。

常见的几種主机名變体

  • 协议變体:http://example.com 與 https://example.com 都能打開,且都返回 200。
  • 子域變体:www 與非 www 同时可訪問,頁面内容完全一致。
  • 端口與調试域名:example.com:8080、test.example.com、staging 环境對外可訪問。
  • 大小寫與尾随点:Example.com、example.com. 在某些服務器配置下也能返回 200。
  • CDN 與源站域名:回源域名被搜尋引擎發現並抓取。

先確認到底有几個版本能返回 200

用几條命令就能看清楚。把下面几個地址依次請求一遍,重点看狀態碼最终跳轉到的 URL

  1. curl -I http://example.com
  2. curl -I https://example.com
  3. curl -I http://www.example.com
  4. curl -I https://www.example.com

如果四個都返回 200,說明存在四個可抓取的副本;如果返回 301 並指向同一個規范地址,那基本没問题。另外可以在服務器日誌里按 Host 字段統計,看看到底有多少個主机名在被真實抓取。

统一策略:只保留一個規范主机名

确定一個規范形式(例如 https://www.example.com),其余全部 301 過去。做法上注意几点:

  • 用 301,不用 302 或 JS 跳轉。前端脚本跳轉和 meta refresh 對抓取工具来说往往只是頁面内容,主机名统一得不够明确。
  • 跳轉要一步到位。http 跳到 https 再跳到 www 的两跳鏈路,尽量合並成一跳。
  • 證书要覆盖全部變体。否則 http 版本能跳,https 的另一個變体却直接报错,抓取记錄里就會出現失敗項。
  • 内鏈、站点地图、canonical 全部寫同一個主机名。這三處寫错,等于自己把蜘蛛引到非規范版本上。

容易被忽略的几個点

站点地图與 canonical 的一致性

站点地图里如果混着两種主机名,等于主動提交重复 URL。canonical 也建议自引用到規范主机名,別指向另一個版本。

測試环境不要暴露在公網

staging、dev、uat 這類子域如果没做訪問控制,被抓到之後可能長期留在索引里,清理起来比预防麻烦得多。

CDN 回源域名的處理

部分 CDN 會提供預設回源域名,如果它可以直接訪問且返回 200,最好在源站或 CDN 侧限制,只允许特定 Host 的請求。

主机名统一不是一次性工作。換證书、換 CDN、加子域的时候,都值得再跑一遍上面那四條 curl。

把這件事做干净,收益不是立刻多收錄多少頁,而是让抓取額度集中在一個規范地址上,服務器日誌里的抓取记錄也更容易看懂。