入口页能不能被蜘蛛正常抓取,一半取决于服务器和网络,另一半取决于你给蜘蛛的信号。robots.txt 和 meta robots 就是最基础的两个信号,配置错了,后面的资源、内容、跳转链路都白搭。
robots.txt 在蜘蛛池里扮演什么角色
robots.txt 是蜘蛛访问一个站点时最先取的几个文件之一。它不控制收录,只控制抓取行为。对蜘蛛池来说,它的作用主要是三个:告诉蜘蛛哪些路径可以抓、限制抓取频率、声明 sitemap 位置。
入口页通常希望被频繁抓取,所以整体思路是“放开为主、限制为辅”。真正要拦的是后台、测试目录、日志文件这类和抓取无关的内容。
Allow 与 Disallow 的取舍
- 只拦明确无用的目录,比如 /admin/、/tmp/、/logs/,以及带 session 参数的动态地址。
- 不要用 Disallow 去“管理”页面质量。屏蔽一个入口页,蜘蛛就不会再去,等于自己断掉一条入口。
- 注意路径匹配多按前缀处理,写 /go/ 可能连 /goods/ 一起拦掉。
Crawl-delay 要不要写
百度支持 Crawl-delay,Google 基本忽略,它更依赖服务器返回错误时的自动降速。入口页数量多、单机承载有限时,可以设一个偏保守的值;但如果你本来就指望蜘蛛多来,写一个很大的 delay 反而会拖慢发现节奏。更稳妥的做法是靠服务器限速和抓取日志观察来调节,而不是只依赖这一行。
Sitemap 声明
把入口页的 sitemap 地址写进 robots.txt,能减少蜘蛛空跑的时间。sitemap 建议按批次拆分,单个文件不要塞太多 URL,并且只放状态正常、可被抓取的页面。
meta robots 与 X-Robots-Tag
meta robots 写在 HTML 的 head 里,控制粒度到单个页面;X-Robots-Tag 写在 HTTP 响应头里,适合控制非 HTML 资源以及批量下发规则。两者同时存在且冲突时,通常以更严格的那条为准。
- noindex:页面可被抓取但不索引。入口页一般不用,除非它本身就是纯中转页。
- nofollow:不追踪页面上的链接。入口页的核心价值就是往外导出链接,加这个等于自废武功。
- noarchive / nosnippet:只影响快照与摘要展示,不影响抓取本身。
批量建站时最容易出的事故,是模板里带了一个 nofollow 或 noindex,一上线就全量生效,而且很难第一时间察觉。上线前先抓一个页面看源码。
常见配置坑
- robots.txt 返回 5xx,蜘蛛会当作暂时不可用,一段时间内可能减少或停止抓取。
- 写过 Disallow: / 之后忘了改回来,整站直接关门。
- 用 robots.txt 把跳转路径也拦掉,蜘蛛到了入口却走不到目标页。
- 多个子域各自维护一份 robots.txt,规则之间互相矛盾。
上线前的检查清单
- 直接访问 /robots.txt,确认返回 200,且内容就是你预期的那一份。
- 随机抽一个入口页,查看源码里的 meta robots 标签。
- 用 curl -I 看 X-Robots-Tag 是否存在、值是否正确。
- 确认 sitemap 地址可访问,且里面的 URL 状态码都正常。
- 用抓取日志复核,蜘蛛是否真的抓到了你希望它抓的那些路径。
robots.txt 和 meta robots 不是设置一次就能长期不管的东西。入口页批量调整、模板更新、路径改版之后,都要重新走一遍上面的检查,否则很容易出现“以为门开着、其实一直关着”的情况。