搜尋抓取

多語言站点的 URL 结构與蜘蛛抓取:語言版本怎么被找到

多語言站点常出現主語言被抓、其他語言版本長期未抓取的情况。本文從 URL 结构、hreflang、語言切換器内鏈、Sitemap 拆分和自動跳轉等角度,說明蜘蛛是如何發現並走到各語言版本的,以及可以用哪些方式自查覆盖情况。

搜尋抓取

多語言站点的 URL 结构與蜘蛛抓取:語言版本怎么被找到

多語言或多地区站点有一個常见現象:主語言目錄被蜘蛛抓得很勤,其他語言版本却長期停留在“已發現、未抓取”的狀態。原因通常不在服務器,而在 URL 结构和内鏈——蜘蛛不會因為頁面上寫着“這是英文版”,就自動去抓另一種語言。

每個語言版本都是獨立 URL,需要獨立的入鏈

不管是 /en/、en.example.com 還是 ?lang=en,在蜘蛛眼里都是各自獨立的地址。它們之間如果没有可点击的真實連結,發現路径就断了。預設語言版本往往占據首頁和導航的主要位置,其他語言版本只靠 hreflang 标注關联,這时蜘蛛知道“關系存在”,却未必有理由马上抓取。

三種常见做法的抓取差异

  • 子目錄(example.com/en/):與主站共享域名權重,連結传递最直接,蜘蛛沿站点结构就能走到。
  • 子域名(en.example.com):會被当作相對獨立的站点,需要單獨维護 Sitemap 和内鏈,抓取节奏可能和主域名不同。
  • 參數(example.com/page?lang=en):地址容易因參數顺序、大小寫产生多個變体,蜘蛛需要額外判断是否同一個頁面,抓取效率通常最低。

這里没有绝對的對错,但结构越接近普通目錄,蜘蛛的理解成本越低。

hreflang 是關联說明,不是發現通道

hreflang 的作用是告诉蜘蛛這几個 URL 是同一内容的不同語言版本,它本身不负责“带路”。因此需要满足几点:各語言版本互相引用、每個版本包含自引用、必要时用 x-default 指向預設版本。如果只有單向标注,蜘蛛可能無法完整理解這组頁面之間的關系。

把 hreflang 当成關系描述,把内鏈当成發現路径,两者缺一不可。

語言切換器要能被爬到

很多站点的語言切換器是 select 下拉或 JS 事件,蜘蛛点不動。更稳妥的做法是用真實的 a 标簽:

  • 每個語言版本的導航或頁脚,都放指向其他語言對應頁面的連結;
  • 切換器用普通連結,而不是按钮触發;
  • 深层頁面也要有出口,不要只让首頁互相連結。

如果站内只有首頁互鏈,深层語言頁面很容易變成孤岛。

Sitemap 的分法

常见做法有两種:每個語言單獨一個 Sitemap,在索引文件里匯總;或者在同一個 Sitemap 里用 xhtml:link 标注各語言版本。前者實現简單、排查直观,後者信息集中在一條记錄里。選擇哪一種主要看维護成本,關键是別漏掉語言目錄下的深层 URL。

自動跳轉與服務器的坑

按訪問者 IP 或浏览器語言自動 302 跳轉,是常见但容易出問题的做法:蜘蛛從一個固定 IP 抓取时可能只看到一種語言,其他版本就更难被發現。如果必须做跳轉,至少保證不跳轉时頁面自身可訪問,並提供手動切換入口。另外,多語言站点往往部署了多套服務或 CDN 規則,返回 5xx 或超时的比例上升时,蜘蛛會放慢抓取速度,語言目錄這類“次要路径”通常最先被减少訪問。

怎么检查

  1. 按語言目錄拆分服務器日誌,對比各目錄的抓取次數和狀態碼分布;
  2. 抽查几個深层語言頁,看它們在站内是否有對應的語言連結;
  3. 检查 hreflang 是否互相回指、是否有自引用;
  4. 確認各語言 Sitemap 是否被提交並能正常訪問。

多語言站点的 URL 發現,本质上還是“有没有路可走”的問题。结构清晰、内鏈到位、服務器稳定,蜘蛛會按自己的节奏覆盖更多語言版本;反過来,只靠 hreflang 和自動跳轉硬凑,效果往往有限。