多語言或多地区站点有一個常见現象:主語言目錄被蜘蛛抓得很勤,其他語言版本却長期停留在“已發現、未抓取”的狀態。原因通常不在服務器,而在 URL 结构和内鏈——蜘蛛不會因為頁面上寫着“這是英文版”,就自動去抓另一種語言。
每個語言版本都是獨立 URL,需要獨立的入鏈
不管是 /en/、en.example.com 還是 ?lang=en,在蜘蛛眼里都是各自獨立的地址。它們之間如果没有可点击的真實連結,發現路径就断了。預設語言版本往往占據首頁和導航的主要位置,其他語言版本只靠 hreflang 标注關联,這时蜘蛛知道“關系存在”,却未必有理由马上抓取。
三種常见做法的抓取差异
- 子目錄(example.com/en/):與主站共享域名權重,連結传递最直接,蜘蛛沿站点结构就能走到。
- 子域名(en.example.com):會被当作相對獨立的站点,需要單獨维護 Sitemap 和内鏈,抓取节奏可能和主域名不同。
- 參數(example.com/page?lang=en):地址容易因參數顺序、大小寫产生多個變体,蜘蛛需要額外判断是否同一個頁面,抓取效率通常最低。
這里没有绝對的對错,但结构越接近普通目錄,蜘蛛的理解成本越低。
hreflang 是關联說明,不是發現通道
hreflang 的作用是告诉蜘蛛這几個 URL 是同一内容的不同語言版本,它本身不负责“带路”。因此需要满足几点:各語言版本互相引用、每個版本包含自引用、必要时用 x-default 指向預設版本。如果只有單向标注,蜘蛛可能無法完整理解這组頁面之間的關系。
把 hreflang 当成關系描述,把内鏈当成發現路径,两者缺一不可。
語言切換器要能被爬到
很多站点的語言切換器是 select 下拉或 JS 事件,蜘蛛点不動。更稳妥的做法是用真實的 a 标簽:
- 每個語言版本的導航或頁脚,都放指向其他語言對應頁面的連結;
- 切換器用普通連結,而不是按钮触發;
- 深层頁面也要有出口,不要只让首頁互相連結。
如果站内只有首頁互鏈,深层語言頁面很容易變成孤岛。
Sitemap 的分法
常见做法有两種:每個語言單獨一個 Sitemap,在索引文件里匯總;或者在同一個 Sitemap 里用 xhtml:link 标注各語言版本。前者實現简單、排查直观,後者信息集中在一條记錄里。選擇哪一種主要看维護成本,關键是別漏掉語言目錄下的深层 URL。
自動跳轉與服務器的坑
按訪問者 IP 或浏览器語言自動 302 跳轉,是常见但容易出問题的做法:蜘蛛從一個固定 IP 抓取时可能只看到一種語言,其他版本就更难被發現。如果必须做跳轉,至少保證不跳轉时頁面自身可訪問,並提供手動切換入口。另外,多語言站点往往部署了多套服務或 CDN 規則,返回 5xx 或超时的比例上升时,蜘蛛會放慢抓取速度,語言目錄這類“次要路径”通常最先被减少訪問。
怎么检查
- 按語言目錄拆分服務器日誌,對比各目錄的抓取次數和狀態碼分布;
- 抽查几個深层語言頁,看它們在站内是否有對應的語言連結;
- 检查 hreflang 是否互相回指、是否有自引用;
- 確認各語言 Sitemap 是否被提交並能正常訪問。
多語言站点的 URL 發現,本质上還是“有没有路可走”的問题。结构清晰、内鏈到位、服務器稳定,蜘蛛會按自己的节奏覆盖更多語言版本;反過来,只靠 hreflang 和自動跳轉硬凑,效果往往有限。