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

改了 robots.txt 百度多久生效:WordPress 动态 robots 的正确改法

改完 robots.txt 立刻去搜,结果没变,不代表没生效。本文讲清百度对 robots 变更的响应机制与实际等待周期,给出 WordPress 动态 robots 的正确改法、常见规则写法、以及用抓取诊断验证生效的操作步骤。

U
UFO_PF 2018-08-25 · 阅读 7 分钟
改了 百度SEO
阅读提示
本文约 2,725 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:昨天改的 robots,今天搜索还有那些页面

站长改 robots 通常有两种动机:要么是把不想被收录的目录屏蔽掉(比如 /wp-admin/、/search/),要么是误屏蔽后想赶紧放开。两种情况下大家都会做同一件事——改完刷新搜索结果,发现没变化,于是以为没生效,接着反复改、反复提交,最后把文件改乱了。

原理分析:robots 生效不是实时开关

robots.txt 的本质是给爬虫看的约定,不是数据库的开关。它的生效链条是这样的:百度蜘蛛下次访问你的站点 → 抓取到新的 robots.txt → 更新该站点的抓取规则缓存 → 后续抓取按新规则执行。这条链上每一步都有延迟。

阶段 大致周期 说明
抓取到新文件 数小时到数天 取决于站点抓取频次,低权重站可能更久
规则缓存更新 1–7 天不等 百度不承诺实时
已收录页面消失 数周甚至更长 屏蔽不等于删除,需配合 noindex 或 404
放开屏蔽后恢复抓取 数天到数周 同样受抓取频次影响

一个关键认知:Disallow 只是禁止抓取,不是禁止收录。已经收录的页面被 robots 屏蔽后,百度抓不到内容,就无法判断它是否已删除,这些 URL 可能长期留在索引里。想让它们消失,正确做法是放开 robots、用 noindex 让百度抓到,再等索引更新,或者直接返回 404/410。

保姆级实操

步骤 1:先确认当前生效的 robots。 WordPress 从 3.0 起提供虚拟 robots.txt(访问 /robots.txt 由程序输出),如果服务器根目录同时存在实体文件,实体文件优先。用 curl 看实际返回内容:

curl -s -A "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" \
  https://mimangfei.com/robots.txt

步骤 2:用过滤器改,不要新建实体文件。 WordPress 提供 robots_txt 过滤器,改这里最不容易和实体文件打架:

// functions.php:动态修改 WordPress 输出的 robots.txt
add_filter( 'robots_txt', function ( $output, $public ) {
    // $public 为 0 表示后台关闭了「建议搜索引擎索引本站点」
    if ( '0' === (string) $public ) {
        return $output;
    }
    $extra  = "\n";
    // 屏蔽站内搜索结果页、作者页、附件页:这些页面内容薄且大量重复
    $extra .= "Disallow: /?s=\n";
    $extra .= "Disallow: /search/\n";
    $extra .= "Disallow: /author/\n";
    $extra .= "Disallow: /attachment/\n";
    // 放行 wp-admin 下的静态资源,避免影响渲染判断
    $extra .= "Allow: /wp-admin/admin-ajax.php\n";
    // 声明 sitemap 位置,帮助百度发现地图文件
    $extra .= "\nSitemap: " . home_url( '/wp-sitemap.xml' ) . "\n";
    return $output . $extra;
}, 10, 2 );

步骤 3:确保 /robots.txt 不被缓存。 动态输出的 robots 最怕被页面缓存插件缓存成旧版本。在缓存插件的排除规则里加上 /robots.txt,然后 curl -I 确认响应头里没有长时间的缓存标记。

步骤 4:到百度搜索资源平台触发更新。 进入「robots」工具可以查看当前百度记录的文件内容;用「抓取诊断」对 /robots.txt 发起一次抓取,能显著缩短等待时间。抓取诊断里的返回内容如果已经是新版,说明百度侧已经拿到新文件。

步骤 5:区分”屏蔽”与”删除”。 要移除已收录页面:临时放开 robots → 页面加 noindex → 等待百度抓取到 noindex → 索引移除后再决定是否屏蔽或删除。直接 Disallow 已收录的 URL 是最常见的错误操作(noindex 的具体做法见 WordPress noindex 设置)。

步骤 6:留好变更记录。 每次改 robots 记下日期、改动内容、抓取诊断结果截图。万一后期收录异常,这份记录能帮你定位是哪次改动引入的。

常见踩坑

  1. 根目录建了实体 robots.txt,又在主题里改过滤器,改了半天没生效。
  2. 用 Disallow: /wp-admin 屏蔽后台,同时把 admin-ajax.php 一起屏蔽,导致部分交互异常与渲染判断受影响。
  3. 屏蔽了 /wp-content/,结果 CSS/JS 抓不到,百度判断页面渲染异常。
  4. 用 Disallow: /*?* 这种宽泛规则,把带参数的正常页面全挡住。
  5. 改完立刻判定”没生效”,一天内反复提交多次,反而干扰判断。
  6. 案例: 某站把 Disallow: / 误加到线上(本意只在 staging 用),当天没人发现,三天后才察觉。放开后等了近两周抓取频次才恢复,期间收录量掉了约 9%。事后排查发现,staging 环境的 robots 是通过部署脚本同步到线上的,没有做环境区分。
  7. 认为屏蔽后页面会立刻从搜索结果消失,一直等,错失用 noindex 处理的窗口。
  8. sitemap 地址写在 robots 里的还是旧域名,迁移后没同步改。

总结

判断 robots 是否生效,看百度搜索资源平台的抓取诊断结果,而不是看搜索结果页。改动周期按「数天到数周」预期,低权重站点更久。屏蔽只解决”不再抓取”,删除要用 noindex 或 404/410。改之前先想清楚:你到底是不想让它被抓,还是不想让它在搜索结果里出现——这两件事的解法完全不同。相关排查可参考 WordPress 站点收录排查。

U
UFO_PF作者

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

留下你的想法

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