多語言或多地区站点看起来只是多了几套語言版本,實际运营中经常出現地址重复、跳轉混乱、抓取分散的問题。蜘蛛訪問一個頁面时,如果同时看到語言跳轉、hreflang 标注、canonical 和 sitemap 里不同的地址,它很难判断哪個是主要入口。下面從几個常见环节整理自查思路。
先確認語言版本是否真的必要
不是每個站点都需要多語言。若只是為了“看起来更完整”而開了多個語言目錄,却没有對應内容,往往會产生大量空頁面或机器翻译頁。這類頁面容易成為低质地址,消耗抓取资源。自查时可以問:每個語言版本是否有獨立編輯和持續更新能力?没有的话,優先保留一個主語言版本,把资源集中起来。
hreflang 标注容易寫错的几個地方
- 語言代碼和地区代碼顺序寫反,比如把 zh-CN 寫成 CN-zh。
- 只寫了單向标注,A 頁面指向 B 頁面,B 頁面却没有指回 A 頁面。
- 指向了重定向地址或 404 地址,導致标注本身失效。
- 同一頁面重复輸出多组 hreflang,甚至包含自己。
- 用不存在的語言代碼,比如 en-UK 這類非标准寫法。
這些問题不一定立刻導致抓取失敗,但會让蜘蛛在多個語言版本之間反复確認,增加不必要的抓取成本。
語言跳轉不要强制且自動
很多站点會根據 IP 或浏览器語言自動跳轉到對應版本。對用戶来说可能方便,對蜘蛛来说却容易造成困扰:蜘蛛從一個地址進来,被立即跳到另一個地址,原本的頁面内容無法被抓取。更稳妥的做法是:
- 頁面顶部或頁脚保留語言切換入口,让用戶主動選擇。
- 如果一定要自動跳轉,确保跳轉前頁面可訪問,並且跳轉目标與目前頁面語言版本對應。
- 不要用 JavaScript 在首屏强制跳轉,尤其不要跳轉到不同内容的頁面。
- 跳轉規則不要随 IP 频繁變化,避免蜘蛛每次抓取都得到不同结果。
自動跳轉适合做用戶体驗的补充,不适合作為蜘蛛發現内容的唯一方式。
canonical 與 hreflang 各司其职
canonical 用来告诉蜘蛛哪個地址是同一内容的代表版本,hreflang 用来告诉蜘蛛這些地址是不同語言或地区的對應版本。两者混用容易出問题。比如某個語言版本被 canonical 指到了主語言版本,那么该語言版本就很难被單獨抓取和展示。自查时要確認:每個語言版本的 canonical 指向自己,而不是指向另一種語言;hreflang 則互相指向對應的語言版本。
sitemap 與内鏈的配合
sitemap 可以列出各語言版本的地址,但不要只依赖它。内鏈同样重要:語言切換入口、面包屑、相關文章模块,都應该自然連結到對應語言版本。如果某個語言版本只有 sitemap 里有地址,站内没有任何入口,它就容易變成孤岛。可以定期從首頁出發,模拟蜘蛛路径,看能否在少量点击内到達主要語言版本。
一份可执行的自查清單
- 列出所有語言和地区版本,確認每個版本都有實际内容。
- 检查 hreflang 是否双向、是否指向 200 狀態碼頁面。
- 检查 canonical 是否指向自身語言版本,而不是其他語言。
- 检查語言跳轉是否會影响蜘蛛抓取,必要时改為用戶主動切換。
- 检查 sitemap 是否包含各語言版本,且地址與頁面實际地址一致。
- 检查站内連結是否覆盖主要語言版本,避免孤岛。
- 观察日誌中不同語言版本的抓取频率,若某個版本長期不被抓取,優先排查入口和标注。
多語言站点的运营难点不在于開了多少語言,而在于每個版本是否有清晰、一致的抓取路径。把跳轉、标注、内鏈和 sitemap 對齐之後,蜘蛛的判断成本會降低,你也更容易從日誌里看出哪些頁面真正被關注。