给蜘蛛池入口页做 robots.txt 屏蔽,是很常见的一步操作:有人想减少无关目录被抓,有人误以为屏蔽能“集中抓取权重”。但如果屏蔽的位置不对,最直接的后果就是搜索蜘蛛压根不访问入口页,页面上的目标 URL 自然也就无从被发现。下面按几种常见写法分别说明。
先分清:robots.txt 管的是“能不能抓”,不是“能不能收录”
robots.txt 是抓取协议,作用对象是爬虫的访问行为。它不控制索引层面的判断,也不保证被屏蔽的页面一定不出现。反过来,一个页面没被屏蔽、能被抓,也不等于会被收录。这两件事常被混在一起,导致很多误判。
所以判断入口页能不能给目标 URL 带路,第一件事是确认:蜘蛛到底会不会来读这个 HTML。
三种常见屏蔽方式,结果完全不同
1. 直接 Disallow 入口页本身
如果写的是:
Disallow: /entry/
而入口页正好在 /entry/ 目录下,那么搜索蜘蛛在抓取前就会放弃这个 URL。多数情况下它不会再请求页面,也就看不到里面的链接列表。此时目标 URL 只能靠其他途径被发现,比如被别的页面链接、被 sitemap 声明、被手动提交。
2. 只屏蔽静态资源目录
如果屏蔽的是 /assets/、/js/、/img/ 这类目录,而链接写在 HTML 里,那么 HTML 仍可被抓,蜘蛛照样能解析出 a 标签里的目标 URL。这种做法通常影响不大,前提是链接确实在 HTML 源码里,而不是靠 JS 渲染出来。
3. 用 Disallow 屏蔽带参数的通配规则
有些站点为了阻止爬虫抓取筛选参数,会写类似 Disallow: /*? 的规则。这类规则很容易误伤:如果入口页本身带参数,或者目标 URL 本身就带参数,结果可能一并被挡住。加规则前最好用工具逐条测试,不要凭感觉写。
noindex 和 Disallow 不是一回事
有人给入口页加了 noindex 就以为万无一失,其实 noindex 属于索引层面:蜘蛛仍然会抓页面、仍然会看到链接、仍然可能顺着链接去抓目标 URL。反过来,Disallow 才是让蜘蛛不抓。两者混用的典型后果是:入口页没被抓,noindex 标签压根没被读到,页面反而可能以其他形式出现。
如果你的目的是“入口页别进索引,但链接照常被跟”,用 noindex 更贴合;如果目的是“别抓这个页面”,才用 Disallow。目的不同,选的手段就不同。
怎么确认蜘蛛有没有来读入口页
- 看服务器日志:筛选常见搜索蜘蛛 UA,确认 /entry/ 这类路径是否有请求记录,以及返回码是否为 200。
- 用搜索引擎的 robots.txt 测试功能:输入入口页 URL,看是否被规则命中。
- 站内搜索或 site 指令观察入口页是否出现在结果里,作为辅助参考,不作唯一依据。
- 检查入口页是否有 JS 渲染依赖:若链接由前端脚本生成,即使 robots.txt 放行,也要确认蜘蛛能否拿到渲染后的 HTML。
更稳妥的做法
如果入口页的职责就是给目标 URL 提供发现路径,一般建议:
- 让入口页本身可被抓,返回稳定的 200。
- 只对确实无意义的目录(如后台、临时文件、日志)做屏蔽。
- 避免全站通配规则,规则越宽,误伤概率越高。
- 定期用日志验证,规则和目录结构变化后重新检查一遍。
robots.txt 只能表达“希望蜘蛛怎么抓”,最终抓不抓、多久抓、抓多少,由搜索引擎自己决定。屏蔽了就一定不被抓、放行了就一定被抓,这两种想法都不成立。
回到最初的问题:入口页被 robots.txt 挡住,上面的目标 URL 还有没有机会被发现?如果挡的是入口页本身,通过这个页面带路的机会基本就没有了;如果只挡了无关目录,链接仍写在可抓的 HTML 里,发现路径一般不受影响。先确认屏蔽范围,再谈优化,比反复换域名或加链接更有效。