/products?sort=priceや/search?q=shoesを見ても、すぐにDisallow: /*?とはしません。並び替え、フィルタ、ファセット、tracking、session、pagination、内部検索を分けます。
query stringを実URLでテストします
User-agent: *
Disallow: /*?sort=
testerでブロック対象と例外の両方を確認します。
重複だけならcanonicalも検討します
tracking URLならcanonical、redirect、リンク生成の整理で十分な場合があります。公開ページを検索結果から外したい場合はnoindexを検討します。
ファセットは価値のある状態を残します
検索需要のある絞り込みと、ほぼ無限に増える組み合わせを同一扱いにしません。全?を一括ブロックする前にクロール価値を分けます。
クロールとインデックスを分離します
robots.txtはアクセス、noindexは取得可能なページのインデックス制御です。meta robotsとの比較で判断レイヤーを確認できます。
本番でも同じテストを繰り返します
URLマトリクスを作り、公開後はcheckerで実際のファイルを確認します。