搜尋抓取

多語言站点的抓取路径:語言目錄、hreflang 與入口連結怎么摆

多語言站点常出現只有預設語言被频繁抓取、其他语種迟迟不進队列的情况。本文從語言目錄的摆法、hreflang 的用法、語言切換器與内鏈入口、Sitemap 分片几個角度,說明怎样让蜘蛛顺着可点的連結走到每個語言版本,並给出按語言分组核對日誌的思路。

搜尋抓取

多語言站点的抓取路径:語言目錄、hreflang 與入口連結怎么摆

先分清“語言版本”和“語言入口”

多語言站点常见的日誌形態是:預設語言一天被訪問几百次,/en/、/ja/ 這類目錄几天才出現一次。多數时候不是蜘蛛對语種有偏好,而是入口不可见——語言切換器是一個 button,或者靠 JS 拼出 URL 再跳轉,机器拿不到可点的連結,自然走不到那個語言版本。

切換器要用真實連結

語言切換寫成一排普通的 a 标簽,指向各語言首頁或目前頁面對應的語言版本;每個語言頁面都能鏈到其他語言版本,形成互鏈;切換器出現在 HTML 里,不要依赖异步插入。這三條做到,多語言抓取的問题會少掉一大半。

語言目錄怎么摆:子目錄、子域名還是參數

  • 子目錄(example.com/en/):權重集中,内鏈传递直观,是多語言站点里比較常见的選擇。
  • 子域名(en.example.com):抓取上更接近獨立站点,需要各自准备入口和 Sitemap,跨站内鏈的传递會弱一些。
  • 參數(example.com/?lang=en):容易和其他參數搅在一起,規范化處理更麻烦。
  • 獨立域名:运营成本高,抓取上也各管各的,适合本地化程度很深的场景。

用哪種形式没有标准答案,關键在一致性:每種語言版本都要有一個稳定、唯一、不带多余參數的 URL,並且這個 URL 從入口到詳情頁一路都能点得到。前缀一變、尾斜杠一變、大小寫一變,日誌里就會拆成好几份,核對起来非常費劲。

hreflang 不是抓取指令

hreflang 表達的是几個 URL 之間的語言與地区關系,它影响展示和归並判断,但不會替代入口連結。常见的寫法問题有:

  • 只寫單向:A 指向 B,B 没有指回 A,双向缺失容易被忽略。
  • 語言代碼寫错,或者在 zh-CN 與 zh-Hans 之間混用,地区代碼本身不存在。
  • 指到的地址是 404、跳轉目标,或者又被 canonical 指到了另一個 URL。
  • 缺少 x-default,預設語言版本没有被标注。
  • 试图用 hreflang 去纠正 canonical,两者指向不一致时信号互相抵消。

比較稳妥的做法是:每個語言頁面在 head 里列全所有語言版本(包含自身)加 x-default;改版換目錄後回头核對一遍,別留下指向舊路径的标注。

让每種語言都有可走的路径

  1. 導航和頁脚放語言入口,連結分別指向各語言首頁,而不是一個切換按钮。
  2. 每個語言版本都有自己的栏目頁和列表頁,不要只翻译首頁,栏目頁仍停留在預設語言。
  3. 語言内部做好内鏈:相關阅讀、上下篇、标簽頁,让蜘蛛顺着連結能走進詳情层。
  4. 面包屑带上語言前缀,逐級可点,层級關系更清楚。

Sitemap 按語言分片,核對更方便

  • 每個語言一個 Sitemap,只放该語言的 URL,避免一個文件里混着几十個语種。
  • 再用 Sitemap index 匯總,提交後可以按語言分別观察抓取情况。
  • Sitemap 里的 hreflang 标注(xhtml:link)可以和頁面上的标注互相印證,但不要只依赖它。
  • 内容更新频繁时,分片也方便單獨調整 lastmod,不用整包重寫。

怎么核對:從日誌看每種語言的抓取

  • 按路径前缀(/en/、/ja/)分组統計蜘蛛訪問量,看是不是只有預設語言有量。
  • 看被抓 URL 的来源:如果其他语種頁面的日誌里几乎没有站内来源,說明内鏈入口太弱,只有 Sitemap 在推。
  • 確認語言切換器是不是唯一入口——它一旦是 JS 按钮,等于没有入口。
  • 检查預設語言的 canonical 是否覆盖到了其他語言版本,導致別的语種被抓却不被当作獨立頁面。
  • 看狀態碼:語言目錄 302 回預設語言、參數版本反复 301 跳轉,都會让抓取分散在無效地址上。
多語言站点的抓取問题,多數不是“机器不懂語言”,而是“找不到可点的路”。先把連結做出来,再谈各種标注信号。

落地顺序可以這样安排:先保證每種語言有獨立且可点的入口目錄;再补齐導航、面包屑和列表頁内鏈;然後處理 hreflang 與 canonical 的一致性;最後用 Sitemap 分片和日誌分组做核對。抓取是逐步推進的過程,改完之後按路径前缀看趋势,比只盯總量更有參考價值。