搜索引擎的抓取工具每次访问你的网站时,都会先查看根目录下的robots.txt文件,再决定放行或跳过哪些链接。这个文件写得好,重点页面能得到更频繁的抓取,后台和隐私目录也安全;写错了,轻则收录异常,重则整个站点从搜索结果中彻底消失。
Robots协议本质上是一种公开的君子协定,蜘蛛抓取前都会先来读取这份声明。文件不存在或内容空白时,蜘蛛默认允许访问所有未加密的链接。想约束抓取范围,就必须主动写明限制声明。
要明确的是,这份协议只对正常的搜索引擎有效,对恶意采集程序或改头换面的爬虫缺乏强制力。涉及登录后台、用户资料等敏感区域,必须依靠登录认证和IP白名单来兜底。
规则的核心语句有两组:User-agent指明适用的蜘蛛对象,Disallow标明禁访路径。辅助指令中,Allow能在禁止目录内开放指定子路径,Sitemap则方便蜘蛛快速发现新链接。
对完全公开的博客或展示页面,最省事的写法是不拦截任何路径:
User-agent: *
Disallow:
Disallow后面留空才代表放行。若写成Disallow: /,则等于关闭全站收录,这种写法通常只用于服务器维护或测试环境。
当某个爬虫消耗大量带宽却带不来实际流量时,可以单独限制它。蜘蛛名要写准确,如谷歌为Googlebot、百度为Baiduspider:
User-agent: BadBot
Disallow: /
这样配置后,只有BadBot对应的爬虫被挡在站外,其他蜘蛛正常访问。但规则仅按名称匹配,遇到更换标识的恶意爬虫依然无法识别阻止。
想让搜索引擎只收录部分频道而隐藏其他内容时,可采用全局禁访、定向放行的方案:
User-agent: *
Disallow: /
Allow: /articles/
Allow: /about/
Allow: /sitemap.xml
组合写法中,Allow优先级高于Disallow,且规则可多次累加。为保证兼容性,建议把Allow规则放在所有Disallow之后,路径以斜杠开头,并与服务器实际目录保持一致。
一个语法完全正确的robots.txt仍可能导致收录异常,以下几类错误最为频发。
路径大小写不匹配:蜘蛛对路径大小写敏感。站点目录是/Public/,规则写成/public/,Disallow就不起任何作用。配置前最好用浏览器逐一核对真实路径。
多个User-agent段相互覆盖:后声明的通用规则段(如User-agent: *)不会自动继承前段的具体规则,而是独立生效。若某个特定蜘蛛段后跟着通用段,两个段互相独立,容易被误判为规则冲突。
误封正常页面:比如用Disallow: /admin却忘了站点管理后台实际路径是/admincp/,或把CSS、JS这类必要资源一并屏蔽,导致页面加载与抓取异常。
忽略Sitemap声明:单独设置Sitemap:行能显著加速新内容收录,但许多站点往往漏掉这一行,仅依赖蜘蛛自然发现,延长了内容入库时间。
每次修改完robots.txt后都应该做一次验证,而不是直接丢到线上。
两者最终效果相同,都代表不限制抓取。但保留Disallow:留空这行能明确表达本意,避免后续维护时误删规则导致全站被封。
robots.txt只控制抓取范围,不管控抓取频率。想降低频次需要借助站长平台的抓取频率设置或流量配额功能,从搜索引擎侧进行调节。
在最新协议中,Allow规则优先于Disallow。但为稳妥起见,请勿将两者配置在相同长度的路径上,以免不同搜索引擎解释不一致。
配置robots.txt应坚持够用原则:只屏蔽确需隐藏的目录,其余保持开放。上线前后进行多次实际测试,并按要求放置Sitemap声明,是保证收录正常、避免踩坑最稳妥的做法。若发现抓取异常,优先排查路径写法和规则先后顺序,多数问题都能据此解决。