现场是这样的。为了挡掉站内搜索,robots 里写了 Disallow: /?,本意是匹配问号开头的参数,结果 /?s= 和 /?p= 全都没被挡住,日志里参数页抓取反而涨了。
中间走过弯路,把「站内搜索还有 /search/ 这套路径,规则完全没覆盖」当成主因,改完现象没变。
原因不止一个,得分开看。? 在 robots 里不是通配符,只是一行普通路径字符;规则只在路径以 /? 开头时匹配,带目录的参数页不命中;百度与 Google 对特殊字符的解析存在差异。
动手时先确认线上规则原文
curl -s https://www.example.com/robots.txt | grep -n 'Disallow'
再往下用抓取测试验证一条参数页是否被挡
curl -sI 'https://www.example.com/?s=test' | head -3
接着改用明确的路径与参数规则
Disallow: /*?s=
Disallow: /*?p=
Disallow: /search/
末了配合 noindex 处理已经收录的页
add_filter('wp_robots', 'wp_robots_noindex');
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
恢复的判定其实很直接。参数页在抓取测试里显示被 robots 屏蔽,日志中 ?s= 的请求一周内降到个位数。
补一句。robots 只认 * 和 $ 两个特殊符号,把问号当通配符写是极常见的误解。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
