多語言站点的抓取問题,通常不是蜘蛛"看不懂"某個語言,而是你没告诉它另一版内容在哪里。蜘蛛不會翻译,也不會猜测語言偏好,它只做一件事:從入口出發,沿着連結和 sitemap 走。所以多語言站点的抓取路径,本质上是入口设計和連結结构的問题。
蜘蛛先看到哪一版,取决于你把連結放在哪
蜘蛛的常见入口是首頁、栏目頁和 sitemap。如果首頁只有中文導航,英文頁和日文頁就只能靠 sitemap 或者中文頁里的語言切換連結被發現。很多站点的英文版迟迟不進索引,原因往往不是内容质量,而是從首頁到英文頁之間隔了太多层,或者根本没有一條稳定的 HTML 連結。
實操上,建议让每個語言版本都有自己的入口路径:首頁有語言切換入口,各語言的主栏目頁互相可達,sitemap 里按語言分別列出。蜘蛛一旦進来,就能顺着同一語言的連結繼續走,而不是被随机丢到別的語言版本里。
三種語言目錄做法,抓取表現不一样
子目錄:example.com/en/
對抓取最友好。所有語言都在同一域名下,蜘蛛用一套抓取配置就能覆盖,sitemap 也方便统一管理。适合大多數中小站点,缺点是語言之間的權重区分不如獨立域名明顯。
子域名:en.example.com
搜尋引擎通常把子域名当成相對獨立的站点来處理,抓取、索引、驗證都可能分開算。你需要為每個子域名單獨提交 sitemap,單獨確認 robots.txt,單獨看抓取資料。好處是語言邊界清晰,代價是维護成本明顯上升。
參數:example.com/?lang=en
這是最容易出問题的一種。同一篇内容會因為參數不同产生多個 URL,canonical 一旦没寫清楚,蜘蛛就可能在這几個地址之間反复抓取同一個頁面。如果非要用參數,至少保證參數值稳定、可预测,並且在 sitemap 里只保留一個規范版本。
hreflang 是提示,不是抓取開關
很多人以為加了 hreflang,蜘蛛就會按語言各抓各的。其實 hreflang 主要作用是在多個語言版本之間建立配對關系,帮助搜尋引擎在展示时選擇合适版本。它不阻止抓取,也不能替代 canonical。
另外要注意两個容易忽略的点:hreflang 必须互相回指,A 指向 B,B 也要指向 A;每個語言版本都要包含自己指向自己的那一條。只寫單邊,等于没寫。
語言切換器和内鏈別让蜘蛛绕圈
常见的語言切換器是下拉菜單,用 JavaScript 渲染,或者点击後带上 session 參數。這類设計蜘蛛很可能跟不到。更稳妥的做法是用真實的 a 标簽,href 指向對應語言的固定 URL,並且不要带會话或跟踪參數。
同时检查一下切換器會不會形成环:中文頁跳英文頁,英文頁又跳回中文頁,如果两邊都只有這一條連結,蜘蛛很容易在两個版本之間来回走,而進不到真正的内容頁。
x-default 與 canonical 的分工
canonical 解决的是同一語言内的重复,比如带參數和不带參數的版本;hreflang 解决的是不同語言之間的配對。两者的指向不要互相矛盾:canonical 應该指向本語言的首選 URL,而不是指向另一種語言。x-default 用来标记語言選擇頁或預設版本,适合放在没有明确語言匹配时希望展示的那個 URL 上,不要把它当成所有語言的通用收口。
上线前後可以按這份清單過一遍
- 每個語言版本是否有至少一條從首頁或栏目頁出發的 HTML 連結
- sitemap 是否按語言拆分,且只包含規范 URL
- hreflang 是否双向回指並包含自指
- 語言切換器是否為可抓取的 a 标簽,是否带多余參數
- 各語言版本的 canonical 是否指向本語言首選 URL
- robots.txt 是否誤拦了某個語言目錄
- 服務器日誌里,各語言目錄的抓取频次是否大致合理
多語言站点的抓取路径,难点不在語言本身,而在于每個版本都要有一條清晰、稳定、可被跟到的路。先保證蜘蛛能走到,再谈它愿不愿意多来。