В отличие от поисковых краулеров типа Googlebot, facebookexternalhit не индексирует контент для поиска и не влияет на SEO-позиции. Его задача — чисто техническая: обеспечить корректное отображение ссылки в момент, когда кто-то ею делится. Но именно от качества работы с этим ботом зависит, насколько привлекательно ваш контент будет выглядеть в лентах социальных сетей — а значит, и сколько кликов вы получите.
1. Что такое FacebookBot / facebookexternalhit
1.1 User-Agent строки
# Основная и наиболее распространённая строка:
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
# Более старая версия (тоже встречается):
facebookexternalhit/1.0
# Вариант с указанием исходного IP пользователя (X-Forwarded-For):
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php),
XFF: 31.13.115.21
# Отдельный, более новый токен (используется параллельно):
FacebookBot
Meta-ExternalAgent
Meta-ExternalFetcher
1.2 Семейство ботов Meta
Сегодня Meta использует несколько различных краулеров для разных задач. Их легко спутать, но они выполняют принципиально разные функции:
| User-Agent | Назначение | Когда срабатывает |
|---|---|---|
facebookexternalhit |
Генерация превью ссылок (Open Graph) | При шаринге ссылки в Facebook/Instagram/Messenger |
Facebot |
Аналогичная функция, более старый/альтернативный токен | Также при формировании превью |
Meta-ExternalAgent |
Сбор данных для обучения AI-моделей Meta и индексации | Автономный обход, не привязан к действию пользователя |
Meta-ExternalFetcher |
Получение контента по ссылкам для AI-функций (например, ответы Meta AI) | По запросу пользователя в AI-продуктах Meta |
Meta-WebIndexer |
Вторичная индексация контента | Автономный обход |
Meta-ExternalAds |
Проверка рекламных целевых страниц | При создании или показе рекламы Meta Ads |
Главное отличие: facebookexternalhit / Facebot — это user-triggered fetcher, срабатывающий только когда реальный человек делится ссылкой. Meta-ExternalAgent — автономный краулер, который обходит сайты независимо от действий конкретного пользователя и используется в том числе для обучения AI. Это принципиально разные категории, и путать их при настройке robots.txt — частая ошибка.
1.3 Особый случай: iMessage маскируется под facebookexternalhit
Важный технический нюанс, который путает многих администраторов: приложение Apple iMessage при получении ссылки в переписке отправляет запрос с User-Agent, который включает подстроку facebookexternalhit в составе более длинной строки:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.4
(KHTML, like Gecko) Version/9.0.1 Safari/601.2.4
facebookexternalhit/1.1 Facebot Twitterbot/1.0
Как отличить настоящий запрос Facebook от iMessage: запросы от настоящего краулера Facebook приходят с IP-адресов, принадлежащих Meta. Запросы от iMessage приходят с обычных IP конечных пользователей — операторов мобильной связи (AT&T, Verizon, МТС, и т.д.), а не из диапазонов Meta. Если вы видите этот User-Agent с IP, не принадлежащим Facebook, — это запрос от iMessage конкретного пользователя, а не от краулера компании.
1.4 IP-адреса и верификация
# Facebook предоставляет официальный механизм верификации
# через обратный DNS-просмотр (как у Google):
host [IP_адрес]
# Должен вернуть домен вида *.fbsv.net или *.facebook.com
host [полученный_хост]
# Forward DNS должен вернуть исходный IP
# Также Facebook публикует диапазоны через стандартный SPF-механизм
# и официальную документацию для разработчиков
2. Как работает facebookexternalhit
2.1 Алгоритм работы
- Пользователь публикует, копирует или вставляет ссылку на ваш сайт в Facebook, Instagram, Messenger или Threads.
- Платформа Meta инициирует запрос facebookexternalhit к указанному URL.
- Бот скачивает HTML-код страницы (без выполнения тяжёлого JavaScript в полном объёме).
- Анализируются мета-теги Open Graph: заголовок, описание, изображение, тип контента.
- Если Open Graph тегов нет — бот пытается извлечь данные из стандартных HTML-тегов (
<title>,<meta name="description">). - Формируется карточка превью и кешируется на стороне Meta.
- Превью отображается всем пользователям, которые видят данную публикацию.
2.2 Что facebookexternalhit анализирует
| Элемент | Что считывается | Важность |
|---|---|---|
og:title |
Заголовок превью | ⭐⭐⭐⭐⭐ Критически важно |
og:description |
Описание под заголовком | ⭐⭐⭐⭐⭐ Критически важно |
og:image |
Изображение превью | ⭐⭐⭐⭐⭐ Критически важно |
og:url |
Канонический URL для превью | ⭐⭐⭐⭐ Очень важно |
og:type |
Тип контента (article, video, website) | ⭐⭐⭐ Важно |
og:site_name |
Название сайта рядом с превью | ⭐⭐⭐ Важно |
article:published_time |
Дата публикации для статей | ⭐⭐ Умеренно |
fb:app_id |
Привязка к приложению Facebook (если есть) | ⭐⭐ Умеренно |
| Стандартные мета-теги (fallback) | <title>, <meta description> |
⭐⭐⭐⭐ Резервный источник данных |
2.3 Кеширование превью
Превью кешируется на серверах Meta после первого запроса. Это означает, что изменение Open Graph тегов на странице не обновит уже опубликованные превью автоматически. Для принудительного обновления кеша используется специальный инструмент.
3. Open Graph — основа правильных превью
3.1 Базовый набор тегов
<head>
<meta property="og:title" content="Заголовок статьи для превью">
<meta property="og:description" content="Краткое и привлекательное описание контента, до 200 символов">
<meta property="og:image" content="https://example.com/images/preview.jpg">
<meta property="og:url" content="https://example.com/article/slug/">
<meta property="og:type" content="article">
<meta property="og:site_name" content="Название вашего сайта">
<meta property="og:locale" content="ru_RU">
</head>
3.2 Требования к изображению
| Параметр | Рекомендация |
|---|---|
| Минимальный размер | 600 × 315px |
| Рекомендуемый размер | 1200 × 630px |
| Соотношение сторон | 1.91:1 |
| Формат | JPEG или PNG |
| Максимальный размер файла | 8 MB |
| Доступность | Публичный URL без авторизации |
<!-- Дополнительные теги для точного отображения изображения: -->
<meta property="og:image" content="https://example.com/images/preview.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Описание изображения">
3.3 Расширенная разметка для статей
<meta property="og:type" content="article">
<meta property="article:published_time" content="2026-05-08T10:00:00+03:00">
<meta property="article:modified_time" content="2026-05-08T14:30:00+03:00">
<meta property="article:author" content="https://example.com/authors/ivan/">
<meta property="article:section" content="Технологии">
<meta property="article:tag" content="SEO">
<meta property="article:tag" content="маркетинг">
3.4 Разметка для видео
<meta property="og:type" content="video.other">
<meta property="og:video" content="https://example.com/video.mp4">
<meta property="og:video:width" content="1280">
<meta property="og:video:height" content="720">
<meta property="og:image" content="https://example.com/video-thumb.jpg">
3.5 Fallback без Open Graph
Если на странице нет тегов Open Graph, facebookexternalhit пытается извлечь данные из стандартных HTML-элементов:
<!-- Без og:title бот возьмёт: -->
<title>Заголовок страницы</title>
<!-- Без og:description бот возьмёт: -->
<meta name="description" content="Описание страницы">
<!-- Без og:image превью может быть пустым или взять
первое подходящее изображение со страницы (нестабильно) -->
Рекомендация: всегда добавляйте полный набор Open Graph тегов явно — не полагайтесь на автоматическое определение, результат непредсказуем и часто выглядит непрофессионально.
4. Обнаружение в логах
4.1 Как выглядит запись
# Nginx access.log — стандартный запрос при шаринге ссылки:
69.171.249.13 - - [09/May/2026:11:05:22 +0000] \
"GET /article/slug/ HTTP/1.1" \
200 28432 "-" \
"facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
# Запрос с XFF (исходный IP пользователя, поделившегося ссылкой):
173.252.95.2 - - [09/May/2026:11:05:24 +0000] \
"GET /article/slug/ HTTP/1.1" \
200 28432 "-" \
"facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php), \
XFF: 31.13.115.21"
# Запрос от iMessage (НЕ от Facebook — другой IP, не из диапазонов Meta):
172.58.20.45 - - [09/May/2026:11:06:00 +0000] \
"GET /article/slug/ HTTP/1.1" \
200 28432 "-" \
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.4 \
(KHTML, like Gecko) Version/9.0.1 Safari/601.2.4 \
facebookexternalhit/1.1 Facebot Twitterbot/1.0"
4.2 Аналитика через grep
Найти все запросы facebookexternalhit:
grep -i 'facebookexternalhit' /var/log/nginx/access.log
Найти все боты Meta сразу:
grep -iE 'facebookexternalhit|Facebot|Meta-External|Meta-WebIndexer' \
/var/log/nginx/access.log
Подсчитать количество запросов:
grep -i 'facebookexternalhit' access.log | wc -l
Топ страниц, которыми делятся в Facebook/Instagram:
grep -i 'facebookexternalhit' access.log \
| awk '{print $7}' | sort | uniq -c | sort -nr | head -20
HTTP-коды ответов:
grep -i 'facebookexternalhit' access.log \
| awk '{print $9}' | sort | uniq -c | sort -nr
Отделить настоящие запросы Facebook от iMessage (по совпадению с диапазонами Meta):
grep -i 'facebookexternalhit' access.log \
| grep -v 'Twitterbot' # запросы с Twitterbot в строке — вероятно iMessage
Live-мониторинг:
tail -f /var/log/nginx/access.log | grep --line-buffered -i 'facebookexternalhit'
4.3 Верификация подлинности
#!/bin/bash
# Проверка: настоящий ли запрос от Facebook?
IP=$1
HOST=$(host $IP | awk '{print $NF}')
if [[ $HOST == *facebook.com* ]] || [[ $HOST == *fbsv.net* ]]; then
FWD=$(host $HOST | awk '{print $NF}')
if [[ $FWD == $IP ]]; then
echo "✔ Настоящий facebookexternalhit: $IP → $HOST"
else
echo "✖ DNS mismatch: $IP"
fi
else
echo "✖ Не из диапазонов Facebook (возможно iMessage или подделка): $IP"
fi
5. Sharing Debugger — инструмент для принудительного обновления
5.1 Зачем нужен Sharing Debugger
Поскольку Meta кеширует превью после первого запроса, изменения в коде страницы (новый заголовок, другое изображение) не отразятся в уже существующих публикациях автоматически. Facebook Sharing Debugger — официальный инструмент, который заставляет facebookexternalhit заново обойти страницу и обновить кеш.
5.2 Как использовать
- Перейдите на
developers.facebook.com/tools/debug/ - Введите URL страницы, для которой нужно обновить превью
- Нажмите Debug
- Инструмент покажет текущие значения Open Graph тегов, которые видит Facebook
- Если данные устарели — нажмите Scrape Again для принудительного повторного обхода
5.3 Типичные предупреждения в Sharing Debugger
| Предупреждение | Причина | Решение |
|---|---|---|
| «Could not retrieve data» | Страница недоступна для бота (403, 500, таймаут) | Проверить доступность через curl с UA facebookexternalhit |
| «Missing Properties: og:image» | Отсутствует тег og:image | Добавить og:image с публичным URL изображения |
| «Provided og:image is not big enough» | Изображение меньше 200×200px | Использовать изображение минимум 600×315px |
| «Object at URL is having issues» | Невалидный HTML или конфликт тегов | Проверить корректность разметки страницы |
6. Нагрузка на сервер
В отличие от автономных краулеров типа Googlebot, нагрузка от facebookexternalhit напрямую зависит от популярности контента в социальных сетях Meta — она носит взрывной, а не равномерный характер.
6.1 Характер нагрузки
| Сценарий | Нагрузка |
|---|---|
| Обычная статья, редкий шаринг | Единичные запросы |
| Виральный пост, массовый шаринг | Резкий всплеск запросов за короткое время |
| Реклама с большим количеством показов | Повторные проверки для обновления превью |
| Множественный шаринг одной ссылки разными пользователями | Каждый шаринг может триггерить отдельный запрос при истёкшем кеше |
6.2 Особенность нагрузки: пики, а не равномерность
Контекст из реальных данных pbnshield: за период март–май 2026 года Facebook External Hit (отдельно от Meta ExternalAgent) сгенерировал 26 612 запросов — относительно скромный объём по сравнению с автономными краулерами, но эти запросы концентрируются вокруг моментов публикации и виральности контента, а не распределены равномерно по времени.
7. Управление facebookexternalhit
7.1 robots.txt
⚠ Важно понимать последствия: facebookexternalhit — функциональный bottleneck для социального шаринга. Блокировка не повлияет на SEO-позиции, но полностью испортит отображение ссылок в Facebook, Instagram и Messenger — превью будут отсутствовать или показывать дефолтные/устаревшие данные.
# Полная блокировка (НЕ рекомендуется для большинства сайтов):
User-agent: facebookexternalhit
Disallow: /
User-agent: Facebot
Disallow: /
# Рекомендуемая практика — разрешить полностью:
User-agent: facebookexternalhit
Allow: /
User-agent: Facebot
Allow: /
# Точечная блокировка приватных разделов:
User-agent: facebookexternalhit
Disallow: /private/
Disallow: /admin/
Allow: /
7.2 Блокировка через .htaccess (Apache)
RewriteEngine On
# Только если действительно нужно — теряете превью в соцсетях:
RewriteCond %{HTTP_USER_AGENT} facebookexternalhit [NC]
RewriteRule .* - [F,L]
7.3 Блокировка через Nginx
map $http_user_agent $is_fb_bot {
default 0;
"~*facebookexternalhit" 1;
"~*Facebot" 1;
}
if ($is_fb_bot) {
return 403;
}
7.4 Кеширование специально для facebookexternalhit
Поскольку запросы бота часто происходят пакетно (виральный контент) и не требуют полного рендеринга страницы, можно отдавать ему облегчённую кешированную версию для снижения нагрузки на сервер:
# Nginx — отдавать кешированный HTML специально для facebookexternalhit:
location / {
if ($http_user_agent ~* "facebookexternalhit|Facebot") {
add_header Cache-Control "public, max-age=3600";
try_files /cache/$uri/index.html $uri @backend;
}
}
7.5 Когда блокировка может быть оправдана
| Сценарий | Рекомендация |
|---|---|
| Публичный контентный сайт, блог, медиа | Не блокировать — превью критичны для трафика из соцсетей |
| Закрытое приложение, личный кабинет | Превью не нужны — блокировка не критична |
| Страницы с конфиденциальной информацией | Заблокировать конкретные пути, не весь сайт |
| Защита от утечки контента через превью | Использовать noindex/приватность вместо блокировки бота |
8. Безопасность и приватность
8.1 Утечка контента через превью
Важный нюанс: если страница технически защищена паролем через JavaScript (а не через серверную авторизацию), facebookexternalhit как бот без полноценного выполнения JS может всё равно получить доступ к содержимому до момента проверки пароля и включить его фрагменты в превью. Для действительно конфиденциального контента используйте серверную авторизацию (HTTP 401 / редирект на уровне сервера), а не JS-проверку.
8.2 Защита от спуфинга
User-Agent facebookexternalhit легко подделывается. Скраперы и недобросовестные парсеры контента иногда маскируются под него, рассчитывая на то, что сайты разрешают известные социальные боты. Применяйте двухэтапную DNS-верификацию для критичных решений (например, выдачи иного контента в зависимости от бота).
9. facebookexternalhit vs другие социальные боты
| Бот | Платформа | User-Agent | Назначение |
|---|---|---|---|
| facebookexternalhit / Facebot | Facebook, Instagram, Messenger | facebookexternalhit/1.1 |
Превью ссылок (Open Graph) |
| Twitterbot | Twitter / X | Twitterbot/1.0 |
Превью в карточках (Twitter Cards) |
| LinkedInBot | LinkedInBot/1.0 |
Превью при публикации в LinkedIn | |
| Slackbot | Slack | Slackbot 1.0 |
Превью ссылок в сообщениях Slack |
| TelegramBot | Telegram | TelegramBot (like TwitterBot) |
Превью ссылок в Telegram |
| Pinterestbot | Pinterestbot/1.0 |
Превью при сохранении пинов | |
| VK Robot / OdklBot | ВКонтакте / Одноклассники | VK Share Button |
Превью ссылок в русскоязычных соцсетях |
| Discordbot | Discord | Discordbot |
Превью ссылок в Discord-сообщениях |
Совет: все эти боты используют схожую логику чтения Open Graph тегов. Один и тот же набор мета-тегов обеспечивает корректные превью практически на всех платформах одновременно — отдельная настройка для каждой соцсети, как правило, не требуется, за исключением Twitter Cards (twitter:card, twitter:title и т.д.), которые иногда дополняют Open Graph.
10. Рекомендуемая стратегия
✔ Главный принцип: facebookexternalhit — функциональный инструмент социального трафика, а не угроза. Качественные Open Graph теги напрямую конвертируются в CTR из соцсетей. Блокировка должна быть точечной и осознанной, а не дефолтной.
| Задача | Решение |
|---|---|
| Получить качественные превью в соцсетях | Полный набор Open Graph тегов на каждой странице |
| Обновить устаревшее превью | Facebook Sharing Debugger → Scrape Again |
| Снизить нагрузку при виральности | Кеш специально для бота + CDN |
| Отличить настоящий запрос от iMessage | Проверка IP против диапазонов Meta |
| Защитить приватный контент от превью | Серверная авторизация, а не JS-проверка |
| Заблокировать только закрытые разделы | robots.txt Disallow для конкретных путей |
| Обнаружить активность в логах | grep -i 'facebookexternalhit' + анализ топ-страниц |
| Верифицировать подлинность бота | DNS lookup → facebook.com / fbsv.net |
| Защититься от подделок | IP-верификация перед выдачей чувствительного контента |
Полезные ссылки: Facebook Sharing Debugger | Документация Meta для веб-мастеров | Спецификация Open Graph Protocol