Facebook 크롤러

콘텐츠는 웹페이지의 형식으로 Facebook에 가장 많이 공유됩니다. 사용자가 처음 링크를 공유하면 Facebook 크롤러에서 해당 URL의 HTML을 스크랩하여, 제목, 설명 및 썸네일 이미지와 같은 Facebook의 콘텐츠에 대한 정보를 수집, 캐시 및 표시합니다.

크롤러 액세스

Facebook 크롤러는 올바르게 콘텐츠를 스크랩하여 공유하기 위해 콘텐츠에 액세스해야 합니다. Facebook 크롤러가 페이지를 인식할 수 있어야 합니다. 로그인해야 하거나 콘텐츠에 대한 액세스를 제한해야 하는 경우, 화이트리스트에 Facebook 크롤러를 추가해야 합니다. 또한 DDoS 보호 메커니즘에서 Facebook 크롤러를 제외해야 합니다.

스크랩 시 콘텐츠를 사용할 수 없는 경우, 공유 디버거를 통해 URL을 전달하여 콘텐츠가 사용 가능해지면 다시 스크랩을 실행할 수 있습니다.

크롤러 식별

Facebook 크롤러는 다음 사용자 에이전트 문자열 중 하나로 식별할 수 있습니다.

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

또는

facebookexternalhit/1.1

이러한 사용자 에이전트 중 하나를 타겟으로 지정하여 메타데이터만 있고 실제 콘텐츠가 없는 페이지의 비공개 버전을 Facebook 크롤러에 제공할 수 있습니다. 그러면 성과를 최적화할 수 있고 지불 장벽(paywall)이 적용된 콘텐츠를 안전하게 유지하는 데 유용합니다.

2014년 5월 28일부터 다음 사용자 에이전트 문자열이 포함된 크롤러도 확인할 수 있습니다.

Facebot

Facebot은 광고 성과를 향상할 수 있도록 돕는 Facebook의 웹 크롤링 로봇입니다. Facebot은 규정에 따라 작동하도록 디자인되었습니다. 업계 규정에 따라 최대 몇 초마다 1회만 웹 서버에 액세스하며 개발자가 지정한 robots.txt 설정을 우선합니다.

Facebot은 서버의 robots.txt 파일에 대한 변경 내용을 하루에 몇 차례만 확인하므로 업데이트를 즉시 인식하지 못할 수 있습니다.

크롤러 사용 제한

페이지와 개체의 레이블을 지정하여 Facebook의 크롤러가 페이지와 개체에 새 콘텐츠가 있는지 확인하기 위해 대기하는 시간을 변경할 수 있습니다. 크롤러가 너무 과도하게 작업을 수행하는 경우 og:ttl 개체 속성을 사용하여 크롤러 액세스를 제한합니다.

크롤러에 액세스 권한 부여

다음 두 가지 방법으로 크롤러에 액세스 권한을 제공합니다.

  1. 위에 나열된 사용자 에이전트 문자열을 화이트리스트에 추가합니다. 이렇게 하면 유지 관리가 필요 없게 됩니다.
  2. 크롤러에서 사용하는 IP 주소를 화이트리스트에 추가합니다. 이렇게 하면 보안이 강화됩니다.

이 명령을 실행하여 크롤러에서 사용하는 IP 주소의 현재 리스트를 확보합니다.

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

그러면 자주 변경되는 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

크롤러에서는 사용자가 표준 URL로 지정하는 URL을 확인하여 공유할 콘텐츠를 가져옵니다.

og:url 태그(기본) 또는 link rel="canonical"을 사용하여 표준 URL이 포함된 페이지의 모든 변형에 레이블을 지정하는 것이 모범 사례입니다. 표준 URL 자체의 HTML에도 og:url 태그가 포함되어 있어야 표준 리소스로 지정될 수 있습니다.

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

그러면 좋아요 및 공유와 같은 모든 액션이 여러 버전의 페이지로 전달되지 않고 동일한 URL에서 집계될 수 있습니다.

즉, 동일한 콘텐츠의 여러 다른 버전이 개별적인 하위 도메인에서 호스팅되는 경우에도 동일하게 처리되며 http:// 및 https:// 둘 다를 통해 액세스할 수 있습니다.

필요한 경우 크롤러가 리디렉션 체인을 따라 표준 URL을 분석합니다.

콘텐츠 마이그레이션/URL 업데이트

한 URL에서 다른 URL로 콘텐츠를 마이그레이션하는 경우 좋아요와 공유는 자동으로 마이그레이션되지 않습니다. 다음 두 단계를 통해 좋아요 및 공유 수를 유지할 수 있습니다.

1. HTTP 리디렉션에서 Facebook 크롤러 제외

사용자가 이전 URL을 방문하면 HTTP 301 또는 302 리디렉션을 사용하여 새 URL로 이동합니다.

크롤러에서 여전히 이전 페이지에 액세스할 수 있어야 하므로, 크롤러의 사용자 에이전트를 리디렉션에서 제외하고 HTTP 리디렉션만 타사 크롤러 클라이언트에 보냅니다.

이전 URL의 HTML에는 여전히 오픈 그래프 태그(자신을 가리키는 og:url 태그 포함)가 포함되어야 하며 크롤러에서 이 HTML을 읽어들일 때 HTTP 200 응답을 반환해야 합니다.

URL을 크롤러로 변경할 때 AAAA 레코드를 검색하고 없을 경우 코드 0을 반환하므로 AAAA 레코드가 올바로 업데이트되었는지도 확인하세요.

2. 이전 페이지를 새 페이지의 표준 URL로 사용

다음과 같이 새 URL의 HTML에 이 태그를 추가합니다.

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

og:url 태그가 기본 값이지만 이 메서드도 rel=canonical과 작동합니다.

그러면 표준 URL이 이전 위치에 있음을 크롤러에 알리므로, 크롤러에서 페이지의 좋아요 수를 생성하는 데 이 URL을 사용합니다. 두 위치에 있는 새 좋아요가 모두 집계됩니다.

이전 URL에서 여전히 오픈 그래프 태그를 사용하여 문서를 렌더링하고 최소한 Facebook의 크롤러에 의해 로딩 때 HTTP 200 응답을 반환해야 합니다. 이전 URL에 자신을 가리키는 자체 og:url 태그가 포함되어야 합니다. 다른 클라이언트에서 URL을 방문할 때 리디렉션하도록 하려면 Facebook 외의 모든 크롤러 클라이언트에 301 HTTP 응답을 보내야 합니다.

Facebook의 공유 모범 사례 가이드에서 Facebook의 크롤러를 인식하는 방법을 알아보세요.