Gtranslate 小语种服务的又一个坑?Sitemap 301 跳转导致 GSC 无法抓取


大家好,我是Neo。

之前我写过一篇关于 Gtranslate 翻译服务Noindex 问题 的文章,揭露了这个小语种翻译服务在SEO方面的一个隐蔽大坑: 深挖一下独立站小语种插件gtranslate的坑

当时解决那个问题后,我以为天下太平了。目前我也是通过爬虫自动访问一次生成的小语种页面,来强制缓存并解决Noindex的问题。

然而,墨菲定律告诉我们:如果事情有变坏的可能,不管这种可能性有多小,它总会发生。

最近在例行巡查网站GSC(Google Search Console)数据时,我又发现了一个诡异的现象:小语种站点的 Sitemap 抓取出现大面积报错。

01 诡异的“无法抓取”

问题是这样的:主站点的Sitemap抓取一切正常,但是包含链接列表的子Sitemap(比如 archive-1.xmlcategory-sitemap.xml 等)却一直显示红色报错。

无法抓取

我点开其中一个报错的子Sitemap链接,准备一探究竟。

结果,浏览器地址栏闪烁了一下,竟然直接 301 重定向到了主网站的对应链接!

举个例子: 我访问的是西班牙语站点的:https://es.dtfulogistics.com/archive-1.xml 结果它跳到了英语主站的:https://www.dtfulogistics.com/archive-1.xml

吓我一跳!这是怎么回事?

如果是 301 跳转,Google 蜘蛛抓取到的就是主站的内容,或者直接认为这是一个错误的重定向,导致无法读取里面的小语种链接。难怪 GSC 一直提示“无法抓取”。

02 谁动了我的 Sitemap?

遇到这种灵异事件,我的第一反应是:是不是我自己配置错了?

作为一个老站长,我首先怀疑的是自己的服务器配置。于是我立马登录服务器,查看 Nginx 的访问日志(Access Log)。

我尝试再次访问那个小语种 Sitemap 链接,同时盯着日志滚动。

结果:日志里空空如也,没有任何 301 跳转的记录。

这意味着什么? 这意味着请求根本就没有到达我的服务器

既然没到我这里就被拦截并跳转了,那凶手只有一个:Gtranslate 的代理服务器。

大家知道,Gtranslate 的工作原理(付费版)是通过 CNAME 解析,流量是先经过他们的服务器进行翻译处理,然后再返回给用户的。

于是,我直接给 Gtranslate 官方发了一封邮件,质问(礼貌询问)原因:

我发送的邮件: Hello, I noticed that our website sitemap: https://es.dtfulogistics.com/archive-1.xml is being redirected to https://www.dtfulogistics.com/archive-1.xml with a 301 redirect. This might be a caching issue on your end. Could you please help me resolve it?

问题

03 官方的“潜规则”

半天后,我收到了官方的回复。这封回复解开了谜题,也让我对这个插件的“省流”策略有了新的认识。

Gtranslate 官方回复:

Hi, and thanks for your message.

In order for a sitemap to be processed by GTranslate, it must start with the word sitemap, and have a .xml extension.

We’re treating normal URLs like HTML files… The problem with XML feeds is that they get updated quite often, and content within them can reach huge numbers, which would overload our servers in no time. So, we exclude XML files.

Obviously, our customers need sitemaps, so we add a rule to exclude XML files unless they’re sitemaps. We identify the sitemaps by the name, that’s why it has to contain the word sitemap in the name.

Neo的解读:

官方的意思非常直白:

  1. 为了节省服务器资源,他们默认不处理 XML 文件(直接 301 扔回源站或者当做 HTML 处理)。
  2. 因为 XML 通常是 RSS 订阅源,更新快、体积大,翻译它们会把服务器撑爆。
  3. 但是,他们也知道用户需要 Sitemap。
  4. 所以,他们搞了一个硬性规则:文件名里必须包含 “sitemap” 这个词,且以 .xml 结尾的文件,才会被当做 Sitemap 正常放行,不进行 301 跳转。

坑就在这里!

很多 CMS 系统(比如 WordPress 的某些插件)生成的子 Sitemap,命名并不一定都带 sitemap 这个词。比如我的 archive-1.xml,虽然是地图文件,但名字里没有 sitemap,就被 Gtranslate 无情地 301 到了主站。

04 见招拆招:Nginx 伪静态救场

找到了原因,问题就好解决了。

既然 Gtranslate 只认名字里带 sitemap 的文件,那我们就给它造一个

因为 CMS 系统的 Sitemap 生成逻辑往往写在核心代码或插件里,直接改代码风险太大,后续升级也麻烦。最优雅的解决方案是使用 Nginx Rewrite(伪静态)规则

我的思路是: 创建一个新的 URL 规则,比如 archive-1-sitemap.xml,让它在表面上包含 “sitemap” 字符,实际上在服务器内部转发给原始的 archive-1.xml

具体操作代码如下:

在 Nginx 配置文件中添加以下 Rewrite 规则:

# 欺骗 Gtranslate 的伪静态规则

# 将 category-sitemap.xml 转发给 category.xml
rewrite ^/category-sitemap\.xml$ /category.xml last;

# 将 archive-数字-sitemap.xml 转发给 archive-数字.xml
rewrite ^/archive-(\d+)-sitemap\.xml$ /archive-$1.xml last;

操作步骤:

  1. 修改配置:将上述代码加入到 Nginx 配置文件的 server 块中。
  2. 重启 Nginxservice nginx reloadsystemctl reload nginx
  3. 验证:访问 https://es.dtfulogistics.com/archive-1-sitemap.xml,发现不再 301 跳转了,而是正常显示 XML 内容。
  4. 提交 GSC:去 Google Search Console,删掉旧的报错 Sitemap,提交新的带 sitemap 字符的 URL。

05 效果立竿见影

提交新地图后,我又观察了两天。

效果非常明显,GSC 里的小语种收录数据开始翻倍增长!之前因为 301 导致无法被发现的小语种页面,终于重新建立了索引。

总结

做独立站SEO,真的全是细节。

Gtranslate 虽然是一个强大的工具,但它为了性能做的一些“默认设置”,往往会成为我们的隐形坑。

本次避坑指南要点:

  1. 检查你的小语种 Sitemap:特别是子 Sitemap,确保它们能正常访问,没有 301 跳转。
  2. 命名规则:如果你用 Gtranslate,确保你的 Sitemap 文件名里包含 sitemap 字符。
  3. 善用 Nginx:当无法修改程序逻辑时,Nginx Rewrite 是最好的补丁工具。

希望我的踩坑经历能帮到大家,少走弯路!


参考资料:

  • Gtranslate Support Email
  • GTranslate Documentation