Facebookクローラー

コンテンツはウェブページの形でFacebookにシェアされるのが最も一般的です。リンクが初めてシェアされると、FacebookクローラーはURLでHTMLをスクレイピングして、タイトル、説明、サムネイル画像など、Facebook上のコンテンツに関する情報を収集、キャッシュ、表示します。

クローラーによるアクセス

Facebookクローラーは、スクレイピングとシェアが正しくできるよう、コンテンツにアクセス可能である必要があります。つまりページがクローラーに対して公開されている必要があります。コンテンツに対してログインが必要であったり、アクセスを制限していたりする場合、Facebookクローラーをホワイトリストに登録してください。DDoS攻撃保護メカニズムの適用も解除してください。

スクレイピング時にコンテンツにアクセスできなかった場合は、準備ができてからシェアデバッガーを通じてURLを渡すとスクレイピングをやり直すことができます。

クローラーの識別

Facebookクローラーは次のユーザーエージェント文字列のいずれかによって識別できます。

facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)

または

facebookexternalhit/1.1

これらのユーザーエージェントの1つをターゲットにして、実際にコンテンツを持たないメタデータのみのページの非公開バージョンをクローラーに配信できます。これによりパフォーマンスが最適化され、有料コンテンツの安全性を確保できます。

2014年5月28日より、次のユーザーエージェント文字列でもクローラーを確認できるようになりました。

Facebot

Facebotは、Facebookのウェブ巡回ロボットで、広告の効果を向上させるために役立ちます。 Facebotは洗練されたロボットです。業界基準に従って、数秒ごとに1回のみ各ウェブサーバーへアクセスを試み、利用者のrobots.txt設定を尊重します。

Facebotがサーバーのrobots.txtファイルの変更を確認するのは1日数回のみです。そのため更新が反映されるのは次回のクロール時となり、すぐには反映されません。

クローラーレート制限

ページやオブジェクトにラベル付けすると、Facebookクローラーが新規コンテンツを確認する間隔を変更できます。 クロールの頻度が高すぎる場合og:ttlオブジェクトプロパティを使用して、クローラーのアクセスを制限します。

クローラーへのアクセス付与

クローラーにアクセスを許可するには、次の2つの方法があります。

  1. 前述のユーザーエージェント文字列をホワイトリストに登録する。これはアップキープを必要としません。
  2. クローラーが使用するIPアドレスをホワイトリストに登録する。こちらの方が安全です。

クローラーが使用するIPアドレスのリストを取得するには、次のコマンドを実行します。

whois -h whois.radb.net -- '-i origin AS32934' | grep ^route  

IPアドレスは頻繁に変わりますが、これで最新のIPアドレスのリストが返されます。

# For example only - over 100 in total
31.13.24.0/21 
66.220.144.0/20    
2401:db00::/32  
2620:0:1c00::/40  
2a03:2880::/32 

妥当な速さの確保

URLで参照されているクロール対象のリソースを、クローラーが数秒を超えない妥当な速さで取得できるようにする必要があります。 クローラーがリソースを取得できないと、Facebookはリソースを表示できません。

正規URL

Facebookクローラーは、正規URLとして指定されたURLに分解することによって、シェアするコンテンツを取り出します。

ベストプラクティスとしては、正規URLを持つすべてのページのバリエーションにog:urlタグ(推奨)またはlink rel="canonical"を付けます。正規URL自体のHTMLにもog:urlタグを付け、それを正規リソースとして指定します。

<meta property="og:url" content="https://example.com/path" />

これにより、「いいね!」やシェアといったすべてのアクションがページの複数のバージョンに分散することなく、同じURLに集約されます。

つまり、同じコンテンツの異なるバージョンが、たとえ別のサブドメイン上でホストされていたり、http://とhttps://の両方からアクセス可能だとしても、同じとして扱われます。

必要に応じて、Facebookクローラーは一連のリダイレクトをたどって正規URLを分解します。

コンテンツの移行/URLの更新

あるURLから別のURLにコンテンツを移行するとき、「いいね!」やシェアは自動的に移行されません。「いいね!」やシェアのカウント数を保持するには、次の2つのステップを実行します。

1. FacebookクローラーからHTTPリダイレクトの適用を解除します。

HTTP 301または302リダイレクトを使用して、利用者が旧URLにアクセスしたときに新しいURLを送信するようにします。

クローラーは旧ページへのアクセスも確保しておく必要があるため、クローラーのユーザーエージェントをリダイレクトから解除し、HTTPリダイレクトのみを非Facebookクローラークライアントに送信するようにします。

旧URLのHTMLは依然としてOpen Graphタグ(自身を指すog:urlタグを含む)を有しており、クローラーがURLをロードするとHTTP200応答を返します。

また、URLを変更する際はAAAAレコードが正しくアップデートされていることをご確認ください。クローラーが検索した時に正しいAAAAレコードが見つからなかった場合はコード0が返されます。

2. 旧ページを新ページに対する正規URLとして使用します。

次のタグを新URLのHTMLに追加します。

<meta property="og:url" content="https://example.com/old-url" />

推奨はog:urlタグですが、この方法はrel=canonicalでも機能します。

これによりFacebookクローラーは正規URLが旧ロケーションにあることを認識し、それに基づいてページ上で「いいね!」の数を生成します。両ロケーションの新しい「いいね!」は、両方の場所で集計されます。

古いURLは、引き続きOpen Graphタグでドキュメントを表示し、少なくともFacebookクローラーによって読み込まれたときにHTTP 200の応答を返す必要があります。以前のURLには、自身を指す独自のog:urlタグが含まれている必要があります。他のクライアントがURLを訪問したときにリダイレクトする場合は、301 HTTP応答をFacebook以外のすべてのクローラークライアントに送信する必要があります。

Facebookのクローラーを認識する方法については、シェアするためのベストプラクティスガイドをご覧ください。