- Блог компании1
- Советы и рекомендации6
- Инструкции скоро
- Словарь терминов18
- Инструменты и плагины скоро
Ошибка 403 Forbidden у ссылки на сайт в Facebook
- Комментарии
- Поделиться
Когда мы делали сайт нашего агентства и готовили все социальные сети, столкнулись с тем, что при попытке сослаться на него в Facebook, возникала ошибка 403. Быстро понять, в чем дело, не получилось, я отложил задачу и вот, вернувшись к ней, открыл много нового и вспомнил много старого.
Возможные причины проблемы
Вместо того, чтобы сразу проверить файл .htaccess, я сначала проделал достаточный долгий путь (для такого рода ошибки) длиною в пару часов. Выяснилось, что с марта 2024 года Facebook что-то там опять поменял, и теперь его робот не может сканировать сайт без прямого разрешения в файле robots.txt. Проблема такая встречалась у многих, судя по веткам на форумах, и у многих то, что рекомендует сам Facebook, не решило вопрос.
Причин, на самом деле, может быть немало. Когда что-либо недоступно для пользователей или роботов, это может быть связано как с сервером (и прокладками между юзером и сервером, такими как, например, CloudFlare), так и с настройками сайта. В случае WordPress могут быть установлены различные плагины для повышения безопасности, которые специально или случайно могут заблокировать тот или иной функционал.
Настройки сервера/хостинга
Наш сайт размещен на платформе Cloudways — это не стандартный хостинг со своими серверами, а своего рода надстройка, через которую можно удобно конфигурировать облачные сервера Digital Ocean, Amazon и др. Когда вы не являетесь системными администратором, и при этом хотите иметь свой облачный сервер, а не просто shared-хостинг — это идеальное решение.
У вас больше ресурсов, которые при необходимости можно масштабировать, а техподдержка поможет разобраться в любой ситуации, порой даже не связанной непосредственно с сервером. Ну и они отлично адптированы под WordPress.
В данном случае мне не потребовалось обращаться к технической поддержке, но я рассматривал это опцию как последний вариант в случае, если не смогу найти решение самостоятельно. Отвечают они быстро и решают вопросы оперативно, но хотелось сначала понять, почему одни сайты работают, а конкретно этот — нет
Проверка отображения сайта для робота Facebook
Это первое, что нужно сделать, чтобы хоть как-то сориентироваться в возможных причинах. Есть специальный сервис для разработчиков, где вы можете проверить ответ сервера и другие параметры, которые передаются Facebook при обращении к той или иной странице вашего сайта (это официальный ресурс Facebook):
https://developers.facebook.com/tools/debug
В моем случае он отдавал ошибку Bad Response Code: URL returned a bad HTTP response code. Ну и стандартный код 403, мол, доступ запрещен, идите лесом.
Ну, судя по причине, которую выдал данный сервис, дело, конечно же, в robots.txt. Полазил по форумам и нашел следующее решение.
Разрешения в robots.txt для facebookexternalhit
Собственно, необходимость насильно добавить разрешающие директивы для робота Facebook являются рекомендацией самого Facebook (хотя на сайтах, где этого нет, все отлично работает). И в одной из тематических веток я нашел такой вариант с акцентом именно на частоту парсинга:
User-agent: facebookexternalhit Allow: / Crawl-delay: 0
Вообще, директива Crawl-delay является устаревшей, но почему-то для Facebook рекомендовали именно ее.
Добавить ее в свой robots.txt вы можете вручную, если файл физически находится на сервере, или через специальные SEO-плагины. На данном сайте мы не используем сторонние плагины для SEO-оптимизации, поэтому всеми подобными вещами управляем чере код.
Для управления содержимым robots.txt (с учетом того, что наш сай является мультиязычным благодаря плагину WPML), я добавил следующее в functions.php:
if (!function_exists('savart_custom_robots_txt')) {
function savart_custom_robots_txt($output, $public) {
// Get the dynamic site URL
$site_url = get_site_url();
$parsed_url = parse_url($site_url);
$host = $parsed_url['host'];
// Define the new content for robots.txt
$output = "User-agent: *\n";
$output .= "Disallow: /go/*\n";
$output .= "Disallow: /wp-admin/\n";
$output .= "Allow: /wp-admin/admin-ajax.php\n";
$output .= "Disallow: /wp-login.php\n";
$output .= "Disallow: /wp-register.php\n";
$output .= "Disallow: /xmlrpc.php\n";
$output .= "Disallow: /wp-json/\n";
$output .= "Disallow: */embed\n";
$output .= "Disallow: */feed/\n";
$output .= "Disallow: */attachment/\n";
$output .= "Allow: /wp-content/uploads/\n";
$output .= "\n";
$output .= "User-agent: Googlebot\n";
$output .= "Disallow: /go/*\n";
$output .= "Disallow: /wp-admin/\n";
$output .= "Allow: /wp-admin/admin-ajax.php\n";
$output .= "Disallow: /wp-login.php\n";
$output .= "Disallow: /wp-register.php\n";
$output .= "Disallow: /xmlrpc.php\n";
$output .= "Disallow: /wp-json/\n";
$output .= "Disallow: */embed\n";
$output .= "Disallow: */feed/\n";
$output .= "Disallow: */attachment/\n";
$output .= "Allow: /wp-content/uploads/\n";
$output .= "\n";
$output .= "User-agent: Yandex\n";
$output .= "Disallow: /go/*\n";
$output .= "Disallow: /wp-admin/\n";
$output .= "Allow: /wp-admin/admin-ajax.php\n";
$output .= "Disallow: /wp-login.php\n";
$output .= "Disallow: /wp-register.php\n";
$output .= "Disallow: /xmlrpc.php\n";
$output .= "Disallow: /wp-json/\n";
$output .= "Disallow: */embed\n";
$output .= "Disallow: */feed/\n";
$output .= "Disallow: */attachment/\n";
$output .= "Allow: /wp-content/uploads/\n";
$output .= "Host: " . $host . "\n";
$output .= "\n";
$output .= "User-agent: facebookexternalhit\n";
$output .= "Allow: /\n";
$output .= "Crawl-delay: 0\n";
$output .= "\n";
$output .= "Sitemap: " . $site_url . "/wp-sitemap.xml\n";
return $output;
}
add_filter('robots_txt', 'savart_custom_robots_txt', 10, 2);
}
Это полностью весь код наших файлов robots.txt (вдруг кому пригодится). Но касательно проблемы с 403 Forbidden для робота Facebook, нас интересует вот эта часть:
$output .= "\n";
$output .= "User-agent: facebookexternalhit\n";
$output .= "Allow: /\n";
$output .= "Crawl-delay: 0\n";
Сохраняем, загружаем на сервер, сбрасываем кеш (если установлены плагины кеширования, например WP Rocket или W3 Total Cache) и проверяем все также на странице для разработчиков от Facebook. У меня не сработало, поэтому я полез копать дальше.
Cloudflare: ограничение блокировки полезных ботов
Возникло предположение, что робот Facebook блокируется в Cloudflare. В принципе, логичное предположение, и некоторые другие боты (поисковых систем, Linkedin и т. д.) действительно там блокировались.
Если у вас есть частная ситуация касательно Cloudflare, пишите в комментариях, поможем, если возможно. Описывать вообще все настройки будет долго — поговорим об этом в следующих постах. Но если дело касается исключения ботов из блокировки, то необходимо зайти в панель управления нужного сайта и зайти в раздел Security
-> WAF
-> Custom Rules
.
Там все довольно интуитивно, просто создаете правило и прописываете поля:
- Field : User Agent
- Operator: contains ИЛИ equals (если уверены в точном имени)
- Value: нужны бот, в нашем случае facebookexternalhit
В разделе Take the action
выбираете Skip
. А в разделе WAF components to skip
выбираете User Agent Blocking
(прячется под More components to skip
).
Сохраняете, и уже через несколько секунд данное правило работает на вашем сайте, что вы можете проверить в любом сервисе по проверке ответа сервера для различных ботов. Такой есть, например, у сервиса SE Rankings.
В моем случае настройки Cloudflare не помогли, поэтому перед тем как обратиться к техподдержке хостинга Cloudways я все-таки решил вручную проверить, что вообще происходит, для этого я открыл терминал и попробовал обратиться к сайту через curl, представившись ботом фейсбука.
Команда для терминала следующая:
curl -i -H 'Accept-Encoding: deflate, gzip' -H 'Accept: */*' -H 'Range: bytes=0-524287' -H 'User-Agent: facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)' https://savart.pro/
Ответ содержал всю ту же ошибку 403, которую, вероятнее всего, отдает сервер при попытке обратиться от имени данного бота. Где же в первую очередь он может быть заблокирован именно на сервере, учитывая то, что никогда сознательно я эту блокировку не делал через какие-либо модификации кода?
Правильно, в файле .htaccess
.
Сработавшее для нас решение (htaccess)
Вообще, если честно, я не знаю как именно туда попали данные блокировки. Скорее всего это остатки кода какого-нибудь плагина защиты, который мы тестировали и отключили (к вопросу о качестве плагинов, которые после деактивации и удаления часто не подчищают за собой сделанные в файлах и базе данных изменения). В общем, были у меня такие строчки в самом начале файла:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (facebookexternalhit|Blogtrottr|Amazonbot|Feedly|ClaudeBot|Photon|FeedBurner|Feedmesh) [NC]
RewriteRule .* - [F,L]
Как видите, первым в списке заблокированных ботов и стоит наш несчастный facebookexternalhit, которому мы сами не разрешали сканировать наш сайт.
После удаления бота из списка запрещенных, проблема моментально ушла, что можно проверить в отладке кода от Facebook на все той же странице:
Не забудьте нажать на Scrap Again
, если проверяете тот же адрес.
Как видите, в ответе есть еще некоторые рекомендаци по добавлению разметки, чтобы Facebook лучше понимал, что именно использовать при предпросмотре, но даже и без этого все нормально отображается при попытке поделиться любой ссылкой с сайта (а это нам и было нужно как результат):
Заключение
Ошибки нужно не только исправлять, но и предотвращать их — это, как правило, дешевле. Если вам нужная помощь в регулярном техническом обслуживании вашего сайта, вы можете обратиться к нам за данной услугой.
Также хочу еще раз порекомендовать хостинг от Cloudways. Ребята из техподдержки реально могли бы решить эту проблему за 20 минут общения с ними в чате, т. к. на самом деле htaccess для системного администратора — это первое, о чем бы он подумал. И в целом к ним можно обращаться по любому вопросу, связанному с работой вашего сайта.
А еще у них есть тестовый период и скидка 10% с нашим промокодом: WEBMONEY — пользуйтесь с удовольствием, и если есть вопросы — пишите, поможем. Любые вопросы с сайтами решаемы (главное делать это своевременно).
Желаем вашим сайтам стабильной и беспоребойной работы, высоких позиций в поисковых системах, а вам — хороших конверсий и прибыли!
Questions fréquentes
- Что значит 403 Forbidden при попытке поделиться ссылкой на Facebook?Ошибка 403 Forbidden указывает на то, что сервер, на котором размещена ваша ссылка, отказывает в доступе Facebook к содержимому. Это может быть вызвано настройками безопасности на сервере или неправильно настроенными правами доступа.
- Какие причины могут вызвать ошибку 403 Forbidden при шеринге на Facebook?Основные причины включают блокировку IP-адресов Facebook, неправильные настройки файлов .htaccess, ограничения доступа на сервере и неправильно настроенные заголовки CORS.
- Как проверить, блокирует ли сервер IP-адреса Facebook?Вы можете проверить журналы доступа и ошибок на сервере, чтобы увидеть, блокируются ли запросы с IP-адресов, связанных с Facebook. Также можно временно отключить блокировки и попробовать поделиться ссылкой снова.
- Что делать, если проблема связана с файлом .htaccess?Проверьте файл .htaccess на наличие правил, которые могут ограничивать доступ для Facebook. Убедитесь, что нет строк, блокирующих IP-адреса Facebook или определенные user-agent.
- Как настроить заголовки CORS для устранения ошибки 403 Forbidden?Добавьте в настройки сервера или файл .htaccess правильные заголовки CORS, разрешающие доступ для Facebook. Пример: Header set Access-Control-Allow-Origin "*" для Apache или соответствующая настройка для Nginx.