Robots文件:亲手搞砸三个网站后,我才明白这玩意儿的狠
你猜怎么着?去年我有个客户的网站,流量一夜归零。排查了三天,服务器、代码、外链,都正常。最后发现,是robots.txt里多打了一个斜杠。就一个斜杠!整个网站被搜索引擎彻底屏蔽了。那一刻,我真想抽自己一嘴巴。说到robots文件,很多站长可能只是建站时顺手丢一个,之后再也不看。说实话,我以前也这样。直到付出真金白银的代价,我才明白这小小的文本文件,简直就是网站的生死符。
Robots文件是什么?别把它想得多神秘
说白了,它就是个给搜索引擎爬虫看的“门禁清单”。放在网站根目录,告诉Google、百度这些蜘蛛,哪些目录你别来,哪些文件随便看。语法简单得令人发指:User-agent指定爬虫,Disallow说不许去,Allow说可以去。没了。真的,就这么点东西。
但是——注意这个但是——就是这点简单的东西,一旦用错,后果不堪设想。你可能会把整个网站对搜索引擎关上大门,还乐呵呵地以为一切正常。就像你给家里装了最先进的防盗门,却把钥匙挂在门外。蠢不蠢?我就干过这事儿。
https://obgeo.oss-cn-beijing.aliyuncs.com/pvc-articles/d3e84b06-ea7b-476c-b173-97d23c5a7f76.jpg
网站根目录robots.txt文件内容示例截图
那时候刚入行,给一个电商网站做优化。我想着,后台管理地址得藏起来吧,不能被抓取。于是写下:Disallow: /admin。挺聪明对吧?然后顺手又加了一句:Disallow: /?。我当时想的是,这是阻止带问号的动态网址。结果呢?首页的网址就是“/”,问号表示参数,我这么一写,首页就被禁了。整个网站首页不收!流量掉得那叫一个惨。老板差点没杀了我。
那些让我半夜惊醒的Robots配置错误
错误一:把大小写搞混。URL在Linux服务器是区分大小写的,robots文件里的路径也是。比方说,Disallow: /MyFolder 和 Disallow: /myfolder 完全是两回事。我有次在Windows本地测试好好的,传到Linux服务器就失效了。排查到凌晨三点,发现就是字母大小写的问题。气不气?气得我连抽两根烟。
错误二:误用通配符。robots文件支持*和$两个通配符,但很多人乱用。*匹配任意字符,$匹配结尾。有一次我想屏蔽所有PDF文件,写了:Disallow: /*.pdf。结果居然没生效,因为语法应该是Disallow: /*.pdf$。少了美元符号,它可能匹配到“/abc.pdf/”这种目录,而不是文件结尾。就这点差别,我损失了整整两周的抓取预算。搜索引擎抓取有配额,它浪费了大量抓取力在这些无用的PDF上,重要的页面反而没抓全。
错误三:用robots文件来隐藏敏感信息。天大的错误!robots文件是公开的,谁都能看。你写Disallow: /secret-backdoor/,等于在门口贴条:“此处有后门,请勿进入”。黑客最爱这种地方。我见过一个案例,一哥们把管理后台路径写在Disallow里,结果被黑客直接攻击。一定要记住,真正敏感的东西,得用密码保护,而不是robots。
https://obgeo.oss-cn-beijing.aliyuncs.com/pvc-articles/638a55f6-66cd-40c0-ab72-e3e3b41bd6e1.jpg
robots.txt错误配置导致网站被搜索引擎屏蔽警告图
错误四:不同的爬虫规则顺序搞反。Googlebot和百度蜘蛛的规则如果冲突,可能出问题。一般规则是按顺序匹配,但更具体的规则要放前面。我写过一段:
User-agent: *
Disallow: /private/
User-agent: Googlebot
Allow: /private/public/
本意是让Googlebot可以抓取/private/public/,其他爬虫不能。但实际运行,Googlebot匹配第一组Disallow就停住了,因为它也是*的一员。正确写法应该把Googlebot放最前面。这种坑,不踩一次哪知道。
错误五:对Crawl-delay的误解。这个指令设置抓取延迟,但Googlebot根本不鸟它。只有Bing、Yandex等遵守。我有次为了降低服务器负载,设了Crawl-delay: 10,然后纳闷为什么Google抓取还是那么猛。后来才知道得用Google Search Console单独调速度。你说冤不冤?
Robots文件的黄金法则:让搜索引擎乖乖听话
首先,建站后就检查,定期检查。尤其是改版、迁移的时候。我现在的习惯是,只要动过URL结构,第一件事就去验证robots。用Google Search Console或者百度站长平台自带的robots检测工具,输入几条重要URL,看是否被允许抓取。别凭感觉,一定要工具验证。毕竟眼睛会骗人,工具不会。
其次,善用Allow和Disallow的组合。比如你只想让某个爬虫抓特定目录,用Allow精确放开,其余全禁。例子:
User-agent: Googlebot-Image
Disallow: /
Allow: /public/images/
这样只有Google图片搜索可以抓取/images/目录下的图片。比直接Disallow: /private_images/要清晰。我不喜欢模棱两可的规则,会让自己后面也发懵。
再者,sitemap地址一定写在robots文件末尾。这算是向搜索引擎指路:嘿,我的网站地图在这儿,快去抓。写不写影响不大,但写了显得专业,抓取效率可能更高。写法:Sitemap: https://你的网站/sitemap.xml。可以多条。我一般把索引型sitemap放上去。
还有一个冷知识:robots文件有大小限制吗?理论上没有,但各大搜索引擎只会读取前几百KB。如果你的网站巨大,目录数万个,别把robots写成一本书,那会出问题。精简,再精简。我只列核心的禁止和允许,其他的由爬虫自己判断。
https://obgeo.oss-cn-beijing.aliyuncs.com/pvc-articles/3fad3b90-a5ed-44e1-bc86-67ee89932fd3.jpg
站长工具检测robots.txt文件是否生效截图
最后,千万不要用robots文件禁止所有抓取,然后期望还能被收录——这是逻辑悖论。我见过一个新手,把robots设为Disallow: /,然后跑来问我为什么网站没收录。我哭笑不得。如果你在开发阶段,确实想禁止所有抓取,可以设置,但上线后一定要改。或者用noindex标签更灵活。
现在想想,robots文件这东西,就像一把双刃剑,用好了让搜索引擎如臂使指,用差了就是自断经脉。我的原则是:除非你知道自己在干什么,否则别瞎改。而且每次修改,都要做好记录和测试。我现在还会把robots文件的变更记入版本控制,方便回滚。你可能觉得夸张,但等你出过一次事故,你就会像我一样胆小了。
行了,说了这么多,其实就一句:尊重那个小小的robots.txt,它可能就是你网站生死的开关。别不信,我之前也不信。 经验很宝贵,尤其是亲身实践过的总结,比网上随便找的靠谱多了。 对这个话题有了更全面的认识,不再只停留在表面理解。 内容干货满满,没有多余废话,对有需要的人来说帮助真的很大。
页:
[1]