Facebook и Crawl-delay в Robots.txt?

Отвечают ли боты с веб- Crawl-delay: Facebook директиве Crawl-delay: в файлах robots.txt?

Ответ 1

У нас нет сканера. У нас есть скребок, который сбрасывает метаданные на страницах, которые имеют кнопки/разделяются на FB.

Ответ 2

Нет, он не учитывает файл robots.txt

В отличие от других ответов здесь, facebookexternalhit ведет себя как самый средний из сканеров. Получил ли он URL-адреса, которые он запрашивает при сканировании или с помощью подобных кнопок, не имеет большого значения, когда он проходит через каждый из них с безумной скоростью.

Мы иногда получаем несколько сотен ударов в секунду, поскольку они проходят почти по каждому URL-адресу на нашем сайте. Он убивает наши серверы каждый раз. Самое забавное, что когда это произойдет, мы увидим, что робот Googlebot замедляет работу и ждет, пока что-то успокоится, прежде чем постепенно вернуться обратно. facebookexternalhit, с другой стороны, просто продолжает колотить наши серверы, часто сложнее, чем начальный бой, который убил нас.

Нам нужно запускать гораздо более жесткие серверы, чем нам нужно для нашего трафика, только из-за facebookexternalhit. Мы выполнили тонны поиска и не можем найти способ замедлить их.

Как это хороший пользовательский интерфейс, Facebook?

Ответ 3

По аналогичному вопросу, я предложил техническое решение, которое просто ограничивает нагрузку на основе пользовательского агента.

Код повторен для удобства:

Поскольку никто не может обратиться к их высокомерию, а DROP'ing их IP-блок довольно драконов, вот мое техническое решение.

В PHP, выполните следующий код как можно быстрее для каждого запроса.

define( 'FACEBOOK_REQUEST_THROTTLE', 2.0 ); // Number of seconds permitted between each hit from facebookexternalhit

if( !empty( $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '/^facebookexternalhit/', $_SERVER['HTTP_USER_AGENT'] ) ) {
    $fbTmpFile = sys_get_temp_dir().'/facebookexternalhit.txt';
    if( $fh = fopen( $fbTmpFile, 'c+' ) ) {
        $lastTime = fread( $fh, 100 );
        $microTime = microtime( TRUE );
        // check current microtime with microtime of last access
        if( $microTime - $lastTime < FACEBOOK_REQUEST_THROTTLE ) {
            // bail if requests are coming too quickly with http 503 Service Unavailable
            header( $_SERVER["SERVER_PROTOCOL"].' 503' );
            die;
        } else {
            // write out the microsecond time of last access
            rewind( $fh );
            fwrite( $fh, $microTime );
        }
        fclose( $fh );
    } else {
        header( $_SERVER["SERVER_PROTOCOL"].' 503' );
        die;
    }
}

Ответ 4

Facebook фактически использует этот алгоритм, который вы можете проверить для себя здесь:

http://developers.facebook.com/tools/debug

Срок службы кеша Facebook этих переменных является переменным, но он составляет 24-48 часов из моего опыта.

Вы, однако, можете сделать кеш "недействительным", если вы добавите часть своего URL-адреса, чтобы пользователи разделили новый, или вы можете предоставить ссылки bit.ly(и т.п.), которые будут иметь тот же эффект.

Поскольку он не выполняет сканирование, вы не можете заставить его задерживать царапину (и вы не должны, так как это создавало бы плохой пользовательский опыт), они подождали, пока скребок закончит, и они будут обеспечены общая привлекательная ссылка). Однако вы МОЖЕТЕ запускать вручную скребли с установленными интервалами, чтобы обеспечить лучший пользовательский интерфейс (они не дождались кэширования данных) и балансировки нагрузки на сервер.

Ответ 5

если вы работаете на сервере ubuntu, и вы используете брандмауэр ufw, вы можете попробовать

ufw limit proto tcp от порта 31.13.24.0/21 80 к любому

для всех этих IP-адресов: 31.13.24.0/21 31.13.64.0/18 66.220.144.0/20 69.63.176.0/20 69.171.224.0/19 74.119.76.0/22 103.4.96.0/22 173.252.64.0/18 204.15.20.0/22 ​​

как показано ниже: Каков диапазон IP-адресов искателя Open Graph от Facebook?