搜索全站
百度SEO 9 分钟阅读

网站速度对百度收录的影响:打开速度、稳定性与抓取预算的关系

页面打开慢到底会不会影响百度收录?本文拆解抓取预算的形成机制、TTFB 与首屏的达标线,给出 PHP 层与 nginx 层的提速配置,以及用 curl 量化测速的具体做法。

U
UFO_PF 2016-07-12 · 阅读 9 分钟
网站 百度SEO
阅读提示
本文约 3,283 字,预计阅读 9 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:服务器一慢,最先掉的不是用户体验,是收录

很多站长把网站速度当成纯体验问题,直到发现索引量长期卡在某个数字上不去、新文章发布一周还没被抓取,才开始怀疑是速度拖了后腿。这个怀疑往往是对的。Baiduspider 分配给每个站点的抓取配额是有限的,它按「单位时间能抓多少页」来调度。你的页面平均响应 2 秒,它在同样的时间窗里只能抓 500 页;如果压到 200 毫秒,同样的窗里能抓 5000 页。配额用不完的站,新内容自然排不上队。更极端的情况是页面偶尔返回 5xx 或超时,爬虫会主动下调抓取频次,进入恶性循环。所以速度不是「体验优化项」,而是实打实的收录前提。

原理分析:抓取预算由三个变量决定

抓取预算(Crawl Budget)在百度的语境里没有官方量化公式,但从资源平台的「抓取频次」工具和站长实测可以归纳出三个主导变量:响应速度(TTFB)、稳定性(错误率)、站点权重(历史更新质量与外链)。前两个是站长完全可控的,第三个是长期结果。百度在 2018 年推出的闪电算法,明确把移动网页首屏打开时间作为排序因素,3 秒内打开的页面在移动搜索里会获得展现优待,这条至今有效。

指标 合格线 优秀线 测量方式
TTFB(首字节) < 800ms < 200ms curl time_starttransfer
首屏渲染(移动) < 3s < 1.5s Lighthouse / 百度闪电算法口径
HTML 完全下载 < 1s < 300ms curl time_total
5xx / 超时占比 < 0.5% < 0.1% 日志统计
并发稳定 20 并发不超时 100 并发不超时 ab / wrk

注意区分「慢」和「不稳」。慢只是抓取效率低;不稳(间歇性 502/504)会让百度判定站点不可靠,直接削减频次,后者的杀伤力大得多。

保姆级实操

步骤 1:先用数据确认是不是真的慢。 不要凭打开感觉判断,用 curl 量化,并且用百度蜘蛛的 UA 去测,避免缓存插件只给真人提速:

UA='Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'
URL='https://mimangfei.com/'

for i in 1 2 3 4 5; do
  curl -sS -o /dev/null -A "$UA" --max-time 10 \
    -w "第${i}次  DNS=%{time_namelookup}s  连接=%{time_connect}s  TTFB=%{time_starttransfer}s  总耗时=%{time_total}s  状态=%{http_code}\n" \
    "$URL"
done

步骤 2:打开 PHP OPcache。 这是 WordPress 提速性价比最高的一步,不用改任何代码。OPcache 把编译后的 PHP 字节码缓存在共享内存里,省掉每次请求重新解析脚本的开销:

; /etc/php/8.2/fpm/conf.d/10-opcache.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
opcache.save_comments=1
opcache.jit_buffer_size=64M

改完执行 systemctl reload php8.2-fpm,用 php -i | grep opcache 确认生效。如果内存给得太小,opcache_get_status() 里会看到大量 cache full 重启,反而更慢。

步骤 3:给 HTML 开启压缩。 在 nginx 里启用 gzip,若已编译 Brotli 模块则优先 Brotli。WordPress 的 HTML 是动态生成的,文本压缩率通常能到 70% 以上:

gzip on;
gzip_vary on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_proxied any;
gzip_types text/plain text/css application/javascript application/json
           application/xml text/xml image/svg+xml;

步骤 4:把静态资源与 HTML 分离缓存策略。 图片、CSS、JS 设长缓存加文件名版本号;HTML 不缓存或只做短时缓存。很多站点图省事给 HTML 也设了一天缓存,结果改了内容百度抓到的还是旧的,误以为是收录没更新。

步骤 5:处理数据库慢查询。 WordPress 慢的常见来源是 wp_postmeta 上的查询和未清理的 wp_options 自动加载数据。检查 autoload 体积:

SELECT SUM(LENGTH(option_value)) / 1024 / 1024 AS autoload_mb
FROM wp_options
WHERE autoload = 'yes';

超过 1MB 就该清理,很多废弃插件留下的记录会一直被每次请求加载。

步骤 6:稳定性兜底。 配置 php-fpm 的 pm.max_requests 防内存泄漏,加 request_terminate_timeout 避免单请求拖死进程池,并接上监控告警。日志里定期统计错误码分布:

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
grep 'Baiduspider' /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c

常见踩坑

  1. 只装了缓存插件,源站本身 TTFB 两秒,缓存只能掩盖真人访问,爬虫第一次抓仍是慢的。
  2. 案例: 某站开启 OPcache 后内存只给了 64MB,脚本数量超出 max_accelerated_files,缓存频繁被清,平均响应反而比关闭时更慢,排查了两天才从 opcache_get_status() 的 oom_restarts 字段看出问题。
  3. 给 HTML 设了长缓存,改版后百度一直抓旧版,误判为改版失败。
  4. 用境外服务器面向国内用户,物理延迟就 300ms 起,怎么优化都到不了优秀线。
  5. 只看首页速度,文章页因为挂了相关文章查询和评论头像,慢三倍却没人测。
  6. 提速插件同时开三个,功能互相打架,生成大量碎片缓存文件把磁盘 inode 吃满。
  7. 压测只看平均值,忽略了 P95/P99,偶发 504 才是百度下调频次的主因。

总结

速度与收录的关系可以量化成一句话:在权重相近的前提下,单位时间能被抓完的页面数决定了你的收录上限。行动清单:用百度蜘蛛 UA 测五次 TTFB 取中位数 → 开 OPcache 并核对命中率 → 开 gzip/Brotli → 分离 HTML 与静态资源缓存 → 清理 autoload 与慢查询 → 日志里按周统计 5xx 占比。稳定优先于极致速度,先把错误率压到 0.1% 以下再谈毫秒级优化。5xx 导致的后果与补救见 服务器不稳定导致降权的恢复,首屏体验细节见 移动端首屏加载优化。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。