主题的搜索地址是 /?s=php+tutorial,用户从论坛粘进来的链接是 /?s=php%20tutorial,两个地址返回同一批结果。必应各收了一份,索引里同一个搜索页出现两条,标题一模一样。
真正麻烦的地方在于,几个原因的现象几乎一样。空格被编码成加号和百分号二十两种形式 服务端没有归一;搜索页 canonical 指向自己 两个变体各自合法;搜索结果页没有 noindex 只靠 robots 屏蔽;站内搜索的地址被外部论坛大量引用。
上来先对比两种写法的返回内容
curl -s 'https://www.example.com/?s=php+tutorial' | md5sum
服务端解码后统一跳转到一种写法
rewrite ^/?s=(.*)\+(.*)$ /?s=$1%20$2 permanent;
给搜索页补 noindex 响应头
add_header X-Robots-Tag 'noindex, nofollow' always;
剩下的就是统计搜索页在两家的收录量
curl -s -A 'bingbot' 'https://www.bing.com/search?q=site%3Awww.example.com+%3Fs%3D' | grep -c 'example.com'
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
改完先别撤,确认这几项。两种写法最终都落到同一个 URL,索引里同题搜索页只剩一条或全部消失。
补一句。搜索页的重复地址多半来自编码差异,先统一解码再谈屏蔽,否则规则永远漏一半。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
