SEO 百科

通配符

本页目录

通配符

通配符 是两个特殊符号,写在 robots.txt 的 Allow 与 Disallow 取值中,* 匹配任意一串字符,$ 匹配网址结尾[1]。

这两个符号让规则不必逐条列网址。用对了,一条规则能挡住整类页面;用错了,挡住的范围会比预想更大或更小[4]。

星号的匹配范围

* 匹配 0 个或多个任意字符[4]。它写在路径中间时,这一段字符可以有,也可以没有。写了 Disallow: /search/*,/search/ 下面的全部网址都会被挡住。

Google 对星号的说明是,它代表任意一串字符[2]。因为星号能跨过斜杠,一条规则就能覆盖多层目录,不必一层层写。

美元符号的匹配范围

$ 匹配网址结尾[4]。Disallow: /*.pdf$ 只挡住一类网址,以 .pdf 结尾的都算在内,/a/b.pdf?x=1 不在范围里。

不加 $ 时,前缀匹配会一路命中后面所有路径。Disallow: /*.pdf 连 /a/b.pdf.html 也一起挡住[1]。

两个符号的组合

下面这段挡住带查询参数的网址,再挡住所有压缩包[1]:

User-agent: *
Disallow: /*?
Disallow: /*.zip$

/*? 里的星号可以匹配斜杠,问号前不管有多少层目录都会被命中;/*.zip$ 只认一类网址,以 .zip 收尾的才算。

各引擎的支持情况

Baiduspider 支持用 * 和 $ 做模糊匹配[4]。Google 在路径里同样认这两个符号[2]。Yandex 的处理方式一致[1]。

少数老爬虫不认这两个符号,会把 * 当成普通字符。写规则之前,先查一下目标引擎的文档,确认它认哪几个符号。

与收录范围的区别

通配符只改变抓取范围,不改变收录。Google 说明,被 robots.txt 挡住的网址仍可能出现在结果里,只是结果不带页面说明[3]。

想让页面不进结果,只用通配符做不到。得用 noindex 或者密码保护,这两样才管收录[3]。

常见误用

一种误用是把 * 用到分组行里当爬虫通配。User-agent: Google* 不会命中 Googlebot,星号在分组行只能单独写[2]。

另一种误用是漏写结尾的 $。写 Disallow: /*.php 会连 /a.php.html 一起挡住,只想挡 .php 文件就得补上 $[1]。

还有一种误用是把 $ 写到路径中间。$ 只认结尾,写在开头或者中间不成立,整条规则都会失效[1]。

附录

参见

参考资料

官方(境外)

  1. 《Disallow and Allow directives》,Yandex。
  2. 《如何编写和提交 robots.txt 文件》,Google 搜索中心。
  3. 《robots.txt 简介与指南》,Google 搜索中心。

官方(国内)

  1. 《平台工具使用手册(robots)》,百度搜索资源平台,2020-08-14 更新。

外部链接

无。