搜尋抓取

多語言與地区版本:蜘蛛在 hreflang 和备用 URL 之間怎么走

多語言與分地区站点常有多份 URL,蜘蛛需要分別發現和抓取。本文說明子目錄、子域名、國別域名三種结构下的抓取差异,hreflang 與 canonical 各自的作用,以及語言切換器、地区重定向、Sitemap 拆分等做法對 URL 發現的影响,並给出可落地的检查顺序。

搜尋抓取

多語言與地区版本:蜘蛛在 hreflang 和备用 URL 之間怎么走

多語言或分地区的站点,往往同一批内容存在多份 URL。對搜尋蜘蛛来说,這不是一個頁面,而是一组需要分別發現、分別抓取的地址。抓取路径是否清晰,直接决定蜘蛛能不能把各語言版本都走到,而不是只停在預設語言的那一份上。

三種常见结构,蜘蛛走法不同

多語言站点的 URL 组织方式大致有三種,抓取上的注意点也不同:

  • 子目錄(example.com/en/、example.com/de/):同一域名下,内鏈和 Sitemap 最容易统一管理,蜘蛛從首頁就能顺着語言切換連結走到各個版本。
  • 子域名(en.example.com):抓取和收錄會按站点分別計算,子域之間的内鏈如果很弱,蜘蛛可能長時間只覆盖其中一個。
  • 國別域名(example.de):地区信号明确,但各站点彼此獨立,需要各自的 Sitemap、内鏈和服務器配置都到位。

hreflang 不是抓取指令

hreflang 的作用是告诉搜尋引擎,這几個 URL 是同一内容的不同語言或地区版本,它不负责把蜘蛛引到某個頁面。蜘蛛能不能發現這些 URL,仍然取决于它們是否出現在可抓取的 HTML 連結、Sitemap 或其他入口里。常见寫法要求双向互指:A 頁面标注 B,B 頁面也要标注 A,並可用 x-default 指向預設版本。标注寫错、指向 404 或指向重定向鏈,都會让這组關系失效,但不會直接阻止抓取。

被抓取不等于被当作獨立版本收錄

蜘蛛可能把几個語言版本都抓一遍,最终由搜尋引擎判断哪一份作為该語言下的展示结果。如果頁面自己声明了 canonical 却指向另一個語言版本,等于主動放弃這一份的獨立性。多語言站点的 canonical 通常應指向自身,再用 hreflang 處理語言對應關系。

容易让蜘蛛只看到一份的几個做法

  • 語言切換靠 JavaScript 或 Cookie 判断,預設 HTML 里只有一種語言,蜘蛛拿到的也是這一份。
  • 切換器用 button 或 span 加事件,而不是真正的 a 标簽連結。
  • 按 IP 或 UA 直接 302 到對應語言首頁,蜘蛛從不同来源看到不同跳轉。
  • 机器翻译版本批量生成,质量低且互相内鏈混乱,抓取预算被摊薄。

让路径更清楚的几個動作

  1. 每個語言版本都有獨立、稳定、可直接訪問的 URL,不依赖脚本跳轉。
  2. 語言切換器使用真實的 a 标簽,放在頁头或頁脚等每頁都有的位置。
  3. 按語言拆分 Sitemap,或在 Sitemap 中一並标注語言對應關系。
  4. 检查服務器是否按 UA、IP 返回不同的 HTML;對蜘蛛應返回與用戶一致的預設版本。
  5. robots.txt 不要誤拦某個語言目錄,改名或迁移时同步更新。

服務器與分發這一层

使用 CDN 或地区分發时,確認各語言版本在蜘蛛常用来源地都能正常返回 200,而不是被地区規則重定向或拦截。响應時間過長的版本,抓取频率往往會被压低,覆盖自然變慢。

怎么观察

把服務器日誌按目錄或子域分组,分別看各語言版本的抓取次數與狀態碼分布;對比 Sitemap 中提交的 URL 數量和實际被抓的數量。如果某個語言版本長期没有抓取记錄,先回到内鏈和入口這一层检查,而不是急着調整 hreflang。

多語言站点的抓取問题,多數不是标注寫得不對,而是某一版 URL 根本没有可被發現的入口。