• Обновлено
  • Опубликовано
  • 123 просмотра
  • 9 мин. чтения
  • 1 комментарий

Не работает превью ссылки (OG) в Telegram, ВК и Facebook* на российском хостинге — как починить

Превью ссылки не грузится в Telegram, ВКонтакте и Facebook, хотя OG-теги верные, а кеш сброшен? Разбираем настоящую причину — фильтрацию исходящего трафика на российском хостинге — и чиним зарубежным реверс-прокси с GeoDNS. Пошагово, с диагностикой и чеклистом.
Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 1452 статьи автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 2113 экспертных мнений Подписаться на Телеграм-канал
Обложка: Не работает превью ссылки (OG) в Telegram, ВК и Facebook* на российском хостинге — как починить

Если у тебя сайт на российском хостинге, ты наверняка хоть раз кидал ссылку в Telegram или Facebook* и видел: заголовок подтянулся, описание подтянулось, а картинка — нет. Или превью вообще пустое и «вечно грузится». Ты лезешь в код, проверяешь OG-теги — они на месте. Сбрасываешь кеш — не помогает. Открываешь Facebook Debugger, а там «Could Not Connect To Server». И так по кругу неделями.

Я провозился с этим три месяца. Перепробовал всё, что советует интернет, и только потом докопался до настоящей причины — она оказалась не в сайте вообще. Рассказываю по шагам, чтобы ты не терял те месяцы, что потерял я.

Screenshot Telegram не подгружает OG
Три долгих месяца меня вгоняло в безысходность от того, что не грузились картинки и описания для ссылок

Если коротко

У сайта на российском хостинге превью ссылок часто ломается не из-за OG-тегов и не из-за кеша. Ломается потому, что хостинг (или магистральный провайдер) режет исходящий трафик от твоего сервера к IP-адресам соцсетей. Краулер соцсети приходит к тебе, но твой ответ ему не доходит — теряется по дороге из-за фильтрации.

Чинится это не на сайте, а на уровне сети: нужно, чтобы ответ соцсети уходил из-за рубежа. Самый чистый способ — поставить за границей небольшой реверс-прокси и через GeoDNS отправлять иностранных ботов на него, а российских пользователей оставить на основном сервере напрямую. Дальше — подробно.

Симптомы: узнаёшь себя?

  • В Facebook Sharing Debugger при проверке ссылки — «Curl Timeout» или «Could Not Connect To Server / Response Code 418».
  • В Telegram превью «вечно грузится» или не появляется совсем, а у иностранных ссылок — появляется.
  • Во ВКонтакте картинка не подтягивается или подтягивается через раз.
  • При этом картинка открывается по прямой ссылке в браузере, а OG-теги в исходном коде на месте.
  • Онлайн-проверялки показывают, что всё хорошо, — но в реальных постах превью нет.
  • Хуже всего: работает нестабильно — то появилось, то пропало.

Если хотя бы половина совпала — читай дальше, скорее всего это твой случай.

Почему это так трудно поймать

Главная ловушка в том, что онлайн-валидаторы врут. Facebook Debugger, разные «OG preview checker», Telegram WebpageBot используют современные HTTP-клиенты и часто стоят на серверах, у которых нет проблем с маршрутом до твоего сайта. Поэтому они показывают зелёное.

А боевые краулеры соцсетей — те, что реально строят превью, когда человек кидает ссылку в чат, — другие. Они приходят с конкретных IP-диапазонов, и твой ответ им должен пройти обратный сетевой путь, который как раз и ломается. Получается: «по приборам всё хорошо», а в жизни не работает. И ты бесконечно крутишь настройки сайта, хотя сайт ни при чём.

Курсы по SMMКурсыСравнение 132 курсов по SMMЦены, школы, длительность, рассрочка Ваня Буявец, продюсер, основатель CheckroiВаня Буявец, основатель CheckroiПоказываю, как применять Claude Code, ChatGPT и другие нейросети в учёбе и работе, с примерами и промптамиЧитать в Телеграме

Что все пробуют первым делом и почему это обычно не помогает

Перечислю ложные следы, по которым меня вела дорога приключений. Если ты уже всё это проверил и не помогло — значит, проблема глубже, и ты на верном пути.

  1. Переписать OG-теги. Полезно, если их реально не было. Но если они есть и валидны — это не оно.
  2. Сбросить кеш. Плагин, CDN, Redis. На минуту кажется, что помогло, потом снова. Не оно.
  3. Поменять формат картинки. Тут есть здравое зерно: WebP в og:image многие соцсети не показывают (Telegram, WhatsApp, часть Facebook и ВК скачивают, но не рендерят). Если у тебя og:image в WebP — переведи в JPEG или PNG, это реально нужно. Но если уже JPEG, а превью нет — дело не в формате.
  4. SSL и SNI. Коварная штука: если на одном IP несколько сайтов и нет сертификата по умолчанию, краулеры без SNI получают чужой сертификат. Проверка: echo | openssl s_client -connect ТВОЙ-ДОМЕН:443 -noservername | openssl x509 -noout -subject — должен вернуться сертификат твоего домена. Если чужой — чини. Если твой — едем дальше.
  5. gzip. Тоже бывает: если сервер отдаёт Content-Encoding: gzip тем, кто его не просил, боты видят бинарный мусор. Лечится gunzip on в nginx. Но и это не объясняет «вообще не доходит».
  6. Антибот-плагины и фаерволы. CleanTalk, Wordfence и подобные иногда банят легитимных краулеров. Проверь и отключи на тест. Но если в логах сервера ты видишь, что бот соцсети приходит и получает 200, — плагин не виноват.

Если ты прошёл весь этот список — это и есть то, что я пробовал «те самые три месяца».

К счастью, я со всем разобрался!

Screenshot Telegram починили подгрузку preview ссылок
Наконец-то я увидел превью ссылок, божечки-кошечки!

Настоящий корень проблемы

В России на магистральном уровне стоят системы фильтрации трафика и ТСПУ. По разным причинам они режут трафик к части IP-диапазонов крупных соцсетей, особенно Meta. Важная деталь: фильтрация часто односторонняя и асимметричная.

Асимметричная фильтрация: входящий запрос доходит, ответ сервера гибнет на ТСПУ
Краулер дозванивается, но наш ответ не доходит обратно
  • Краулер соцсети приходит к твоему серверу — входящий пакет проходит.
  • Твой сервер отвечает ему.
  • А этот ответ обратно к IP соцсети отваливается в пути — его отбрасывает фильтр на аплинке.
  • Краулер не получает ответа, повторяет запрос несколько раз и сдаётся → в дебаггере ты видишь «не смог подключиться».

Самое печальное, что можно увидеть — это ошибка 418 I’m a teapot.

Screenshot fb выдает ошибку 418
Как же меня задолбала 418 ошибка, вы бы знали!

На пальцах: краулер приходит к тебе на сервер, пытается забрать коробку с вещами, но не может выйти, потому что дверь исчезает.

Корень проблемы: с РФ-сервера часть подсетей соцсетей недостижима, другие проходят
Часть подсетей Meta режется, EU-подсети и другие соцсети — проходят

Почему «через раз»: у соцсетей много дата-центров с разными IP. Часть диапазонов фильтр режет, часть — нет. Какой дата-центр возьмётся строить превью в этот раз — такой и результат. Отсюда вся нестабильность.

И почему Telegram и ВК иногда работают, а Facebook нет: у разных соцсетей разные IP-диапазоны, под фильтр попадают не все одинаково.

Вывод: проблема не на твоём сайте, а в сети между твоим сервером и серверами соцсети. Правки сайта её не вылечат.

Как убедиться на 100%, что проблема в сервере (диагностика за 5 минут)

Не верь на слово — проверь. Зайди на сервер по SSH.

Тест 1. Доходит ли твой сервер до соцсети напрямую.

curl -sI --max-time 10 https://www.facebook.com/

curl -sI --max-time 10 https://graph.facebook.com/

Если это виснет и отваливается по таймауту — диагноз подтверждён: твой сервер не достучался до Facebook. Для сравнения curl https://www.google.com/ обычно работает мгновенно — значит «интернет есть», режется именно соцсеть.

Тест 2. Приходит ли бот и что он получает.

grep -iE "facebookexternalhit|TelegramBot|vkShare" /путь/к/access.log | tail -20

Если видишь, что бот приходит и получает 200, — входящий путь жив, а проблема в обратном. Это и есть асимметричная фильтрация.

Решение: вынести «точку ответа» за границу

Раз ответ из России не доходит, нужно, чтобы он уходил из-за рубежа. При этом российских пользователей трогать нельзя — для них всё и так работает, и гнать их через заграницу значит добавить тормоза и уменьшить TTFB и LCP.

GeoDNS-сплит: российские запросы напрямую, заграница через зарубежный прокси
GeoDNS разводит трафик: РФ — на основной сервер, остальной мир — на прокси

Правильная архитектура — гео-разделение:

  • Российские посетители идут на твой основной сервер напрямую, быстро, как сейчас.
  • Все остальные, включая краулеров соцсетей, идут через зарубежный прокси-сервер, у которого путь до соцсетей чистый.

Прокси при этом прозрачный: он не хранит копию сайта, а просто пересылает запрос на твой основной сервер и возвращает ответ. Контент идентичен, поэтому это не клоакинг и для SEO безопасно — Яндекс ходит из России на основной сервер, Googlebot из США через прокси, видят одно и то же.

Путь зарубежного краулера: через прокси в Польше к origin-серверу и обратно
Прокси-посредник: ответ соцсети уходит из-за рубежа, мимо фильтра

Что понадобится

  • Маленький VPS за границей (Польша, Германия, Нидерланды, Финляндия). Хватит самого дешёвого: 1 ядро, 2 ГБ RAM, около 3–5 € в месяц. Важно проверить, что трафик ноды реально идёт за границей, а не заворачивается обратно через Россию: тот же curl -sI https://www.facebook.com/ с новой ноды должен работать мгновенно.
  • GeoDNS-провайдер — DNS-хостинг, умеющий отдавать разные IP в зависимости от страны запроса. Обычный DNS-хостинг так не умеет.

Конкретно мы в Checkroi использовали DNS-хостинг от Bunny, потому что в нём в бесплатном тарифе есть геораспределение запросов.

Пошагово

  1. Подними реверс-прокси на зарубежном VPS (nginx): он принимает запрос, идёт за страницей на твой основной сервер по его IP с правильным заголовком Host и SNI, возвращает ответ. Сертификат Let’s Encrypt выпусти прямо на этой ноде — не копируй приватный ключ с основного сервера.
  2. Заведи DNS-зону у GeoDNS-провайдера и перенеси все записи один в один. Самый частый провал — забыть запись: поддомен CDN, почтовые MX, SPF, DKIM, проверочные TXT. Сверь машинно, что в новой зоне есть всё, что было в старой.
  3. Настрой гео-правило на записи домена: запрос из России — IP основного сервера, по умолчанию (весь остальной мир) — IP зарубежного прокси.
  4. Переключи NS-серверы домена у регистратора на адреса GeoDNS-провайдера. Делегирование доменов .ru раскатывается обычно от 20 минут до пары часов.
  5. Выпусти сертификат на прокси и проверь: из России домен резолвится в основной сервер, из-за рубежа — в прокси, Facebook Debugger показывает превью.
Курсы по Веб-разработчикКурсыСравнение 73 курсов для веб-разработчиковЦены, школы, длительность, рассрочка

Важный нюанс: где лежит сама картинка og:image

Если картинка превью лежит на отдельном CDN-хосте (например, через CDN вида cdn.твойсайт.ru), проверь, что этот хост тоже достижим из-за рубежа. Бывает, что страницу прокси отдал, а картинку соцсеть идёт качать на отдельный CDN, который из-за границы флакает. Тогда либо переведи og:image на основной домен (он пойдёт через прокси), либо проксируй и CDN-хост.

У нас на Checkroi была ровно эта вторая часть проблемы: картинка лежала на CDN, и хватило одной настройки исключений, чтобы og:image начал отдаваться с основного домена и поехал через прокси.

Альтернатива попроще, но она не подойдёт для России

Можно завернуть весь домен через Cloudflare. Тогда ответы соцсетям уходят с зарубежных узлов, и превью чинится само. Настраивается за час. Но тогда вся твоя аудитория, включая российскую, ходит через Cloudflare, а его узлы в РФ периодически штормит. То есть ради меньшинства (превью в соцсетях) ты рискуешь ухудшить опыт основным пользователям. Гео-разделение чище: оно не трогает 95% трафика.

Канал основателя Checkroi Вани БуявцаПоказываю тебе, как публично строю Checkroi с нейросетями и делюсь цифрами, провалами и тем, что сработалоПодписаться

Перед всем этим — напиши хостеру

Иногда «потеря исходящего трафика к соцсети» — это не глобальная фильтрация, а кривой маршрут у конкретного хостера, и чинится с их стороны. Напиши в поддержку: «С моего VPS не доходят пакеты до подсетей Facebook (AS32934): входящие соединения проходят, а наши ответы не доставляются. К другим подсетям той же сети проходит. Прошу проверить маршрутизацию исходящего трафика».

Если ответят, что это магистраль или ТСПУ, — тогда нужен прокси.

Чеклист «сделай по порядку»

  1. Проверь формат og:image — если WebP, переведи в JPEG или PNG.
  2. Проверь SSL без SNI — должен быть твой сертификат.
  3. Проверь gzip — ответ без Accept-Encoding должен быть несжатым.
  4. Проверь, что бот соцсети приходит и получает 200 (логи).
  5. Главный тест: curl -sI https://www.facebook.com/ с твоего сервера — виснет? Значит фильтрация исходящего.
  6. Напиши хостеру про маршрут к подсетям соцсети.
  7. Если не чинят — подними зарубежный прокси и GeoDNS-сплит (РФ на основной, мир на прокси).
  8. Перенеси все DNS-записи один в один, не забудь почту и CDN.
  9. Выпусти Let’s Encrypt на прокси
  10. Переключи NS-сервера на GeoDNS там, где ты покупал свой домен
  11. Подожди 2-24 часа, проверь гео и Facebook Debugger.

Эта статья написана по горячим следам собственной трёхмесячной боли — мы в Checkroi прошли весь путь до рабочих превью во всех соцсетях за 3 месяца боли и страданий. Если ты держишь сайт на российском хостинге и упёрся в то же самое — теперь у тебя есть карта.

Кстати, если хочешь разобраться в вебе и инфраструктуре глубже

Такие задачи — это уже территория веб-разработки и DevOps. Если хочется не просто чинить по инструкции, а понимать, как всё устроено под капотом, — посмотри подборку курсов по программированию и IT: мы свели их в каталог по направлению «Программирование и IT» с честными рейтингами и сравнением.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Нейросети: практический курс
Перейти на сайт курса
SkyproSkypro25 990 ₽181 667 ₽/мес.3 месяцаОбзор курса
Нейросети для рабочих задач
Перейти на сайт курса
SkillboxSkillbox31 290 ₽2608 ₽/мес.1 месяцОбзор курса
Нейросети. Практический курс
Перейти на сайт курса
SkillboxSkillbox74 900 ₽6242 ₽/мес.3 месяцаОбзор курса
Нейросети для каждого: как решать рабочие задачи быстрее
Перейти на сайт курса
НетологияНетология37 300 ₽2763 ₽/мес.6 недельОбзор курса
Программирование для анализа данных
Перейти на сайт курса
SkyproSkypro134 640 ₽365 500 ₽/мес.12 месяцевОбзор курса
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Профессия «Fullstack-разработчик на PHP»
Перейти на сайт курса
SkillboxSkillbox166 715 ₽5378 ₽/мес.12 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология175 800 ₽7125 ₽/мес.21 месяцОбзор курса
Профессия «Java-разработчик с нуля»
Перейти на сайт курса
НетологияНетология119 700 ₽5625 ₽/мес.11 месяцевОбзор курса
Профессия «Разработчик игр на Unity с нуля»
Перейти на сайт курса
SkillboxSkillbox130 521 ₽3679 ₽/мес.10 месяцевОбзор курса

Больше программ — в полном каталоге курсов по программированию и IT

Часто задаваемые вопросы

Не работает превью ссылки в Telegram, что делать?

Сначала проверь формат og:image (не WebP) и что бот вообще приходит (логи). Если приходит и получает 200, а превью нет — почти наверняка фильтрация обратного трафика на российском хостинге. Решение — зарубежный прокси и GeoDNS.

Facebook Debugger пишет «Could not connect to server / 418» — это что?

418 здесь — внутренний код самого Facebook «не смог установить соединение», а не ответ твоего сервера. Не ищи 418 в своих конфигах, его там нет.

OG-теги правильные, валидатор зелёный, а превью нет. Почему?

Потому что валидаторы используют «удобные» HTTP-клиенты и часто стоят там, где маршрут до тебя не сломан. Зелёный валидатор не равно рабочее превью. Проверяй реальным постом и логами сервера.

А Яндекс или Google не накажут за разные IP по гео?

Нет. Разные IP по географии — норма, так работает любой CDN. Клоакинг — это когда ботам показывают другой контент. У нас контент идентичный, поэтому всё чисто.

Оставить комментарий
1 комментарий

1 комментарий

  1. Блин, наконец-то мне кто-то нормально объяснил, почему ог не показывались. Всю голову сломал, потому что на тильдовских сайтах всё нормально, а на моём личном ничего не работало)))

    Спасибо!

Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!