搜尋抓取

多語言與多地区站点的抓取入口:hreflang、語言目錄與蜘蛛的第一次選擇

多語言與多地区站点常常只有預設語言被抓,其他版本長期没有入口。本文從 URL 结构、hreflang 标注、Sitemap 與内鏈分工、語言切換器寫法几個方面,說明蜘蛛是怎么在不同語言版本之間走動的,並列出按 IP 跳轉、机翻空壳頁面等容易挡住抓取路径的情况,最後给出一份可以逐項核對的清單。

搜尋抓取

多語言與多地区站点的抓取入口:hreflang、語言目錄與蜘蛛的第一次選擇

多語言站点最常见的状况是:預設語言被抓得不错,其他語言版本要么压根没在日誌里出現過,要么只進来一两個首頁。問题往往不在 hreflang 本身,而在于蜘蛛第一次走到站点时,看不太清各語言版本之間的關系。

URL 结构决定蜘蛛的起点

子目錄(/en/、/de/)、子域名(en.example.com)、獨立域名是三種常见做法。對蜘蛛来说,子目錄最省事:同一域名内的連結天然互相传递,發現成本最低;子域名和獨立域名則需要在各自站点内單獨建立入口,否則很容易出現某個語言版本長期無人問津。

不管選哪種,關键是同一語言始终用同一套结构,別出現 /en/ 和 /english/ 两個目錄並存的情况——那等于把一份内容拆成两條抓取路径。

hreflang 是信号,不是通道

hreflang 說明“這個頁面有其他語言版本”,但它本身不负责發現。如果 B 語言頁面没有任何内鏈指向,只靠 hreflang 声明,被抓到的概率依然很低。

  • 互相引用:A 頁面指向 B,B 頁面也要指回 A,只寫一邊基本無效。
  • 包含自身:每個頁面通常也要寫上自己語言版本的 hreflang。
  • x-default:指定一個兜底版本,通常是預設語言或英文頁面。
  • 保持一致:hreflang 中的地址要和该頁 canonical、内鏈地址對得上,否則蜘蛛會犹豫该走哪條。

Sitemap 與内鏈的分工

Sitemap 适合把各語言版本的完整清單一次性交出去,尤其是不在主導航里的深层頁面。可以在 Sitemap 里用 xhtml:link 标注語言版本,也可以按語言拆成多個 Sitemap,各自维護 lastmod。

内鏈則负责日常發現。主導航的語言入口、頁脚的語言連結、文章内的相關版本連結,這几處加起来,基本能保證蜘蛛在抓某一語言时顺手走到其他語言。

語言切換器與自動跳轉的坑

不少站点的語言切換器是一個下拉菜單,選項由 JavaScript 拼接,蜘蛛看不到連結。改成普通的 a 标簽是最省事的做法。

另一個坑是按 IP 或浏览器語言自動 302 跳轉。蜘蛛的抓取节点通常在國外,如果它請求首頁时被跳到一個带語言前缀的地址,可能就再也没走到其他版本;更麻烦的是跳轉目标不稳定,日誌里會看到同一個 URL 反复出現不同落点。

给蜘蛛留一個可以直接訪問、不依赖 cookie 和 IP 判断的預設入口,比在跳轉逻辑上做優化更有效。

机器翻译與空語言版本

  • 整站机翻但未校對,頁面之間相似度過高,容易被当作低质量或重复内容處理。
  • 某語言只翻译了導航和頁脚,正文仍是原文,属于典型的空壳頁面。
  • 某語言下大量頁面返回 200 却没有實质内容,建议先 noindex 或暂时不放進 Sitemap,等内容补齐再放出来。

可以按顺序核對的几件事

  1. 每種語言是否有獨立、稳定的 URL 目錄,且没有重复结构。
  2. hreflang 是否双向、是否包含自身、是否與 canonical 一致。
  3. 語言切換器是否為可抓取的 a 标簽。
  4. Sitemap 是否覆盖全部語言,lastmod 是否按語言各自维護。
  5. 是否存在基于 IP 或 cookie 的强制跳轉,蜘蛛能否直達預設版本。
  6. 某語言的頁面是否有内鏈入口,而不只是存在于 Sitemap 里。

做完這几步,看到的不一定是抓取量暴涨,更可能是各語言版本的抓取分布變得均匀,日誌里少了那些“只来一次就再没出現”的地址。