robots.txt 决定「不许看什么」,sitemap 决定「优先看什么」。两者配合使用,才能把有限的抓取预算导向真正重要的页面。
它们的共同点是:写错一个字符,后果都是全站级别的。所以在改之前,先把当前版本备份下来。
robots.txt:规则比你想的严格
放在站点根目录,必须通过 https://域名/robots.txt 可访问,返回 200 且是纯文本。如果这个地址返回 404,搜索引擎的行为是允许抓取全部——比写错更危险。
一份可直接用的模板
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /search/
Disallow: /go/
Disallow: /*?replytocom=
Disallow: /*&preview=
Allow: /wp-content/uploads/
Sitemap: https://blog.nvcb.cn/wp-sitemap.xml
逐条说明:
| 规则 | 作用 |
|---|---|
Disallow: /wp-admin/ | 屏蔽后台,唯一例外是 admin-ajax.php,某些前端功能依赖它 |
Disallow: /?s= | 屏蔽站内搜索结果页,避免无限 URL 组合 |
Disallow: /go/ | 屏蔽跳转中转页(如果站点有) |
Disallow: /*?replytocom= | 屏蔽评论回复链接,这类 URL 数量随评论爆炸 |
Allow: /wp-content/uploads/ | 确保图片可被抓取,图片搜索流量依赖它 |
四条必须记住的规则
- 路径是前缀匹配,不是通配。
Disallow: /tag/会屏蔽所有以/tag/开头的地址,包括/tagging/。要精确匹配得写Disallow: /tag/$之类的通配语法。 - 大小写敏感。
/Tag/和/tag/是两回事。 - 越具体的 User-agent 优先级越高。针对
Googlebot的独立规则会覆盖*的规则,所以给爬虫分组的写法要格外小心。 - Do not 同时用 robots 屏蔽和 noindex。屏蔽后爬虫读不到 noindex,页面会以「被屏蔽」状态长期留在索引里,且里面的链接权重传递也会中断。
提交前的自检
用 GSC 的 robots.txt 测试工具,输入任意一个正文页 URL,确认返回「网址可抓取」。这一步能挡住 90% 的误屏蔽。
sitemap:不是越多越好
sitemap 的作用是「发现」,不是「收录保证」。把垃圾页面塞进去,只会稀释真正重要页面的抓取频率。
WordPress 原生 sitemap
地址 /wp-sitemap.xml,它会自动分出几个子 sitemap:
wp-sitemap.xml
├── wp-sitemap-posts-post-1.xml ← 文章,最重要
├── wp-sitemap-posts-page-1.xml ← 独立页面
├── wp-sitemap-taxonomies-category-1.xml
├── wp-sitemap-taxonomies-post_tag-1.xml ← 标签,通常需要过滤
└── wp-sitemap-users-1.xml ← 作者页,通常不需要
三个需要处理的地方:
1. 过滤掉内容过少的标签
add_filter('wp_sitemaps_taxonomies_query_args', function ($args, $taxonomy) {
if ($taxonomy === 'post_tag' || $taxonomy === 'category') {
$args['count_min'] = 3; // 低于 3 篇的标签/分类不输出
}
return $args;
}, 10, 2);
这一步做完,sitemap 里的标签页数量通常会从几百降到几十,剩下的才是有内容价值的。
2. 移除作者 sitemap
单作者站点(绝大多数博客)完全不需要作者归档页被收录。两种做法:
// 方式一:从 sitemap 里排除
add_filter('wp_sitemaps_add_provider', function ($provider, $name) {
return ($name === 'users') ? false : $provider;
}, 10, 2);
// 方式二:给作者页加 noindex
add_action('wp_head', function () {
if (is_author()) {
echo '<meta name="robots" content="noindex, follow">' . "\n";
}
}, 1);
3. 确认 lastmod 是真实修改时间
WordPress 原生 sitemap 输出的 <lastmod> 取的是文章修改时间,这是正确的。但有些插件会把它写成「生成 sitemap 的时间」,导致每次更新 sitemap 所有条目的日期都变成今天——搜索引擎会识别出来并忽略这个字段。
检查方式:打开 sitemap,看是不是所有 <lastmod> 都是同一个日期。是的话就是假的。
把两者配合起来看
一张表说清分工:
| 页面 | robots.txt | sitemap | 用哪个 |
|---|---|---|---|
| 正文文章 | 允许 | 收录 | 两者一致 |
| 后台 /wp-admin/ | 屏蔽 | 不收 | robots 足够,无需 noindex |
| 站内搜索结果页 | 屏蔽 | 不收 | robots 足够 |
| 内容少的标签页 | 允许 | 不收 | 用 noindex,不用 robots |
| 带参数 URL | 部分屏蔽 | 不收 | 优先 canonical 归一 |
判断「该用哪个」的通用原则:
- 页面永远不需要被抓取(后台、内部接口)→ 用 robots.txt;
- 页面可以被抓取,但不想被索引(薄内容标签页、归档页)→ 用 noindex,且不要 robots 屏蔽;
- 页面内容重复,但有一个正版→ 用 canonical。
上线检查清单
/robots.txt返回 200,内容是纯文本,无 HTML 标签混入;- robots 里没有任何一条规则会屏蔽正文路径;
- robots 里包含绝对地址的 Sitemap 声明;
- sitemap 能被打开,子文件全部返回 200;
- sitemap 中文章 URL 占比 ≥ 70%;
<lastmod>不是全部同一天;- 在 GSC 里重新提交 sitemap;
- 用 GSC 的 robots 测试工具验证一个正文页「可抓取」;
- 用网址检查工具验证一个正文页「可以编入索引」。
这九项花不到二十分钟,但它们决定了你后面所有内容工作的上限。
常见问题
sitemap 里的 URL 会全部被收录吗?
不会。sitemap 只影响发现速度和抓取优先级,是否索引仍由内容质量和 robots/noindex 决定。把低质量页面塞进去不会让它被收录,只会浪费抓取额度。
修改 robots.txt 后多久生效?
搜索引擎通常在下次抓取 /robots.txt 时生效,一般几小时到一天。但也可能缓存更久,重要改动建议同时在 GSC 里用测试工具主动验证。
能不能完全不要 sitemap?
技术上可以,只要内链结构足够好,搜索引擎也能发现所有页面。但对内容型站点,sitemap 能显著加快新文章的发现速度,尤其对数量已经上百的站点,成本几乎为零,建议保留。
![图片[1]-robots.txt 与 sitemap.xml 正确写法(WordPress 版)-极客资源](http://blog.nvcb.cn/wp-content/uploads/2026/09/2300459e-7be1-4916-8cb0-b18e91cec1c1-1024x683.png)
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们第一时间更新。











暂无评论内容