这个坑值得记一笔。站内搜索用 /?s=关键词,没有结果时页面仍返回 200 并显示「未找到相关内容」,GSC 里这类地址被收录了 800 多条。

刚开始盯着「搜索词来自外链和爬虫拼接,产生大量无意义组合」,折腾了半个多小时,排掉了。

这类报错背后常见的原因有几处,逐个排除就行。无结果页没有 noindex,模板统一输出;返回 200 而不是 404,蜘蛛当作正常页面;页面里有推荐位,内容不为空,被判为有效页。

动手时先确认无结果页的状态码

curl -sI 'https://www.example.com/?s=zzzz' | head -1

给无结果页加 noindex

add_action('wp_head', function(){ if(is_search() && !have_posts()){ echo '<meta name="robots" content="noindex,follow">'; } });

同时返回 404 状态

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

等前面都确认过,再用 robots 收口搜索路径

echo 'Disallow: /?s=' >> /var/www/html/robots.txt

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

改完先别撤,确认这几项。无结果页返回 404 且带 noindex,GSC 里这类地址数量在四周内持续下降,日志中 ?s= 的抓取量减少。

返回 404 会影响用户体验,最好保留推荐内容但把状态码和 noindex 一起给对。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189