站点运营

站点运营:搜尋蜘蛛的URL發現,從多語言站点的語言目錄與自動跳轉谈起

多語言站点的URL發現难点不在蜘蛛,而在于同一份内容存在多個入口却没说清主次。本文從語言目錄结构、基于IP或請求头的自動跳轉、hreflang的互指與自指、分語言sitemap的整理几個方面,给出一份可照着走的检查清單,帮助蜘蛛稳定抓到你希望被收錄的那個地址。

站点运营

站点运营:搜尋蜘蛛的URL發現,從多語言站点的語言目錄與自動跳轉谈起

多語言站点的URL發現,麻烦往往不出在蜘蛛身上,而出在站点自己没把“谁是主、谁是副本”讲清楚。同一篇内容在中英文两套地址下都能打開,蜘蛛遇到多個候選入口时通常只會挑其中一個展開抓取,其余地址既消耗抓取预算,也容易让不同語言版本互相挤压,最後表現成“某個語言版迟迟不收錄”。

先定下語言與地区的URL结构

常见做法有三種,選定之後尽量不要再混用:

  • 子目錄:example.com/zh-cn/、example.com/en/。權重集中在一個域名,配置與维護成本最低,多數站点适合這種。
  • 子域名:cn.example.com、en.example.com。适合不同地区由不同团队獨立运营,但每個子域都要各自维護 robots.txt 與 sitemap,日誌也要分開看。
  • 獨立域名:example.cn 與 example.com 並存。權重分散,跳轉與 hreflang 的配置成本最高,除非业務上确有必要。

需要留意的是,語言代碼尽量带地区後缀,例如 zh-cn、zh-tw、en-us,避免把所有中文流量都压到一個 zh 目錄里。目錄一旦上线並被收錄,後期改名意味着要處理成批重定向,越早定越好。

自動跳轉是最容易挡住蜘蛛的一环

不少站点會按訪客的 IP 归属地或 Accept-Language 請求头做 302 跳轉,把用戶推到“更合适”的語言版本。這個体驗優化本身没問题,問题出在實現方式上:

  • 不要用 JavaScript 的 location.replace 做語言分發。蜘蛛拿到的是一個几乎空白的頁面,正文里的連結也就無從發現。
  • 如果确實需要服務端跳轉,用 302 而不是 301。301 會被当作永久搬家,一旦判断失誤,修正周期很長。
  • 蜘蛛的訪問通常来自固定的几個地区,且不带明确的語言偏好。要保證它在任何情况下都能拿到一個完整、可点、可讀的頁面,而不是被彈回某個目錄。
  • 给用戶保留手動切換語言的入口,且切換後的地址要能直接複製分享,而不是只存在于 Cookie 或會话里。

hreflang 的三條底线

hreflang 的作用是告诉搜尋引擎“這些地址是同一内容的不同語言版本,請按語言展示给對應用戶”。寫法上最容易出错的三個点是:

  1. 互指:A 頁面标注了 B,B 頁面也要标注 A,單向标注等于没标。
  2. 自指:每個頁面都要包含指向自己的那條 hreflang,漏掉自指會让整组關系失效。
  3. x-default:為無法匹配語言偏好的訪客指定一個兜底版本,通常選主站或英文版。

還要清楚一点:hreflang 只解决“该给谁看哪個版本”,並不解决内容重复的合並問题。如果几個語言版本其實是机器翻译的同一段文字,检索表現依然會互相牵扯,這種情况下更该考虑的是要不要收錄。

把抓取入口整理干净

語言目錄定好之後,入口层面還有几件事值得顺手做掉:

  • 按語言分別生成 sitemap,再用一個 sitemap index 匯總;文件里只放 200 狀態、可正常打開的規范地址。
  • robots.txt 不要為了“省抓取”而屏蔽整個語言目錄,屏蔽之後蜘蛛连站内連結都看不到,日誌里會長期缺少该目錄的訪問记錄。
  • 站内導航與頁脚的語言切換連結用普通 a 标簽,保持可抓取;不要把切換做成按钮加事件监听。

一份可以照着走的检查清單

  1. 語言目錄或子域的命名是否统一,没有中英目錄混排。
  2. 用不带語言偏好、不同地区 IP 的請求訪問首頁,返回的頁面是否完整可讀。
  3. 任意取一個内容頁,检查 hreflang 是否互指、自指、含 x-default。
  4. 查看服務器日誌中该語言目錄的抓取记錄,是否有稳定訪問。
  5. 分語言 sitemap 中的地址是否都能返回 200,且與頁面里的規范地址一致。
多語言站点的URL發現,本质是把入口收敛到有限、稳定、可解释的几個地址上,让蜘蛛不必猜。结构定得越早,後面要补的窟窿越少。