robots.txt是网站根目录下的一个纯文本文件,用来告知搜索引擎爬虫哪些页面可以访问、哪些需要避开。设定合理,爬虫会把精力集中在重要页面上,新内容收录速度明显提升;一旦写错,可能让整站抓取受限,甚至拖累现有搜索排名。想要避免这些麻烦,吃透它的语法规则和那些容易被忽略的坑,是每个网站运营者的必修课。
robots.txt本质上是一份给爬虫看的“建议清单”,没有任何强制执行力。任何人都可以直接在浏览器里输入“你的域名/robots.txt”查看到它的全部内容。可以把这份文件想象成园区门口的地图,它只是告诉你哪里能逛、哪里别去,但存放核心机密的地方,绝对不能只靠这张地图来守着。
这个文件的作用仅限于控制爬虫“要不要来抓取”,并不决定某个页面最终是否出现在搜索结果里。举个例子,即使你在Disallow里屏蔽了一个页面,如果站外有大量外链指着它,搜索引擎依然有可能把它收录,只是展示的摘要可能来自缓存或页面描述文本。
更关键的是,这份协议完全依赖爬虫自觉遵守。主流搜索引擎的蜘蛛一般会照章办事,但市面上大量第三方采集脚本和恶意爬虫根本不会搭理它。凡是涉及用户隐私、管理后台、支付接口等敏感区域,一定要同步做好登录验证、IP黑名单或服务器防火墙等硬性拦截手段,千万别把安全希望寄托在这样一份“君子协定”上。
robots.txt由多个规则组构成,每个规则组以User-agent行开头,标明这组规则给谁看。所有指令的格式都是“名称: 值”,冒号必须是英文半角,冒号后建议加一个空格。大多爬虫对格式有些容忍度,但写规范了能避免日后解析出错。
这一行决定规则组的适用范围。想只针对谷歌蜘蛛,就写User-agent: Googlebot;想让所有搜索引擎统一执行,就用通配符User-agent: *。通过拆分成多个规则组,你可以实现精细控制,例如对百度放开全站,同时限制其他蜘蛛的抓取权限。
Disallow用来声明禁抓路径,Allow用来声明允许路径,两者通常搭配使用。这里有个高发误区:Disallow后面是空白时,代表清除全部封锁,允许爬虫抓取全站。当某个URL同时命中多条规则时,搜索引擎通常执行“最长匹配优先”——路径越具体,级别越高。比如同时有Disallow: /api/和Allow: /api/public/,后者的路径更长,所以public子目录下的内容会被正常放行。
Sitemap指令用来声明站点地图的完整网址,方便爬虫快速了解网站结构,通常放在文件末尾。Crawl-delay指令则是设定爬虫两次抓取之间的间隔秒数。这里要记住:谷歌蜘蛛不认Crawl-delay,它的抓取频率由自家算法决定,写了这行对它完全无效,别指望靠它控制谷歌的抓取节奏。
语法本身不算复杂,但不少站点都栽在细节上。下面三类错误极其常见,配置时需格外留意:
除此之外,修改完robots.txt后记得用支持robots协议测试的工具验证一下,再配合搜索引擎的抓取诊断功能确认效果,避免改了之后根本不起作用。
一份规范的robots.txt,通常包括如下内容:声明适用的爬虫、设定允许和禁止的路径、链接到站点地图。下面是推荐的实施流程:
需要特别强调的是,robots.txt里的规则千万不要写成“屏蔽所有爬虫”这种一刀切形式。如果临时下线某个目录,优先用404或noindex标签,而不是靠robots.txt,否则容易造成大量页面长期失联,影响全站权重。
不一定立刻,但影响可能很大。如果误封了核心路径,爬虫会逐渐停止抓取这些页面,索引量随之下降,排名通常在几天到几周内体现出来。发现后尽快修正,并利用搜索引擎的抓取工具重新提交链接,多数情况可以恢复。
Disallow管的是“爬虫能不能来抓”,noindex是“这个页面不要出现在索引里”。两者用途不同:不想让某个目录被访问,用Disallow;希望页面可访问但不想被收录,用noindex更合适。需要提示的是,如果页面被Disallow封住,爬虫看不到noindex标签,所以对想屏蔽收录的页面,通常不建议同时使用Disallow。
早期robots协议只支持精确匹配和*号通配符,$号表示匹配结尾,不支持完整的正则语法。谷歌和部分搜索引擎支持这些通配符,但仍有少数蜘蛛不认。如果条件允许,最好用具体的目录或文件路径,别依赖通配符,以保持最大兼容性。
robots.txt虽然只是个小文件,却关系着整个站点的爬取效率。核心要点有三:一是认清它只是建议,不承担安全功能;二是严格遵循语法规则,善用最长匹配原则;三是避免大小写、漏斜杠、规则组空行这类细节错误。建议现在就去检查一下根目录下的robots.txt,确认关键路径没有被误封,同时加上Sitemap声明,再结合实际抓取报告,持续优化你的配置。