訪問したのがボットなのか人間なのかを確認することで、これを解決しましたhttp://site.com/refer/abc
。Railsを使用している場合:
request.env["HTTP_USER_AGENT"].match(/\(.*https?:\/\/.*\)/) ? "is robot" : "is human"
人間の場合は通常通りリダイレクトさせます。ボットの場合は、リダイレクトなしでページをレンダリングしました。これは、人間が表示するのと同じものですhttp://site.com/destination
。これにより、Facebookは元のリファラーURLを保持しますが、誰かがページを高く評価したときに、そのページに関連するメタタグを表示します。
編集:Facebookが作成されたとおりに「いいね」ボタンをクロールする場合は、新しいボタンが作成されるたびにFacebookのURLリンターをカールする必要があることがわかりました。
curl https://developers.facebook.com/tools/lint/?url={YOUR_URL}&format=json
これにより、「いいね」ボタンのメタデータがすぐに更新されます。詳細はこちら。