生成的sitemap.xml看似完整,但URL超过协议上限后,搜索引擎只处理一部分。单个Sitemap最多50000个URL且未压缩文件不应超过50MB,商品多时必须拆分并提供Sitemap Index。
现象
我保留了一个失败样本,并用同样输入在无缓存或单节点条件下再跑一遍。这样可以把前端假象、缓存和真正的数据问题分开。
排除法
- 统计实际
数量和文件字节,不要以后台“生成成功”为准。 - 检查robots.txt和Search Console提交的是索引文件还是某个分片。
grep -c "<url>" pub/sitemap.xml wc -c pub/sitemap.xml xmllint --noout pub/sitemap.xml curl -I https://shop.example.com/sitemap.xml
这里的重点不是把报错暂时消掉,而是让同一操作再执行一次仍保持幂等;因此修复后一定要做第二次重复执行测试。
最终处理
启用支持分片的生成逻辑,按产品、分类或每49900条切成多个sitemap-*.xml.gz,再生成只包含
修改范围
- 先在单个SKU、单个订单或单个Store验证。
- 保留可回退的旧配置,不覆盖原始证据。
- 需要批量处理时分批提交并输出成功/失败清单。
检查收尾
- 每个分片URL数和大小都低于限制
- 索引中的loc均可200访问
- URL域名与所属Store一致
- Search Console重新抓取无解析错误
验收不只看后台提示“成功”。我还会从前台/API再走一次真实链路,并在下一轮cron、索引或缓存命中后重复检查,确认不是短暂正常。
经验
Sitemap Index本身使用sitemapindex根节点,不能把URL条目直接混在其中。

