问题出现得很突然,日志倒是留得挺全。主题升级后搜索表单的 action 从 /search/ 改成了 ?q=,旧地址没做跳转。两种入口返回同样结果,各自都能访问,百度把同一批结果页当成两倍页面收录,索引量从 1.1 万涨到 2.4 万。

刚开始盯着「站内链接一侧用新入口,另一侧还留着旧表单」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。新旧两套入口都返回 200,没有用 301 收敛。还有一种是搜索结果页没加 canonical,两套地址各算一份。

另外,CDN 按完整 URL 命中缓存,两套入口各缓一份。

先确认两套入口是否都返回 200

curl -s -o /dev/null -w '%{http_code}\n' 'https://www.example.com/?q=nginx' 'https://www.example.com/search/?q=nginx'

旧入口统一 301 到新入口

rewrite ^/search/?$ /?q=$arg_q permanent;

随后检查结果页 canonical 只输出一套

curl -s 'https://www.example.com/?q=nginx' | grep -o '<link rel="canonical"[^>]*>'

剩下的就是统计两套地址各自被收录的数量

site:www.example.com/search

改完先别撤,确认这几项。旧入口返回 301,两个月后索引里只剩一套地址,收录量回落到 1.2 万左右。

补一句。参数式入口和路径式入口不要并存,蜘蛛会把它们当成两套站点结构来抓。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189