这类问题我又碰上了一次。教育站有 6 万多条课程视频,插件把全部记录写进一个 video-sitemap.xml,文件 78MB。Search Console 只读到前一部分,后面的课程视频完全没有抓取记录。试过 gzip 压缩,仍然只读到一半。

第一反应是「插件一次性生成全量文件,超时后写出的是半份 XML」,验证下来不成立。

把日志和配置对完,能解释这个现象的基本就这几处。单个 sitemap 文件最多 50000 条 URL,未压缩不超过 50MB;视频条目还受单文件视频数量上限约束,超出的被静默截断;索引文件没有拆分,蜘蛛只按第一个子文件调度。

动手时先看文件大小与条目数

curl -s https://www.example.com/video-sitemap.xml | grep -c '<url>'

然后按课程分类拆成子文件

wp eval 'foreach (get_terms("course") as $t) { echo $t->slug, "\n"; }'

生成索引文件指向子文件

printf '<?xml version="1.0"?><sitemapindex><sitemap><loc>https://www.example.com/vs/course-a.xml</loc></sitemap></sitemapindex>\n' > /var/www/html/video-index.xml

复核索引里的子文件数量

curl -s https://www.example.com/video-index.xml | grep -c '<sitemap>'

怎么算真的好了,看的是同一批现象。拆成十二个子文件后,索引里的条目数覆盖全部课程,Search Console 的视频抓取量在两周内翻了一倍。

拆分时按内容分组比按时间切更好,某一组更新时只需重生成对应子文件,不必整份重跑。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189