搜索全站
Google SEO 10 分钟阅读

抓取预算优化:让大型站点的重要页面优先被 Googlebot 抓取

抓取预算不是可以调的参数,而是 Google 根据站点健康度分配的配额。本文讲清影响因素、浪费预算的六类页面、站点地图分段与内部链接调整的实操方法,附 nginx 日志统计脚本。

U
UFO_PF 2020-07-18 · 阅读 10 分钟
抓取 GOOGLE SEO
阅读提示
本文约 3,670 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:十万篇文章,只收录了两万

大型站点最典型的收录困境是:文章数量十万级,Google 只收录了两三万,且新发布的文章要等几周才被抓。很多人以为是「站点地图没提交好」,其实问题在于抓取预算——Google 每天愿意在这个站点上花多少抓取资源是有限度的,如果这些资源被大量低价值页面吃掉,重要页面就只能排队。

原理分析:抓取预算由哪些因素决定

需要先纠正一个流行误解:抓取预算不是 Search Console 里可以调节的设置项,Google 也没有提供「提高抓取频率」的开关(旧版的抓取频率设置早已下线)。它由两个因素自动决定:

因素 说明 可控性
抓取速率限制 服务器能承受的抓取强度,响应慢会降低 高
抓取需求 内容的更新频率与新鲜度需求 中

Google 官方文档明确指出的关键点是:站点响应速度下降会导致抓取减少。服务器慢、大量 5xx、重定向链过长,都会让 Google 主动降低抓取强度。反过来,让服务器更快、减少错误,是唯一能实质性提高抓取量的手段。

浪费预算的页面通常有六类:

  1. 无限滚动与会话 ID 产生的重复 URL
  2. 筛选与排序组合产生的参数爆炸(faceted navigation)
  3. 站内搜索结果页
  4. 被软 404 的页面(返回 200 但内容为空)
  5. 长期未更新且零流量的归档页
  6. 分页序列中过深的页面

这些页面消耗了抓取配额,却不产生任何搜索价值。

保姆级实操

步骤一:先用日志量化预算去向
从 nginx 日志里统计 Googlebot 抓取的 URL 分布,看看被哪类页面吃掉了:

#!/usr/bin/env bash
# 统计近 7 天 Googlebot 抓取量按 URL 模式分布
LOG=/var/log/nginx/access.log
DAYS=7

awk -v d="$(date -d "-$DAYS days" '+%d/%b/%Y')" '
  $0 ~ /Googlebot/ {
    split($4, a, "[");
    if (a[2] >= d) print $7
  }' "$LOG" \
| awk -F'?' '{print $1}' \
| sed -E 's#/page/[0-9]+/#/page/N/#; s#/[0-9]{4}/[0-9]{2}/#/YYYY/MM/#' \
| awk -F'/' 'NF<=4 {print $0; next} {print "/"$2"/..."}' \
| sort | uniq -c | sort -rn | head -30

步骤二:验证 Googlebot 真实性
日志里的 UA 可以伪造,抓取预算分析必须基于真实的 Googlebot。用反向 DNS 验证:

# 反向解析 + 正向确认,双重验证后才算真 Googlebot
for ip in $(awk '/Googlebot/ {print $1}' /var/log/nginx/access.log | sort -u | head -20); do
  host=$(dig +short -x "$ip" | head -1)
  case "$host" in
    *.googlebot.com|*.google.com) echo "$ip -> $host  [OK]" ;;
    *) echo "$ip -> ${host:-无PTR}  [可疑]" ;;
  esac
done

步骤三:清理参数与搜索结果页
对筛选参数页加 noindex,站内搜索结果页直接 robots.txt 屏蔽:

User-agent: Googlebot
Disallow: /?s=
Disallow: /search
Disallow: /*?sort=
Disallow: /*?filter=*&filter=
Allow: /

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

注意:noindex 与 robots.txt 不要同时使用于同一 URL——被 robots.txt 屏蔽后 Google 看不到 noindex 指令,页面 URL 仍可能被索引。正确做法是先允许抓取、用 noindex 处理,等生效后再考虑屏蔽。

步骤四:软 404 改成真 404
空内容页面返回 200 会持续消耗预算。在主题的 404.php 与归档逻辑里补上:

add_action( 'template_redirect', 'mmf_soft_404_guard' );
function mmf_soft_404_guard() {
    if ( is_archive() && ! have_posts() ) {
        global $wp_query;
        $wp_query->set_404();
        status_header( 404 );
        nocache_headers();
    }
}

步骤五:站点地图分段并保持精准
大型站点要按类型与时间分段,且只包含 canonical、200 状态的 URL。WordPress 默认的 wp-sitemap.xml 已经做了按类型分段,可用过滤器调整每段的条目上限:

add_filter( 'wp_sitemaps_max_urls', function( $max ) {
    return 2000; // 默认 2000,段数过多时可适当调大
} );

add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
    if ( 'post' === $post_type ) {
        $args['date_query'] = array( array( 'after' => '2 years ago' ) );
    }
    return $args;
}, 10, 2 );

步骤六:调整内链结构,把权重引向重要页
Googlebot 靠链接发现页面。重要页面如果只出现在站点地图里、站内只有一两个入口,抓取优先级会很低。做法是在相关主题的正文里增加指向重要页的内链,并让首页与栏目页直接链接到核心内容。

步骤七:提升响应速度
压缩 TTFB,减少重定向,启用缓存。这是最直接的预算提升手段。

location ~* \.(css|js|webp|woff2)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}
location / {
    try_files $uri $uri/ /index.php?$args;
}

常见踩坑

  1. 用 robots.txt 屏蔽了带 noindex 的页面,导致指令失效,URL 仍被索引。
  2. 站点地图里塞满 301、404、非 canonical 的 URL,降低 Google 的信任度。
  3. 筛选页做了 noindex 但依然允许无限组合被抓取,预算照旧被吃。
  4. 未验证 Googlebot 真伪,把伪造 UA 的请求算进预算分析,结论全错。
  5. 服务器 TTFB 长期 1.5 秒以上,抓取量被自动压低却去改站点地图。
  6. 案例:某电商站 60 万个 URL 中,约 40 万来自颜色与尺寸的筛选组合。团队在 robots.txt 屏蔽后又加了 noindex,两者冲突导致这批 URL 全部以无摘要形式留在索引里。改为允许抓取 + noindex 后,三个月内索引量降到 18 万,核心商品页的抓取频率提升约三倍。
  7. 站点地图长期不更新,包含大量已下架商品。

总结

抓取预算管理的判断标准是:Googlebot 每天抓的 URL 里,有多少比例是真正希望被索引的页面。落地顺序是先做日志量化(必须先验证 Googlebot 真伪),再清理参数页与软 404,然后精简站点地图并调整内链,最后提升服务器响应速度。优先级上,服务器速度与错误率的影响远大于站点地图的写法。日志分析方法详见 服务器日志分析,抓取机制本身的工作原理见 Googlebot 抓取与渲染;如果站点同时做多语言,还要结合 国际站点URL结构 避免各版本互相争夺预算。

U
UFO_PF作者

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

留下你的想法

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