本文约 3,145 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:sitemap 提交了,却提示”抓取失败”
把 /sitemap.xml 填进百度搜索资源平台,第二天看到状态是”抓取失败”或”已获取 0 条”,这是非常典型的场景。原因通常不在百度,而在文件本身:编码不是 UTF-8、URL 里带了非法字符、单文件超过条数或体积上限、lastmod 时间格式不符合 W3C Datetime、或者站点刚迁移导致 URL 全是重定向。sitemap 是唯一能”一次性把全站结构告诉百度”的通道,值得花半小时做对。本文讲清四种提交方式、格式红线与自动更新做法。
原理分析:sitemap 是说明书,不是保证书
sitemap 的作用是”列出你认为值得抓取的 URL 及其更新时间”,帮助百度发现深链、新页。它属于”发现”阶段的辅助工具,不承诺收录:百度读完 sitemap 后仍要自己抓取、评估,才决定是否建索引。因此 sitemap 里塞满低质页不但无用,还会稀释抓取预算。
百度支持的常见格式与限制:
| 项目 | 要求 |
|---|---|
| 编码 | UTF-8,且 BOM 头尽量避免 |
| 单文件 | 不超过 5 万条 URL、10MB 以内 |
| 时间格式 | W3C Datetime,如 2026-10-10T13:00:00+08:00 |
| URL | 必须是完整绝对地址,且与最终可访问地址一致(不含跳转) |
| 声明位置 | 可在 robots.txt 中用 Sitemap: 声明 |
如果是全新站点,建议先按新站快速被百度收录的完整路径把验证与提交流程走一遍再来看本文。WordPress 5.5+ 自带 sitemap,默认地址 /wp-sitemap.xml,它本身是一个索引文件,指向 /wp-sitemap-posts-post-1.xml 这类子文件,这种”索引套子文件”的结构百度是支持的。
保姆级实操
第一步:确认 sitemap 可访问且格式正确
# 检查返回码与内容类型
curl -I https://mimangfei.com/wp-sitemap.xml
# 期望:HTTP/2 200 ,content-type: application/xml
# 检查编码与条目数
curl -s https://mimangfei.com/wp-sitemap.xml | head -20
curl -s https://mimangfei.com/wp-sitemap-posts-post-1.xml | grep -c '<url>'
# 检查文件体积
curl -s https://mimangfei.com/wp-sitemap-posts-post-1.xml | wc -c
第二步:手工构造一个最小可用 sitemap(用于排查插件生成的 XML 是否合规)
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://mimangfei.com/wordpress-baidu-seo/</loc>
<lastmod>2026-10-10T13:00:00+08:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://mimangfei.com/hello-world/</loc>
<lastmod>2026-10-09T09:30:00+08:00</lastmod>
</url>
</urlset>
第三步:在资源平台提交
进入「资源提交 → 普通收录 → sitemap」,填写 sitemap 的完整 URL,点击提交。百度会异步抓取,状态会经历”待抓取—抓取中—已获取”的变化。
第四步:在 robots.txt 中声明
即便在平台提交过一次,也建议在 robots.txt 里声明,方便百度随时重新读取:
User-agent: Baiduspider
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /search/
Sitemap: https://mimangfei.com/wp-sitemap.xml
第五步:保证自动更新
WordPress 自带 sitemap 随内容自动更新,但页面缓存插件可能缓存旧版本。需要在缓存规则里排除 wp-sitemap*.xml:
# Nginx:sitemap 不缓存、不走缓存页规则
location ~* ^/wp-sitemap.*\.xml$ {
add_header X-Robots-Tag "noindex" always;
expires 0;
add_header Cache-Control "no-store, no-cache, must-revalidate";
try_files $uri $uri/ /index.php?$args;
}
第六步:定期看状态
资源平台会显示最近抓取时间、获取条数、有效条数。若”有效条数”远小于”获取条数”,说明大量 URL 不合规,需要回头修格式。
常见踩坑
- 提交的是跳转地址:sitemap 里写 http,站点 301 到 https,百度会判为不合规 URL,用 curl -I 逐个确认返回 200。
- 带 BOM 头:部分编辑器保存的 XML 带 BOM,导致解析失败。
- 超过上限:文章数上万后单文件超限,应拆成索引文件 + 子文件,WordPress 自带方案已处理。
- 被缓存插件缓存旧版:新文章发了,sitemap 还是上周的,百度自然看不到。
- 案例:某企业站 sitemap 提交后显示”已获取 3000 条,有效 0 条”。原因是插件把
lastmod写成了2026/10/10 13:00这种非标准格式,整份文件被判为无效 URL。改成2026-10-10T13:00:00+08:00后,有效条数立刻接近获取条数。 - 把 sitemap 地址写进 robots 的 Disallow:一边声明 Sitemap 一边把目录封了,自相矛盾。
- sitemap 里混入 noindex 页面:百度会认为你在给出互相矛盾的信号,应保持一致。
总结
判断标准:sitemap 提交成功的标志是资源平台显示”已获取 N 条,有效 N 条”,且 N 与你的实际文章数接近。行动清单:curl 验证 200 与 content-type → 检查编码与 lastmod 格式 → 确认条数与体积在上限内 → 平台提交 + robots 声明 → 缓存规则排除 sitemap → 每周看一次有效条数。若需要按条件过滤 sitemap 内容(例如只给百度文章页),可以参考为百度单独生成sitemap的插件配置。
