多語言或多地区站点的抓取問题,往往不是“抓不到”,而是“只抓到一個版本”。搜尋蜘蛛顺着連結走,如果預設首頁只暴露一種語言,其他語言的 URL 就只能靠 Sitemap 或外鏈被發現,速度會慢很多,日誌里也容易出現某個語言目錄長期空白的情况。下面按入口、标注、核對三步整理一套可落地的做法。
一、先確認每種語言都有可点击的入口
搜尋蜘蛛發現 URL 的主要方式仍然是連結。如果語言版本没有静態可点的 a 标簽,只能依赖 JS 渲染後的連結,發現速度就會打折扣。
- 語言切換器用 a 标簽指向對應語言首頁,而不是用脚本直接改寫目前頁面語言。
- 各語言版本的内鏈结构尽量保持一致,避免出現中文站有分類頁、英文站只剩一個長列表的情况。
- 如果語言版本使用子域名或獨立域名,在頁脚或主導航中互相連結,不要只藏在一個下拉菜單里。
- 检查切換器連結是否带多余參數,例如每次都追加會话 ID,這會让同一入口出現大量不同地址。
二、hreflang 解决的是归属,不是發現
hreflang 的作用是告诉搜尋引擎這些 URL 属于同一内容的不同語言版本,但它本身並不保證每個 URL 都被抓取。常见错誤是只寫了 hreflang,却没让每個語言版本進入 Sitemap 或内鏈,结果标注了却始终没有被抓。
- 每個語言版本的 URL 都應出現在 Sitemap 中,可以按語言分片,也可以在同一份文件中成组出現。
- hreflang 建议双向引用:A 指向 B,B 也要指回 A,單向标注容易被忽略。
- 語言代碼與地区代碼保持一致,zh-CN 與 zh-Hans 混用會明顯增加後期核對成本。
- 不要让 hreflang 指向 404、重定向或带有 noindex 的地址,這類指向基本没有意义。
三、抓取路径的核對清單
可以按下面的顺序做一次自查,問题通常集中在前面几步。
- 在抓取日誌里按語言目錄過滤,例如 /en/、/ja/,看請求次數是否與頁面數量大致匹配。
- 核對 Sitemap 中各語言的 URL 數量與實际可訪問頁面數量是否對齐,差值過大說明有頁面没進清單。
- 從預設語言首頁出發,數一數到其他語言詳情頁需要几步,超過四步就考虑补内鏈或增加語言首頁入口。
- 抽查語言切換器,在關閉 JS 的情况下確認仍能看到指向其他語言的連結。
- 確認各語言目錄的响應時間接近,避免某個目錄因為回源慢而抓取频次偏低。
- 查看是否所有語言版本都返回 200,語言目錄首頁出現 302 跳回預設語言时要特別留意。
四、容易被忽略的几個点
一是自動跳轉。根據 IP 或 Accept-Language 把訪客從 /en/ 跳到 /zh/,如果這類跳轉對所有訪問者生效,搜尋蜘蛛也可能看不到英文内容。更稳妥的做法是在頁面上给出提示和連結,让用戶自己選。二是机器翻译内容的大量铺開,這類頁面即使被發現,也很难获得較高的抓取優先級,不如先把核心語言版本做扎實。
發現和抓取是两件事:被 hreflang 标注不等于被抓取,被抓取也不等于會被收錄。
五、一個可执行的推進节奏
建议按“新增語言版本先补内鏈、再進 Sitemap、最後观察日誌”的顺序推進。每次上线新語言,先在日誌里確認该目錄有稳定請求,再考虑扩大内容量。如果某個語言目錄長期没有抓取记錄,優先检查入口連結、robots.txt 和服務器响應,而不是反复重复提交 Sitemap。