如何配置robots.txt禁止爬虫抓取带特定查询参数的URL
一、robots.txt部署位置说明
仅需在网站根目录部署单份robots.txt即可,子目录下放置的robots.txt不会被任何主流搜索引擎爬虫识别。
按照robots协议标准,所有爬虫只会请求域名根路径下的robots.txt(即https://www.example.com/robots.txt),不会主动爬取子目录下的同名配置文件,之前尝试子目录部署不生效是协议本身的规则限制,不是配置写错。
二、之前规则失效的原因
之前写的两条规则都存在语法匹配问题:
Disallow: ?share=pinterest$:Disallow规则从域名后的路径起始位置开始匹配,直接以?开头无法匹配任何带前置路径的URL;同时$结尾匹配符仅Google等少数爬虫支持,通用场景下依赖该符号会导致规则对大部分爬虫失效。Disallow: /wordpress/*/?share=pinterest:通配符*后多余的/会导致匹配逻辑出错,无法命中/wordpress/[文章slug]/?share=pinterest这类结构的URL,且规则仅覆盖wordpress目录,无法覆盖根目录下可能出现的同参数链接。
三、正确的拦截规则
直接在根目录的robots.txt中写入以下配置即可拦截全站所有带?share=pinterest参数的链接:
User-agent: * Disallow: *?share=pinterest
规则说明:
User-agent: *代表规则对所有搜索引擎爬虫生效,避免仅配置Googlebot导致其他搜索引擎漏拦截- 前缀
*通配符匹配任意长度的路径,不管链接位于根目录还是/wordpress子目录,只要查询参数携带share=pinterest就会被拦截 - 不添加
$结尾符,兼容所有支持robots协议的爬虫,不会出现规则识别失败问题
四、生效优化建议
- 修改完
robots.txt后,直接到对应搜索引擎的站长平台主动提交更新后的robots.txt文件,触发爬虫重新解析,无需等待自然爬取周期,一般数小时内即可生效 - 现有链接上的
noindex属性可以保留,和robots.txt规则形成互补:robots.txt负责阻止爬虫发起抓取请求,noindex负责兜底避免已抓取过的链接被收录;如果担心nofollow属性影响内部权重传递,可以移除该属性,不会影响拦截收录的效果。
内容的提问来源于stack exchange,提问作者rwkiii
相关产品推荐
相关产品推荐

