多語言站点常遇到一個情况:預設語言版本被频繁抓取,其他語言版本却很少出現在日誌里。原因不一定是蜘蛛不愿意抓,而是它没有拿到足够清晰的路径信号。語言版本之間如果缺少互鏈、hreflang 标注不一致,蜘蛛容易把不同語言当成重复内容,或者只沿着預設語言的入口走。
語言版本放在哪里,决定蜘蛛從哪進来
常见做法有两種:子目錄(example.com/en/、example.com/fr/)和子域名(en.example.com)。子目錄通常能繼承主域已有的抓取路径和權重,蜘蛛從首頁就能顺着連結走到各語言版本;子域名則更像獨立站点,需要各自配置 Sitemap、robots.txt,内鏈也要單獨铺。選擇哪種没有绝對好坏,但一旦确定,最好保持稳定,避免中途大規模換结构。
hreflang 是给蜘蛛的語言對照表
hreflang 的作用是告诉蜘蛛:這几個 URL 是同一内容的不同語言版本,不要当成重复頁面。它需要互相引用,包括指向自己,並且最好有一個 x-default 指向預設或語言選擇頁。常见错誤是只在英文頁寫 hreflang,其他語言頁不寫;或者 hreflang 指向的 URL 返回 404、301 到別的地址。蜘蛛看到断掉的對照關系,通常不會繼續深挖。
寫法上的几個细节
- 每個語言版本都寫上完整的 hreflang 集合,不要只寫單向。
- 語言代碼用标准格式,如 en、fr、zh-Hans,不要自造。
- hreflang 里的 URL 用绝對地址,且與 canonical 保持一致。
Sitemap 按語言拆分,方便蜘蛛按块抓取
如果站点語言版本多,可以把 Sitemap 拆成多個文件,比如 sitemap-en.xml、sitemap-fr.xml,再用 sitemap index 匯總。這样蜘蛛能按語言分別抓取,某一種語言更新时,也更容易被單獨發現。在 Sitemap 里也可以用 xhtml:link 标注 hreflang,和頁面上的标注互相印證。注意 Sitemap 里只放 200 狀態、可被抓取的 URL,別把跳轉頁和參數頁混進去。
内鏈和語言切換器別把蜘蛛挡住
很多站点的語言切換器是下拉框加 JavaScript 跳轉,用戶能点,蜘蛛却看不到目标 URL。更稳妥的做法是用 a 标簽直接連結到各語言版本,至少在頁脚或導航里保留一组纯連結入口。另外,預設語言不要用 IP 或浏览器語言自動 302 跳轉,否則蜘蛛從不同地区訪問时可能拿到不同结果,抓取路径會變得不稳定。如果必须自動判断,建议用 302 或前端提示,並确保有一個固定 URL 能被直接訪問。
canonical 與 hreflang 不要互相打架
canonical 表示“這個頁面以谁為准”,hreflang 表示“這些頁面是不同語言”。如果每個語言版本的 canonical 都指向預設語言,蜘蛛會認為其他語言版本只是副本,可能减少抓取。正确做法是每個語言版本 canonical 到自身,同时用 hreflang 建立語言關联。若某語言内容确實與另一語言高度重复,再考虑合並或規范化,而不是一律指向預設語言。
检查清單
- 各語言版本是否都有獨立可訪問的 URL,且返回 200。
- hreflang 是否双向互指,並包含 x-default。
- 語言切換器是否使用 a 标簽,蜘蛛能否直接跟随。
- Sitemap 是否按語言组织,並在 sitemap index 中列出。
- canonical 是否指向自身語言版本,而非預設語言。
多語言站点的抓取問题,多數不是蜘蛛“不認”語言,而是路径信号太乱:入口不清晰、對照關系断掉、跳轉方式挡住了連結。把語言版本之間的連結和标注理成一張一致的網,蜘蛛才有机會逐個走到。