WordPress 6.5 用自定义脚本生成 sitemap,post-sitemap.xml 每天重建、里面的 lastmod 都是当天,但总索引 sitemap_index.xml 是三个月前生成的,四个子项的时间全停在 2026-07-12。GSC 显示已提交,抓取统计里这四个文件两周没来过一次,手动重新提交索引也没有变化。
排查方向其实有限,先把可能性排一排。脚本只重写了子文件,没有回写索引里每个 sitemap 的 lastmod;索引文件被 CDN 缓存了 30 天,蜘蛛读到的还是旧副本;索引里的 loc 写的是 http 地址,和实际被抓的 https 子文件对不上;脚本每次重建都换 inode,但蜘蛛不读文件时间,只认 XML 里的时间。
第一件事是对比索引与子文件里的时间
curl -s https://www.example.com/sitemap_index.xml | grep -E 'loc|lastmod'
生成子文件时同步回写索引
find /var/www/sitemaps -name '*.xml' -newermt '2026-11-01' -exec stat -c '%n %y' {} +
随后把索引文件的缓存时间压到十分钟
location = /sitemap_index.xml { add_header Cache-Control "public, max-age=600" always; }
剩下的就是清一次 CDN 上索引文件的缓存再提交
curl -X PURGE https://www.example.com/sitemap_index.xml
改完先别撤,确认这几项。索引里四个子项的 lastmod 都变成当天,重新提交后 24 小时内抓取统计出现对应文件的请求,新文章从已发现到抓取的间隔缩短到一天以内。
索引文件的时间不是给自己看的,蜘蛛只按它决定要不要重读子文件,子文件再新也传不上去。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
