动手前先判断影响范围:是单个请求出错,还是整条链路都受影响,处理方式完全不同。 把 sitemap.xml 预压缩成 .gz 后上传,浏览器下载正常,GSC 提交却一直提示无法读取,换浏览器试也是一样。
多数情况下不用停机,但涉及重启服务时最好挑低峰期。
先分清是哪一类原因
- 文件是 gzip 内容但没有返回 Content-Encoding: gzip
- 服务器对 .xml 直接输出二进制,蜘蛛按文本解析失败
- 提交地址写成了 .gz 但响应头声明的类型是 text/html
按顺序处理
1. 看响应头里有没有编码声明
curl -sI https://www.example.com/sitemap.xml
2. 在 Nginx 里按扩展名补编码头
location ~ \.xml\.gz$ { add_header Content-Encoding gzip; }
3. 按实际返回内容判断是不是压缩流
curl -s https://www.example.com/sitemap.xml | head -c 20 | xxd
怎么确认已经恢复
重新抓取后 GSC 显示读取成功,解析出的 URL 数量与本地统计一致,状态不再反复。
容易忽略的地方
更省事的做法是不预压缩,交给服务器在传输层做 gzip,蜘蛛和浏览器都能正常读取,也不用维护两份文件。 线上环境和本地环境的差异往往就在版本和默认参数上,比对一下两边的实际取值能省很多时间。