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指令用来声明站点地图的完整URL地址,帮助爬虫快速了解网站结构,一般放在文件末尾。Crawl-delay指令用来设定爬虫两次抓取之间的间隔秒数。但要特别注意:谷歌的蜘蛛不支持Crawl-delay,它的抓取频率由自身算法决定,设置这条指令对它无效。如果强行依赖这个功能,最后可能期望落空。
配置语法本身不复杂,但很多站点在细节上栽了跟头。下面这几类错误特别高发:
把理论落地到实践,可以按下面这几步来操作,每一步都顺手检查一下,减少返工成本。
没有固定的生效时间。百度站长后台和Google Search Console都支持手动提交更新请求,提交后一般几个小时到几天内会重新抓取。如果没提交,就得等爬虫自然周期访问,可能拖到一两周。
如果页面本来没有排名,屏蔽后对整站没什么影响。但如果屏蔽的是有排名的页面,收录和索引会逐步退出,相应的关键词流量也会随之下降。因此屏蔽前最好先核实页面是否有实际搜索价值。
每个子域名都是独立的站点,需要在各自根目录下单独放置robots.txt。比如www.example.com和m.example.com是两套文件,互相之间不通用。改动一个子域名的规则,不会影响另一个子域名的抓取行为。
robots.txt看似一个不起眼的文本文件,但配置的好坏直接影响爬虫效率和收录质量。建议你在改完文件后,至少隔一周观察一次抓取报告和收录数据,看看规则有没有按预期生效。同时养成记录变更的习惯——哪次改了什么、为什么改,都留个备注,方便日后追溯。把这些基本功练扎实了,网站的搜索引擎友好度自然会提升一个台阶。