新网站上线三个月后,百度只收录了首页,没有收录其他页面。经过对服务器、页面质量以及外部链接进行排查之后发现,该问题是由一个只有几十个字左右的robots文件引起的,在网站创建的过程中这种情况很常见。

robots.txt文件虽然不大,但是它却是搜索引擎爬虫访问网页的第一道关卡。如果这个文件的内容正确无误的话,那么就不会有人去注意它了;但是一旦有一处错误出现,就会使整个网站遭到长时间的封锁。
🧭蜘蛛进入车站的第一步
当蜘蛛访问一个网站时,它会先检查该网站根目录下有没有一个叫/robots.txt的文件,并且是以纯文本的形式存在的,没有强制要求,但是大部分搜索引擎都会遵守其中的规定。如果这个文件不存在或者返回404状态码的话,那么整个站点都会被抓取;而如果它返回的是500或者超时的话,则一些搜索引擎将会暂时停止对该网站的爬取工作。
所以第一步很简单:在浏览器中输入域名/robots.txt,如果返回的是200状态码的话就说明可以正常访问了,否则就会被CDN或者WAF拦截掉变成403错误。许多网站为了防止txt文件被直接访问而设置了防火墙,从而导致爬虫无法抓取到内容。
斜杠成本
Disallow 很容易出错,请看以下两个例子:
# 错误写法
Disallow: /product
Disallow: /news/
Disallow: /*
第一行为 /product, /productcenter, /product-list 等等所有的路径都不能被爬虫访问。如果要限制某一个子目录的话,在最后加个斜杠就可以了,比如 Disallow: /product/。第三行更厉害一些,用星号来表示整个站点都不可以被搜索引擎收录,很多网站上线时默认就有这样的规则存在,如果不删除的话整个网站都会被搜索引擎忽略掉。
通配符 * 和结束符 $ 可以用作匹配工具,但是不可以用来大范围屏蔽。通常被屏蔽的内容包括后台、搜索结果页面以及带参数的重复页面等等:
User-agent: *
Disallow: /admin/
Disallow: /search
Disallow: /*?utm=
Allow: /
不可以把allow当做万能药
常见的一种错误的做法是:在前面已经规定了不能访问的情况下再添加一条可以访问的规定来进行补救。但是按照机器人协议的要求,“最长匹配优先”,只有当父目录被禁止的时候,子目录才有可能被允许访问。如果同一个路径既有Disallow又有Allow的情况,在不同搜索引擎之间就会出现不同的判断结果。
最好的方法就是先确定好不可以被过滤掉的部分之后再考虑要不要填上其他的空,并且默认不填写比一开始就把所有信息都填进去更安全得多。
地图导航的网址不能是相对路径
有些文件里是这样写的:
Sitemap: sitemap.xml
该声明无效,应包含绝对路径和协议、域名等数据:
Sitemap: https://www.example.com/sitemap.xml
百度资源平台上提交的sitemap和robots.txt文件里的注释是两回事,两者都需要有。其中robots.txt文件里写的内容主要是为了让其他搜索引擎或者爬虫程序来用,如果没有的话并不会影响百度自己提交,但是会降低被发现的机会。
不能一起关闭了CSS与JavaScript
蜘蛛在渲染网页时也会加载样式、脚本等文件,有些公司的robots.txt文件里就禁止了/static/和/css/目录下的资源被访问,尽管可以获取到这些文件的内容,但是得到的结果是未经优化的版本,结构判断失败,页面质量评分下降的同时也被搜索引擎排除在外。
判断的方法就是利用百度资源平台进行诊断,并且对渲染结果进行检查,如果发现有页面布局混乱、文字无法识别的现象的话,那么就先看这里。
不要把测试环境的要求带入到生产的环节中
在创建网站时为了防止测试站被搜索引擎索引,一般会在robots.txt里加上一句禁止整个站点被抓取的内容。当网站正式上线之后,这部分代码通常会保留下来。上线清单中有一项就是检查根目录下的robots.txt文件是否为生产环境所使用的版本。这一步的成本很低,可以节省几周的时间来发现问题。
上线后要做的工作主要有以下三个方面
第一种办法是用百度资源平台的robots工具去查语法错误、看哪些链接会被判定为不能爬取;第二种办法就是随机选取10条内部页面的URL在工具里一个个试;第三种办法就是在改版或者修改规则之后的两周之内观察一下索引量有没有出现异常的情况,如果降幅超过20%的话就先把规则给撤掉再去看看。
robot文件不需要重启服务器就可以对其进行编辑,而且编辑后的效果可以立刻生效,但是这样做的后果就是任何一个错误的操作都会马上被执行出来。每次修改都需要记录下时间和内容,在遇到问题时也可以很快地找出原因。
设置方法很简单,以“默认接受”为原则,在不需要被收录的文件夹中进行删除操作。只有完成了网页抓取之后才考虑要不要收录的问题。