多语言站点通常会用 hreflang 标注告诉搜索引擎各语言页面之间的对应关系,同时通过 Sitemap 提交完整 URL 列表。两者配合得好,搜索蜘蛛能顺藤摸瓜发现各语言版本;一旦出现不一致,抓取入口就可能只集中在默认语言,其他语言页面长期不被访问。
hreflang 与 Sitemap 各自负责什么
hreflang 是页面级信号,它声明“这个页面还有哪些语言/地区版本”,蜘蛛在抓取当前页面时能顺着链接或标注去访问对应 URL。Sitemap 则是站点主动提交的 URL 清单,适合补充内链较深或入口不明显的页面。两者不是替代关系:Sitemap 提交了,不代表蜘蛛会立即抓取;hreflang 标注了,也不代表对应 URL 一定能被正常访问。
常见的不一致与抓取问题
hreflang 指向的 URL 不可抓取
如果 hreflang 里的目标 URL 被 robots.txt 屏蔽、返回 404 或 301 到另一个地址,蜘蛛会记录一次无效跳转。偶尔出现影响不大,但大量语言版本都指向错误地址时,抓取会快速消耗在无效路径上,真正的语言页面反而得不到入口。
Sitemap 只提交默认语言
有些站点 Sitemap 只列主语言 URL,其他语言版本仅靠页面右上角的切换链接。切换链接若是 JS 触发、站内搜索跳转或带有复杂参数,蜘蛛可能无法稳定跟随。此时 URL 发现范围取决于内链质量,而不是 Sitemap 的完整程度。
canonical 与 hreflang 互相冲突
常见错误是每个语言页面都把 canonical 指向默认语言。这样一来,蜘蛛会认为所有语言版本都应以默认语言为准,其他语言 URL 的抓取优先级自然被压低。canonical 应指向自身语言版本,hreflang 才负责语言间的关联。
排查顺序
- 先看抓取日志:确认各语言目录下是否有蜘蛛访问记录。如果某语言目录完全没有请求,优先怀疑入口缺失或被屏蔽。
- 核对 robots.txt:检查是否误屏蔽了语言子目录、语言路径参数或 Sitemap 文件本身。
- 抽样检查 hreflang:随机抽取几个页面,看 hreflang 目标 URL 是否返回 200,是否与当前页的 canonical 一致。
- 检查 Sitemap 覆盖:确认 Sitemap 是否包含全部语言版本,还是只提交了默认语言。多语言站点可考虑按语言拆分 Sitemap 索引,便于观察抓取覆盖。
- 补内链入口:在主导航、页脚或语言切换器中,使用真实可点击的 a 标签链接,避免仅依赖 JS 事件或表单跳转。
修复与维护建议
- 保持 hreflang、canonical、Sitemap 三者指向一致:语言页面自指 canonical,hreflang 互相回指,Sitemap 包含全部语言 URL。
- 语言切换器尽量输出标准链接,不要用 onclick 跳转或空 href。
- 如果使用自动翻译或参数生成语言页,确保每个语言版本有独立稳定的 URL,而不是同一 URL 靠 cookie 切换。
- 定期从日志中按语言目录统计抓取频次,发现某语言抓取量持续偏低时,优先检查入口和状态码。
- 改版或迁移语言目录时,旧 URL 用 301 指向新语言版本,并更新 hreflang 和 Sitemap 中的地址。
注意:hreflang 和 Sitemap 都是辅助发现信号,不能替代可抓取的内链。站点结构清晰、链接可点、状态码正常,才是搜索蜘蛛稳定发现多语言 URL 的基础。
多语言站点的抓取问题往往不是单一原因,而是 hreflang、canonical、Sitemap 和内链之间的信号打架。按“日志—robots—hreflang—Sitemap—内链”的顺序逐项排查,通常能较快找到入口变窄的环节,再逐步恢复正常抓取。