先把当时的情况摆出来。订阅链接里带 ?from=rss 参数,必应把这类地址收了两千多条,百度一条都没有,两边的索引报告放在一起对比差异非常明显。
真正麻烦的地方在于,几个原因的现象几乎一样。必应对参数页的容忍度更高,倾向于先收录再判断。另一种情况是百度依赖 Clean-param 声明,站点从来没配过。
少数情况下是页面没有 canonical,参数版本被当成独立页面。不容易想到的是,RSS 里的链接没有做参数剔除,被反复传播。
先统计两边收录的参数页数量
curl -s 'https://www.bing.com/search?q=site%3Awww.example.com+from%3Drss' | grep -o 'example.com[^"]*' | wc -l
然后确认参数页的 canonical
curl -s 'https://www.example.com/a/1.html?from=rss' | grep -o '<link rel="canonical"[^>]*>'
给参数页统一指向无参数地址
add_filter('get_canonical_url', fn($u) => remove_query_arg('from', $u));
等前面都确认过,再在百度站长平台声明忽略参数
Clean-param: from /a/
恢复的判定其实很直接。必应的参数页收录量逐步回落,百度的索引结构没有变化,两边的有效页面数趋于一致。
补一句。两家引擎对参数页的策略不同,靠单边规则收口往往只解决一半问题,canonical 才是共同生效的那一层。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
