(from osdn.net/users/cheehero)
ウェブクロール時に、CGI や PHP などでクエリが少し違うと、同じページが大量に登録されてしまいます。
meta タグの canonical がある場合、URL を canonical の値に統一することは可能でしょうか?
もし可能でしたら設定方法をご教示いただけましたらたいへん助かりますm(_ _)m。
(from osdn.net/users/cheehero)
ウェブクロール時に、CGI や PHP などでクエリが少し違うと、同じページが大量に登録されてしまいます。
meta タグの canonical がある場合、URL を canonical の値に統一することは可能でしょうか?
もし可能でしたら設定方法をご教示いただけましたらたいへん助かりますm(_ _)m。
(from osdn.net/users/shinsuke)
現状、canonicalの値を見る方法はありません。
「クロール対象から除外するパス」等で重複するようなファイルを除外できない感じでしょうか?
(from osdn.net/users/cheehero)
ご返信ありがとうございます。
一覧ページから詳細を見るような CGI で、詳細画面から元の一覧に戻るために、元いた一覧のソート順などがクエリにくっついてしまうため、「クロール対象から除外するパス」等で除外するのは難しいかんじです。
一覧をソート順ごとにクロール、さらに詳細をソート順の条件違いで別のページとしてクロールしてしまうため、同じページがいくつも登録されてしまうようです。。。
使用しているツールは canonical をつけるため、これを利用できればすっきりするのではないかと思ったので、残念です。
あるいは、クエリ中の特定の変数を無視するオプションや、クエリ中の特定の変数のみ有効とするオプション、があるとうまくいきそうに思いました。
cgi や php からの出力を検索したいために導入するケースも多いかと思いますので、なんらかの形で上記複数 URL で同じページが表示される場合の重複登録回避策についてご検討いただけましたら幸いですm(_ _)m。
(from osdn.net/users/shinsuke)
クエリ中の特定の変数を無視するオプションや、クエリ中の特定の変数のみ有効とするオプション、
上記のようなパターンで対応可能そうであれば、「クロール対象から除外するURL」で
特定のパラメータのときに除外してしまえば良いような気がしています。たとえば、
A=Bのパラメータの時は除外などです。ですので、その手のものは .*A=B.*みたいな
正規表現で除外して対応できている感じなので、今後を考える上で除外でも難しい場合の
情報をいただけると大変参考になります。よろしくお願いいたします。
(from osdn.net/users/cheehero)
ご返信ありがとうございます。
たとえば、Amazon では URL にさまざまな情報がくっつくと思います。タイトルだったり、アフィリエイトIDだったりです。けれども商品IDさえあれば、それらと同じ内容が表示されます。
つまり、ページを表示するだけなら、タイトルやその他の変数は無視していいわけです。そこで、同じ内容を表示するいろんなパターンの URL を一つの URL に統一したい場合に、クエリ中の不要な変数を指定しておくと、クエリからその変数を取り除いた URL を登録してくれるような仕組みがあればと考えました。
たしかに A=B であるときクロールから除外すればなんとかなりそうにも思いますが、A=B、A=C、A=D のパターンでクエリが作られていて、必ずしも A の取る値が B、C、Dに限定されない場合に、URL をどれか一つのパターンに絞るのは難しいように思います。A=があれば除外するとすると、今度は変数Aがついたりつかなかったりする場合には、インデックスに登録されなくなりますし。。。
ただ、その後試行錯誤しまして、パスマッピングで正規表現と後方参照を使えば、なんとか重複を避けられることがわかりました。
といっても、この方法は、クエリの変数があらかじめわかっている場合に限られますし、もし canonical を参照するオプションがあれば、適切な canonical を付記してくれるウェブアプリケーションでは、正規表現を書かなくても同じ内容のページを重複登録しないので、便利だと思います。
個人的にはパスマッピングで解決しそうですが、クエリ中の変数が必ずしも同じ順番で現れない場合があり、少々苦労しています。
以上参考になりましたら幸いです。
すばらしい検索システムの開発ありがとうございますm(_ _)m。
(from osdn.net/users/shinsuke)
ありがとうございます!
canonicalでの対応方法を検討していきたいと思います。
(from osdn.net/users/cheehero)
ご返信ありがとうございます。
検討していただけるとのことで重ねて御礼申し上げます。
ただ前回パスマッピングで解決できそうだと書きましたが、パスマッピングの場合、クロール時に適用していても、ページを解析後に URL を変換するようですので、結局同じ内容のページを何度も巡回してしまい、クロールに時間がかかるようです。
私の利用ケースでは、項目ごとにソートできるウェブデータベースのようなツールがあるのですが、たとえば100レコードあって項目が10あると、項目ごとにソートするリンクをたどって同じレコードを何度もぐるぐる巡回しているようでした。レコード数×項目数×降順・昇順だけで、2000に膨れ上がります。他にも変数のバリエーションがあるため、実際にはもっと多くなってしまいます。
パスマッピングは本来ファイルシステムクロールを http:// でアクセスする URL に変換するためのものと思いますので、解析後に登録する URL を変換するのが正しい挙動だと思います。一方で、同じ内容を表示する URL をひとつに統一する用途では、クロール時 URL にアクセスする前にパスを変換できた方が、巡回しなくていいページを巡回しなくて済みますので、より早い処理が実現するのではないかと思います。
そこでパスマッピング適用のタイミングに、「クロール時アクセス前」のようなオプションがあればと思いました。こちらもあわせてご検討いただけましたらうれしいです。
© 2020. All Rights Reserved - CodeLibs, Inc.