在 robots.txt 里写 nofollow 其实不生效,标准到底认哪些字段
为什么在 robots.txt 里写 nofollow 指令不起作用,robots 排除协议标准只定义了什么字段?答案很直接:标准文本里根本没有 nofollow 这个指令。按标准,robots 排除协议只有两组字段——User-agent 声明这组规则对哪个抓取程序生效,Disallow 声明哪些路径不允许进入。nofollow 属于网页的元标记指令,不属于 robots.txt 的文件字段,把它写进文件,按标准解析的抓取程序只会把它当无效行。
标准里到底有哪些字段
标准文本用 User-agent 与 Disallow 搭出整个规则块:文件头部声明这组规则面向哪个抓取程序,下面逐行列出不许进入的路径。其余写法在这个标准里找不到出处。排查「规则写了但爬虫不理」的问题时,第一步不是怀疑爬虫,而是核对写的内容在不在标准字段清单里——不在清单里的行,等于没写。
nofollow 属于哪一层
两个名词只差一个后缀,归属却分两层:robots.txt 是站点级的抓取协议,回答「哪些路径别让进」;网页元标记是文档级的指令,回答「已经拿到手的页面该怎么对待」。nofollow 属于后者。把后者写进前者,相当于把室内的告示贴在了小区大门上——位置不对,读到的人也无权执行。
想拦抓取和想拦收录分别动哪里
拦抓取,动 robots 配置:按路径填写 Disallow。要留意只拦抓取拦不住收录——页面即便不被抓取,仍可能因为外部链接被收录,展示成残缺摘要。想彻底退出索引,动服务端:确认下线的旧地址用 301 重定向指向替代页,把地址和权重去向都说清楚;本就不该对外的内容直接关闭访问。两条路各管一头,用反了方向等于白忙。
站内配置的两个常见误区
一是改完伪静态规则不回头查 robots:路径形态变了,Disallow 里按旧路径前缀写的规则就落空。二是把 robots.txt 当收录开关用:它管的是进不进门,不是收不收录。AnQiCMS 后台把 Robots.txt 配置和 301 跳转管理做成两个独立入口,正是按这两条线设计的——不该被爬的写规则,不该被索引的做跳转或关闭访问。
常见问题
问:以前的文件里写了 nofollow 行,会立刻出问题吗? 答:不会立刻出事,但按标准解析的抓取程序根本没执行这行,你以为生效的效果其实一直没生效,建议清理并改用正确的层。
问:栏目想暂时不让进索引,先动哪里? 答:先判断该不该对外:不该对外就关闭访问,并把旧链接以 301 指向替代页面;只是暂时不想进索引,用页面级控制处理,别硬塞进 robots.txt。
问:调整完抓取规则,检查顺序是什么? 答:先核对新路径前缀与现有 Disallow 条目是否匹配;再走一遍 301 重定向链,确认没有断点;最后看新生成的站点地图里地址是否已切换到位。