网站内容越来越多以后,SEO经常会遇到一个问题:
搜索蜘蛛每天抓了很多URL,但真正重要的产品页、服务页和文章反而抓得不多。
尤其是WordPress、商城、筛选系统或者内容量比较大的网站,很容易产生:
站内搜索结果。
后台地址。
登录页面。
购物车。
参数URL。
筛选URL。
排序页面。
测试目录。
重复打印页。
一些没有搜索价值的功能页面。
这时候很多人会想到:
能不能通过robots.txt告诉百度、Google,这些页面不用抓,把抓取资源留给真正重要的内容?
可以。
这正是robots.txt最典型的用途之一。
但必须先理解一个非常重要的区别:
robots.txt控制的是“搜索蜘蛛能不能抓取这个URL”,并不等于“这个URL一定不会出现在搜索结果”。
Google当前官方文档已经明确提醒,如果一个页面被robots.txt禁止抓取,但其他网站或者页面仍然链接到这个URL,Google仍然可能知道这个地址,并把URL显示在搜索结果中,只是无法抓取正文生成完整摘要。真正想阻止页面进入Google索引,更适合使用noindex或者访问权限控制。
所以robots.txt真正适合解决的是:
抓取管理。
理解这一点以后,再设置就不容易出错。
第一:Robots.txt到底是什么?
robots.txt是一个放在网站根目录下的纯文本文件。
例如网站:
https://www.example.com/
对应的robots文件通常是:
https://www.example.com/robots.txt
搜索蜘蛛访问网站时,会先读取这个文件,再根据里面的规则判断:
哪些目录可以抓。
哪些URL不应该抓。
Google目前对robots协议的说明明确指出,robots.txt中的规则只对该文件所在的主机、协议和端口生效;文件应该放在网站顶级目录,并使用UTF-8纯文本格式。
百度搜索资源平台当前对robots.txt的定义也类似:
网站可以通过robots文件声明不希望搜索引擎抓取的部分,并通过百度Robots工具创建、校验和查看规则是否生效。
所以可以把它理解成:
网站给搜索蜘蛛准备的一份抓取说明书。
第二:最基础的Robots.txt怎么写?
最常见结构是:
User-agent: *
Disallow:
其中:
User-agent: *
表示规则针对所有遵守robots协议的搜索蜘蛛。
而:
Disallow:
后面为空,表示没有禁止目录。
也就是:
允许抓取整个网站。
如果希望禁止抓取某一个目录,比如:
/private/
可以写:
User-agent: *
Disallow: /private/
这样搜索蜘蛛就会被告知:
不要抓取
/private/目录下的URL。
如果希望禁止多个目录,则逐行写:
User-agent: *
Disallow: /private/
Disallow: /temp/
Disallow: /test/
百度当前robots工具手册也明确支持User-agent、Disallow、Allow以及*、$等匹配方式。
第三:千万不要误写成“禁止整个网站”
robots.txt里最危险的一条规则就是:
User-agent: *
Disallow: /
这句话的意思不是:
禁止抓取首页。
而是:
禁止所有搜索蜘蛛抓取整个网站。
新站测试环境经常会使用这一规则,避免测试网站被收录。
真正危险的是:
开发完成以后正式上线,却忘记删除。
百度过去就专门提醒过,很多网站流量突然下降,最终排查发现是技术人员误用robots封禁了搜索蜘蛛。
所以网站上线、主题更新、服务器迁移以后,都建议第一时间访问:
https://你的域名/robots.txt
确认有没有:
Disallow: /
这种全站封禁规则。
第四:哪些“没用页面”比较适合用Robots限制抓取?
这里一定不要直接照抄别人robots.txt。
不同网站结构完全不同。
真正适合考虑限制抓取的,通常是:
没有独立搜索价值,而且会大量产生URL的功能页面。
比如某些站点的:
站内搜索。
测试目录。
临时目录。
内部接口页面。
没有搜索价值的后台入口。
部分重复参数URL。
例如站内搜索可能生成:
/search/?q=SEO
/search/?q=GEO
/search/?q=WordPress
/search/?q=AI
如果用户可以组合出几万个搜索结果页面,搜索蜘蛛不断抓这些URL,就可能造成大量无效抓取。
这时候如果业务确认这些页面完全不需要进入搜索,可以考虑:
User-agent: *
Disallow: /search/
但一定要先确认真实URL规则。
不要只看到:
别人屏蔽
/search/
就直接复制。
第五:WordPress网站哪些目录常见但不能乱封?
WordPress经常会看到类似robots设置:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
这种逻辑比较常见:
后台管理目录不需要搜索蜘蛛大量抓取。
但某些前端功能可能依赖:
admin-ajax.php
因此单独允许。
不过不要为了所谓“节省抓取预算”,直接写:
Disallow: /wp-content/
或者:
Disallow: /wp-includes/
因为里面可能包含页面正常渲染所需的:
CSS。
JavaScript。
图片。
其他静态资源。
Google当前明确提醒,如果被robots阻止的资源会影响页面正常渲染和理解,就不应该屏蔽这些资源,否则Google可能无法正确分析页面。
所以WordPress robots优化真正应该针对:
无价值URL。
而不是看到系统目录就全部封掉。
第六:动态参数URL要不要全部Disallow?
很多网站会产生:
/product/?sort=price
/product/?color=blue
/article/?page=2
/?utm_source=wechat
这时候一些教程会直接建议:
Disallow: /*?*
意思是:
禁止抓取所有带问号参数的URL。
百度官方历史robots示例确实展示过类似通配符写法。
但是实际网站千万不要机械照搬。
因为有些网站真正重要的页面本身也依赖参数。
例如:
/product?id=123
可能就是唯一的产品详情地址。
如果直接:
Disallow: /*?*
等于把这些产品页面一起封掉。
所以参数治理第一步应该先分类:
参数URL
↓
是独立有价值内容?
还是重复筛选/追踪参数?
只有确定没有搜索价值,再考虑限制抓取。
第七:Robots.txt不能代替Canonical
比如页面:
/product/
和:
/product/?utm_source=wechat
内容完全一样。
有些人第一反应是:
把所有参数URL全部robots禁止。
但如果真正的问题是:
一个内容存在多个URL版本。
更应该首先考虑:
Canonical。
内部链接统一。
Sitemap统一。
参数治理。
因为robots.txt只能告诉搜索蜘蛛:
不要抓这个地址。
它不能直接完成:
A和B其实属于同一个页面,应该把所有搜索信号统一到A。
这是Canonical更擅长解决的问题。
所以可以简单理解:
Robots.txt
解决抓取控制
Canonical
解决重复页面规范化
不要混在一起。
第八:Robots.txt也不能代替Noindex
这个区别尤其重要。
假设网站有一个页面:
/member/
你明确不希望它出现在Google搜索结果。
如果只写:
User-agent: *
Disallow: /member/
Google无法抓这个页面。
但如果互联网其他位置已经存在这个URL的链接,Google仍然可能知道这个URL存在,并可能仅以URL形式展示。
Google官方对此说明得非常清楚:
robots.txt并不是阻止网页进入Google索引的可靠方法。
如果真正不希望页面出现在Google搜索里,应该使用:
<meta name="robots" content="noindex">
或者HTTP:
X-Robots-Tag: noindex
又或者对隐私内容进行登录和密码保护。
所以这里一定要区分目标。
目标是:
不想搜索蜘蛛浪费时间抓取。
考虑robots.txt。
目标是:
不想页面出现在搜索结果。
考虑noindex或访问权限控制。
第九:不要同时Robots封禁,又要求搜索引擎读取Noindex
这是一个特别典型的SEO错误。
比如页面代码有:
<meta name="robots" content="noindex">
同时robots.txt又写:
User-agent: *
Disallow: /private-page/
你真正的目的可能是:
希望搜索引擎抓到noindex,然后删除页面。
结果却是:
搜索蜘蛛被robots拦在门外,根本看不到页面里的noindex。
Google当前明确说明:
为了让noindex生效,页面必须允许Googlebot抓取。
如果页面被robots.txt禁止访问,Google就无法读取noindex规则,URL仍可能继续出现在搜索结果里。
所以如果一个已经被索引的页面准备移出Google:
不要马上robots封掉。
应该先让搜索蜘蛛能够访问:
noindex
待搜索系统重新处理。
这是非常重要的区别。
第十:隐私页面更不能只靠Robots.txt
比如:
内部管理系统。
客户资料。
未公开报价。
测试环境。
私人文件。
如果内容真正敏感,不能指望:
Disallow: /secret/
保护隐私。
因为robots.txt本身就是公开文件。
任何人打开:
example.com/robots.txt
都可以看到你写了:
Disallow: /secret/
反而等于告诉别人:
这里存在一个secret目录。
所以隐私内容应该使用:
登录验证。
密码保护。
访问权限。
IP限制。
而不是把robots.txt当成安全系统。
Google官方同样建议,如果内容属于私密信息,应当使用密码保护等方式限制访问。
第十一:Robots.txt可以针对不同搜索蜘蛛单独设置
例如希望对所有蜘蛛开放:
User-agent: *
Disallow:
也可以专门针对Googlebot:
User-agent: Googlebot
Disallow: /test/
或者针对Baiduspider:
User-agent: Baiduspider
Disallow: /test/
百度官方目前仍然提供不同Baiduspider类型说明,并支持针对Baiduspider设置不同抓取规则。
不过普通企业网站没有必要把robots配置写得特别复杂。
如果并不存在:
Google允许、百度禁止。
这种明确业务需求,使用统一规则通常更容易维护。
规则越复杂,未来技术人员越容易误改。
第十二:Allow什么时候有用?
比如你已经禁止整个目录:
User-agent: *
Disallow: /folder/
但是其中有一个页面希望继续允许:
/folder/important.html
可以写:
User-agent: *
Disallow: /folder/
Allow: /folder/important.html
意思就是:
整个folder目录禁止。
但important.html例外。
Google当前robots规范支持:
User-agent
Allow
Disallow
Sitemap
并在规则冲突时按照匹配路径的具体程度处理。
百度同样支持Allow规则和通配符匹配。
不过规则越复杂,越应该先用官方工具测试。
第十三:Robots.txt里可以放Sitemap
例如:
User-agent: *
Disallow: /search/
Disallow: /temp/
Sitemap: https://www.example.com/sitemap.xml
Google明确支持:
Sitemap:
字段,而且要求填写完整绝对URL。
这也是非常常见的robots配置方式。
搜索蜘蛛访问:
/robots.txt
以后,就可以同时知道:
哪些URL不应该抓。
以及:
站点地图在哪里。
对于多Sitemap网站也可以写多行:
Sitemap: https://example.com/post-sitemap.xml
Sitemap: https://example.com/page-sitemap.xml
第十四:Robots.txt设置以后,怎么检查有没有写错?
百度搜索资源平台目前提供专门的:
Robots工具。
可以:
创建robots规则。
检测现有文件。
校验规则。
查看百度当前生效的robots内容。
检查指定URL是否被封禁。
如果修改以后百度仍然显示旧版本,还可以通过工具提交更新。
所以百度SEO网站修改robots以后,不要只说:
文件已经上传,应该生效了。
可以直接进入搜索资源平台测试。
Google方面也可以结合:
Search Console URL Inspection。
抓取测试。
服务器日志。
确认目标页面是否被robots阻止。
第十五:为什么修改Robots.txt以后搜索蜘蛛没有马上变化?
因为搜索引擎可能会缓存robots.txt。
Google当前官方说明:
通常会把robots.txt内容缓存最多约24小时。
如果新的robots文件无法正常获取,例如出现超时或者5xx,缓存时间还可能延长。
所以:
上午修改robots。
下午日志里偶尔还有旧行为。
不一定说明配置失效。
更重要的是:
robots文件自己必须稳定返回。
如果搜索蜘蛛访问:
/robots.txt
持续遇到服务器错误,反而会造成新的抓取问题。
第十六:robots.txt自己也不能返回奇怪状态
正常robots.txt最好:
可以公开访问。
返回200。
内容是纯文本。
例如:
https://example.com/robots.txt
直接打开即可。
Google当前要求robots.txt是UTF-8编码的纯文本文件,并且只解析有效robots规则。
不要出现:
robots.txt访问以后跳登录。
返回网站404模板。
返回一段HTML首页。
服务器5xx。
这些问题都会增加搜索蜘蛛判断难度。
第十七:哪些页面通常不建议用Robots禁止?
这一点特别重要。
核心文章
当然需要抓。
产品和服务页
需要参与搜索。
CSS和JS等重要渲染资源
如果屏蔽以后搜索蜘蛛无法正常理解页面,不应该封。Google已经明确提醒这一点。
已经设置Noindex、希望搜索引擎重新抓取并移除的页面
也不能同时先robots封死,否则搜索引擎看不到noindex。
Canonical目标页面
既然它是规范版本,就应该正常抓取。
所以robots真正应该控制的是:
明确无搜索价值、又会消耗大量无效抓取的URL。
而不是:
看不懂的目录全部封掉。
第十八:WordPress可以怎么规划Robots.txt?
假设一个普通企业WordPress网站。
核心页面包括:
首页。
服务。
产品。
案例。
文章。
这些全部应该正常抓取。
另外可能存在:
后台。
站内搜索。
一些测试目录。
那么可以根据真实情况设计类似:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /search/
Disallow: /test/
Sitemap: https://www.example.com/sitemap_index.xml
注意:
这只是一个结构示例。
不要直接复制到所有WordPress网站。
例如有些站内搜索URL并不是:
/search/
而是:
/?s=keyword
有些网站根本没有测试目录。
所以真正写robots以前,应该先用爬虫或者服务器日志梳理:
到底有哪些无价值URL正在被搜索蜘蛛大量访问。
再针对性处理。
第十九:大型网站为什么更值得做Robots治理?
如果网站只有30个页面。
robots优化通常不是最优先的SEO工作。
因为搜索蜘蛛抓几十个URL没有太大压力。
但如果网站有:
10万产品。
筛选组合生成100万URL。
各种排序参数再生成更多地址。
这时候抓取管理就很重要。
Google当前也明确表示,对于拥有几十万甚至更多URL的大型网站,如果存在大量重复或低价值页面,可以考虑限制部分不重要页面的抓取,让系统更集中处理重要内容。
所以robots治理真正体现价值的场景通常是:
URL规模已经明显膨胀。
如果一个企业官网只有50页,却花几天研究复杂robots规则,投入产出未必高。
第二十:Robots.txt不是解决URL膨胀的唯一方法
如果网站每天产生几万个垃圾参数URL。
最好的方案也不一定只是:
Disallow
更应该继续追查:
为什么这些URL会产生?
是不是可以直接停止生成?
是不是站内存在大量无意义链接?
是不是筛选系统可以调整?
是不是需要Canonical?
是不是应该返回404?
因为即使robots禁止抓取,这些URL仍然存在。
如果网站自身不断创造新的无价值URL,搜索蜘蛛还是可能持续发现这些地址。
所以更完整的URL治理逻辑应该是:
停止制造无效URL
↓
统一内部链接
↓
处理重复页面
↓
设置Canonical
↓
必要时Robots限制抓取
↓
清理Sitemap
robots只是其中一层。
第二十一:设置Robots前,可以先做一张页面分类表
对于几百、上千URL的网站,我更建议先分类。
| 页面类型 | 是否需要抓取 | 是否需要索引 |
|---|---|---|
| 首页 | 是 | 是 |
| 产品页 | 是 | 是 |
| 服务页 | 是 | 是 |
| 文章页 | 是 | 是 |
| 案例页 | 是 | 是 |
| 站内搜索页 | 通常否 | 通常否 |
| 后台页面 | 通常否 | 否 |
| 用户私人页面 | 否 | 否 |
| 重复筛选页 | 视情况 | 视情况 |
| 跟踪参数URL | 通常没必要单独抓 | 不应作为独立规范页 |
这样会发现:
是否抓取。
和:
是否索引。
本来就是两列。
这正是robots.txt和noindex不能混为一谈的原因。
第二十二:网站SEO最常见的Robots错误,可以直接检查这6项
1. 正式站误写
Disallow: /
导致整站封禁。
2. 为了Noindex页面直接Robots封禁
搜索蜘蛛因此看不到noindex。
3. 把CSS、JS重要资源封掉
影响搜索引擎渲染页面。
4. 参数规则写得太宽
例如:
Disallow: /*?*
误伤真正需要索引的动态页面。
5. 测试环境规则带到正式站
改版上线时非常常见。
6. 抄别人的Robots.txt
网站URL结构完全不同,却直接复制。
这些问题造成的影响,通常比所谓“抓取预算优化”严重得多。
Robots.txt到底应该怎么让搜索引擎少抓没用的页面?
最后可以把整个过程压缩成这几步。
第一步:先找出搜索蜘蛛正在抓什么。
通过:
服务器日志。
百度抓取数据。
Search Console。
网站Crawler。
找出大量无搜索价值URL。
第二步:给URL分类。
哪些真正需要搜索。
哪些只是功能页面。
哪些属于重复参数。
第三步:先治理URL产生机制。
能不生成的垃圾URL,最好直接不生成。
第四步:对确定无抓取价值的路径使用Robots。
例如:
User-agent: *
Disallow: /确定无价值的目录/
第五步:不要把Robots和Noindex、Canonical混淆。
抓取控制、索引控制、重复规范化分别解决。
第六步:修改以后测试规则。
百度可以通过当前Robots工具创建、校验、更新规则并查看实际生效情况。
所以robots.txt真正正确的使用思路并不是:
我不想搜索结果出现这个页面,所以把它Disallow。
更准确的理解应该是:
这些URL没有必要让搜索蜘蛛反复访问,我要通过robots管理抓取范围。
真正不想进入搜索结果,要考虑noindex。
真正重复的URL,要考虑Canonical和URL规范化。
真正私密的页面,要使用登录和访问权限。
robots.txt只是其中一项工具。
但对于拥有大量参数页、搜索页、重复功能页的网站来说,它确实是技术SEO中非常重要的一项抓取治理能力。
真正好的Robots配置,不是禁止得越多越好,而是让搜索蜘蛛把更多访问机会留给网站真正值得抓取的内容。
评论
欢迎留下你的看法,评论会按站点设置审核展示。
0 条评论
还没有评论,来写下第一条吧。
请先登录后即可评论
登录评论已关闭