一、基本语法
User-agent: *
Disallow: /admin/
Allow: /admin/public/
Sitemap: https://www.it586.cn/sitemap.xml
User-agent:指定规则适用的爬虫,*表示所有。Disallow:禁止抓取的路径。Allow:在禁止范围内开个例外(Google/百度支持,优先级高于同长度的 Disallow)。Sitemap:声明站点地图地址,必须写完整 URL。
规则按「最长匹配优先」生效:/admin/ 禁止、/admin/public/ 允许,则后者可被抓取。
二、最常见的三个错误
1. Disallow: / 屏蔽全站
这是最致命的:想屏蔽某个目录,写成了根路径。上线前一定用浏览器访问 https://站点/robots.txt 核对一遍。
2. Disallow 当成「收录控制」
robots.txt 只阻止抓取,不阻止收录。如果外链指向了被 Disallow 的页面,搜索引擎无法抓取内容,仍可能凭标题和链接把它收录,显示为「无描述」的结果。要阻止收录,正确做法是:
- 页面返回
noindex(能被抓取才能看到 noindex)。 - 或用 401/403 让爬虫拿不到内容。
3. Disallow 与 noindex 同时用
两者一起用会互相抵消:爬虫无法抓取页面,就看不到 noindex,页面可能一直留在索引里。要 noindex 就不要 Disallow。
三、通配符与结尾
User-agent: *
Disallow: /*?* # 禁止所有带查询参数的 URL
Disallow: /*.pdf$ # 禁止所有 pdf($ 表示结尾)
Disallow: /search # 同时匹配 /search 和 /searchxxx
Disallow: /search/ # 只匹配 /search/ 开头
*匹配任意字符,$表示 URL 结尾。这两个是 Google/百度支持的扩展,非标准但通用。- 末尾有没有
/差别很大:/search会匹配/search.html、/searchabc;/search/只匹配该目录下。
想屏蔽带参数的 URL(如分页、筛选)时,Disallow: /*?* 很有效,但也会屏蔽掉所有有意义的参数页,要确认没有重要内容依赖参数。
四、多爬虫与优先级
User-agent: *
Disallow: /tmp/
User-agent: Baiduspider
Allow: /
Disallow: /tmp/
User-agent: Googlebot
Crawl-delay: 1
Disallow: /private/
- 每个
User-agent段落独立,爬虫只读自己匹配的那段(找不到才用*)。 - 一旦为某个爬虫单独写了段,它**不再读
*段**,要写全。 Crawl-delay只有部分爬虫支持(百度、Yandex),Google 不认,要用 Search Console 里的抓取速度设置。
五、Sitemap 声明
Sitemap: https://www.it586.cn/sitemap.xml
放在文件任意位置都行,但建议放最后。多个 sitemap 可以写多行。这条声明能帮爬虫更快发现站点地图,比在后台提交多一层保障。
六、robots.txt 的正确用法
适合:
- 屏蔽后台、管理接口、临时目录、搜索结果页。
- 屏蔽重复内容的参数页(谨慎)。
- 声明 sitemap 位置。
不适合:
- 保护敏感信息(robots.txt 是公开的,等于告诉别人「这里有好东西」)。
- 阻止页面被收录(用 noindex)。
- 替代登录鉴权。
安全提醒:任何靠「爬虫不会来」的思路都是错的。后台路径写进 robots.txt 反而暴露了位置,正确做法是加认证。
七、检查清单
- 访问
https://域名/robots.txt能正常返回 200,内容是纯文本。 - 没有
Disallow: /这种全站屏蔽(除非确实要下线)。 Sitemap是完整 URL,且能访问。- 重要目录没有被误屏蔽。
- 没有同时用
Disallow和noindex。 - 规则改动后,在站长平台用「robots 测试工具」验证。
需要生成或校验规则时,用 robots.txt 生成器;站点地图用 sitemap 生成器。
小结
Disallow: / 会屏蔽全站,上线前必看;robots 只阻止抓取不阻止收录;要 noindex 就别 Disallow;末尾斜杠与通配符影响匹配范围;别忘了写 Sitemap。