多语言站点常有一个尴尬:主站页面几千个都能被正常抓取,语言版本却迟迟不进队列。原因往往不在“蜘蛛不喜欢外语内容”,而在于语言版本从首页出发的路径本来就比主站远——切换器藏在角落、目录结构不统一、Sitemap 只提交了主语言。下面把多语言站点的 URL 发现拆成几个可以动手改的部分。
先决定语言版本怎么组织
三种常见做法的可发现性差别很大:
- 子目录(example.com/de/):与主站同域名,能继承主站已有的抓取友好度,内链、Sitemap、日志统计都在一个域下,维护成本最低。
- 子域名(de.example.com):抓取上更接近独立站点,语言版本需要自己积累入口和链接,新上线时容易被当作新站对待。
- 参数或 cookie 切换(?lang=de):同一路径对应多个 URL,容易产生重复内容,切换结果也常依赖前端脚本,蜘蛛不一定能稳定拿到对应版本。
如果站点规模不大,建议统一到子目录;已经在用子域名,就要给每个子域单独准备 Sitemap 和入口链接,别指望主站的抓取记录会顺延过去。
hreflang 负责说明,不负责发现
常见误解是把 hreflang 当成语言版本的发现通道。它处理的是“同一内容的多个语言版本该给哪类用户看”,前提是这些 URL 本身已经被发现、被抓取,标注才有意义。如果 /de/ 目录从未进入抓取队列,再完整的 hreflang 也只是纸面声明。所以放标注的同时,别忘了用普通链接把语言版本连出去。
语言切换器是主要入口,也是最容易坏的地方
多数用户和蜘蛛都是从切换器进入其他语言版本的。常见问题有三类:切换器只在首页出现;链接由脚本拼接而不是可点击的 a 标签;切换后统一落到语言首页,而不是当前页的对应版本。更稳妥的做法是每个页面都保留一组可点击的语言链接,直接指向同一内容的其他语言版本。这样蜘蛛从任意一篇文章出发,都能横向走到其他语言,而不是每次都退回起点重新找路。
Sitemap 按语言拆分
多语言站点的 Sitemap 有两种写法:所有语言混在一个文件里,或者按语言(甚至按语言加栏目)拆成多个文件,再用索引文件汇总。后者在排查时更清楚——某个语言版本迟迟没被抓取,可以直接看它那个文件的提交状态和 lastmod。需要注意的是,Sitemap 里应列出能正常返回内容的 URL,不要把仅做跳转的中间页塞进去,否则只会浪费抓取次数。
内链不要只往主语言收
不少站点的内部链接默认指向主语言版本,语言版本之间只有顶部切换器一条路,结果非主语言页面在抓取路径上变成了末端。可以做的调整包括:在相关文章推荐、分类导航、面包屑里按当前语言给出对应语言的链接;跨语言链接保持少量而明确,不必为了凑数量在同一页面堆几十个语言入口。
服务器与抓取节奏的小提醒
多语言站点常把不同语言部署在不同服务器或 CDN 节点上,其中某个节点响应慢、证书配置有问题,表现出来就是“这个语言一直没被抓取”。定期看各语言版本在服务器日志里的状态码和响应时间,比只盯主站更有意义。新语言版本上线时,先保证它能稳定返回正常页面、内容完整,再去提交 Sitemap 和补充链接;否则蜘蛛来一次拿到错误页,下次重新排队的间隔只会更长。
一份可以照着做的清单
- 确认语言版本使用统一、可预测的 URL 规则,并固定下来,避免中途改结构。
- 每个页面都有指向对应语言版本的普通链接,不依赖点击脚本触发。
- Sitemap 按语言拆分并提交,索引文件里的每个子文件都可访问。
- hreflang 双向互指、包含自身,且都指向可抓取的地址。
- 检查各语言版本的服务器响应与证书,避免个别节点拖后腿。
- 用日志或抓取工具抽查:某语言的新文章,从首页出发几步能走到。
多语言站点的 URL 发现,说到底还是路径问题。语言版本不会自动跟着主站被看见,它需要自己的入口、自己的 Sitemap,以及一条蜘蛛能走得通的横向路径。