大站的典型症状:新文章发出去一周还没收录,老内容倒是天天被抓。这不是蜘蛛偏心,是抓取预算被浪费了。官方定义说得很清楚:抓取预算是 Google 分配给一个主机名的抓取资源,由两块构成——抓取容量上限(服务器扛得住多少并发抓取,响应稳就升,5xx、429 多就降)和抓取需求(站点规模、更新频率、页面质量、热度共同决定蜘蛛想抓多少)。容量和需求都有限,浪费在垃圾 URL 上的每一次抓取,都是从正经内容嘴里抢的粮。
官方给的适用门槛也值得引用:百万级以上页面且每周更新,或万级以上页面且每日更新,才真正需要管理抓取预算。小站读这条的意义是别瞎折腾——官方原话就是内容更新当天就被抓的站,把 sitemap 维护好、定期看索引报告就够了。够格管预算的大站,四招按优先级排:整合重复内容、robots.txt 屏蔽无价值路径、永久移除的页面回 404/410、消除软 404。
# robots.txt:屏蔽无抓取价值的路径
User-agent: *
Disallow: /search*
Disallow: /tag/
Disallow: /*?sort=
Disallow: /*?page=
Disallow: /wp-json/
Sitemap: https://www.example.com/sitemap.xml
屏蔽名单不是拍脑袋写的,先去日志里看蜘蛛实际在抓哪些参数 URL,拿数据定名单。官方文档还特别点了一个反直觉的坑:别用 noindex 来省抓取预算——Google 要先抓取页面才能看到 noindex 标记,抓取一次没少花;robots.txt 屏蔽才是真省,蜘蛛根本不发起请求。但屏蔽的代价是页面彻底无法被索引,只对确实不需要收录的路径使用。
# 用数据定名单:蜘蛛抓了哪些带参数的 URL
grep -E "Baiduspider|Googlebot" /var/log/nginx/access.log \
| awk '{print $7}' | grep "?" \
| awk -F"?" '{print $1}' | sort | uniq -c | sort -rn | head -10
# 蜘蛛抓取的目录占比(对照 robots 名单查漏)
grep -E "Baiduspider|Googlebot" /var/log/nginx/access.log \
| awk '{print $7}' \
| awk -F/ '{print "/"$2}' \
| sort | uniq -c | sort -rn
改完 robots.txt 要走三道验证:资源平台的抓取诊断(或 Google 的 robots.txt 报告)确认文件语法没写错、规则生效;curl 直接拉 robots.txt 人肉过一遍;一周后重跑上面的日志统计,参数 URL 和被屏蔽路径的抓取占比应该明显下降,腾出来的抓取量流向内容页——这才是优化生效的铁证。
# 验证一:语法与生效
curl -s https://www.example.com/robots.txt
# 验证二:一周后对比参数 URL 抓取占比
# 改造前先跑一次留基线,改造后同命令对比
grep -E "Baiduspider|Googlebot" /var/log/nginx/access.log \
| awk '{print $7}' | grep -c "?"
最后两条官方警告务必记牢:一是不要玩“定期增删 robots.txt 规则来临时调预算”的花活,官方明确说这是要避免的做法,规则只用于长期不想被抓的路径;二是抓取容量上限跟着服务器健康走,响应时间稳定、5xx 归零,上限自然上调,配置层面的优化(缓存、压缩、数据库提速)和 robots.txt 是一体的,光堵不疏没有用。预算优化的本质就一句话:让蜘蛛的每一口都咬在值得收录的内容上。
相关阅读:抓取预算是收录问题的病根理论。《SEO 自动化总清单:日、周、月、季各该跑什么》的日志组篇目都在为它服务——预算花在哪、浪费在哪,按总纲的节奏每周对一次账。
A5创业网 版权所有