多语言站点做收录核对时,最容易犯的错误是把所有语言当成一个整体看。用一次 site 查询看总量,数字似乎对得上,实际上可能是某一门语言被索引了几千条,另一门语言一条都没有。收录状态是按 URL 计算的,而每个语言版本通常都是独立 URL,所以核对必须按语言拆开做。
先确认每个语言版本都有独立可抓取的 URL
常见的三种结构里,子目录和子域相对稳妥:
- /en/、/zh/ 这类子目录,配置简单,也便于统一管理;
- en.example.com 这类子域,隔离性好,但需要单独验证并单独配置站点地图;
- ?lang=en 这类参数,容易被折叠或误判为同一页面的变体,排查成本最高。
无论选哪种,都要保证每个语言版本在关闭 Cookie 和 JavaScript 的情况下也能直接打开,返回 200,正文是该语言的真实内容。如果站点靠浏览器语言或 Cookie 自动跳转,爬虫很可能只看得到默认语言那一版,其他语言永远不会被独立发现。
canonical 与 hreflang 要能对上
这一段最容易出错,核对顺序建议是:
- 每个语言版本的 canonical 指向自己,而不是统一指向默认语言。如果所有语言都 canonical 到 /en/,其他版本基本等于主动放弃收录归属。
- hreflang 必须双向回链。A 页面写了指向 B,B 也要写回 A,单向标注通常不会被采用。
- hreflang 的代码和地区写法要规范,en、en-US、zh-Hans 各有含义,不要自造写法。
- 如果存在默认兜底页,用 x-default 标注,而不是让某一种语言兼职。
做完这几步后,挑两个语言版本各看一次页面源代码,确认输出的是这一版自己的地址,而不是模板里写死的默认语言 URL。
语言切换入口要是可抓取的链接
不少站点的语言切换是一个下拉框,靠 JavaScript 提交或跳转。人能用,爬虫用不了。更稳妥的做法是在页头或页脚放一组普通的 a 标签链接,指向各语言版本的首页或当前页的对应版本。这样每个语言版本都能通过站内链接被发现,而不只依赖站点地图。
语言版本之间的互链,本质上也是一条内链路径。入口越清晰,各语言被独立发现的机会越多。
按语言的收录核对清单
- 分别用 site 查询或索引报告,记录每种语言的收录数量,不要只看总数;
- 每种语言各抽 3 到 5 个页面,检查是否被索引、展示的 URL 和语言是否正确;
- 检查站点地图是否按语言拆分,或至少正确标注了 hreflang;
- 在服务器日志里看各语言目录的抓取频次,长期为零的目录通常说明发现路径断了;
- 比对语言版本之间的正文差异,机器翻译或只换几行文案的版本,容易被当作重复内容处理。
几种常见的异常表现
某一门语言只有首页和分类页进了索引,内容页几乎没有,通常指向内链或站点地图的问题;几个语言版本互相被替换展示,多半是 canonical 和 hreflang 打架;新增加的语言长期零收录,先回头看切换入口是不是可抓取的链接,再确认新语言用的是不是独立 URL。
多语言站点的收录问题很少是单一原因造成的,但排查顺序是固定的:先确认 URL 能被独立发现和抓取,再看归属信号是否自洽,最后才去比较内容差异。跳过前两步直接改内容,通常解决不了问题。