啟用 CDN 後,很多站点會同时存在多個可訪問同一份内容的主机名或 URL 形態:加速域名、回源域名、带 www 與不带 www、HTTP 與 HTTPS、带端口号的測試域名等。對搜尋引擎蜘蛛来说,這些都是彼此獨立的 URL 入口。一旦内部連結、Sitemap 或重定向里混用了不同形態,抓取路径就會被拆散,日誌中常见的表現是同一篇文章被反复抓取、邊缘缓存频繁未命中。
一、抓取路径分散的常见来源
- HTML 中的绝對連結不统一:模板、編輯器、富文本粘贴内容里残留舊域名或回源域名。
- 重定向目标不規范:301 跳轉的目标寫成 CDN 临时域名,而不是規范域名。
- Host 头處理過于宽松:源站對任意 Host 都返回 200,蜘蛛通過其他域名也能拿到完整頁面。
- Sitemap 與 Canonical 不一致:Sitemap 里寫 A 域名,頁面 Canonical 寫 B 域名。
- 协议與端口未收敛:HTTP 與 HTTPS、不同端口同时可訪問且没有跳轉。
二、如何確認問题确實存在
最直接的方法是取一段時間(例如 7 天)的服務器或 CDN 訪問日誌,按 Host 分组統計蜘蛛請求量與獨立 URL 數。如果同一個路径在多個 Host 下都有稳定抓取量,說明入口已经分散。再抽取几條典型 URL,用带 Host 头的請求對比响應内容與狀態碼,检查是否存在内容相同、URL 不同的情况。
判断标准不是“某個域名能不能訪問”,而是“蜘蛛是否把它当成一個獨立的可索引入口在抓取”。
三、收敛抓取路径的落地做法
- 确定唯一規范域名,其余形態做 301 永久跳轉,跳轉目标一次到位,避免 A→B→C 的多跳鏈。
- 模板輸出的内鏈與资源引用统一使用規范域名,减少人工編輯时带入的舊域名。
- Canonical、Open Graph、Sitemap、RSS 中的 URL 全部對齐到同一形態,包括大小寫與尾斜杠。
- 源站對非規范 Host 返回 301 或直接拒绝,不要對任意 Host 都返回 200。
- CDN 缓存键归一,把协议、Host、查询參數中的無效字段剥离,降低因 URL 形態不同造成的重复回源。
- robots.txt 在各域名下保持一致,避免某個邊缘域名放行、主域名限制造成的抓取指令冲突。
四、驗證與日常监控
調整後不必期待立刻见效,抓取路径的切換通常需要一段時間。可以從三個指标观察:非規范 Host 的蜘蛛請求占比是否下降、單頁被重复抓取的次數是否收敛、邊缘缓存命中率是否回升。把這三項加入日常巡检表,每次上线新模板或更換 CDN 节点时重新核對一遍,比事後排查更省成本。
需要提醒的是,路径收敛只能减少無效入口,让已有的抓取资源更集中,它本身並不决定内容是否被收錄。内容质量、更新节奏與站点整体可訪問性依然是前提。