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

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

Превью ссылки не грузится в Telegram, ВКонтакте и Facebook, хотя OG-теги верные, а кеш сброшен? Разбираем настоящую причину — фильтрацию исходящего трафика на российском хостинге — и чиним зарубежным реверс-прокси с GeoDNS. Пошагово, с диагностикой и чеклистом.
Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер Telegram-каналов, эксперт в выборе онлайн-курсов
Все 498 статей автора
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 1159 экспертных мнений
Обложка: Не работает превью ссылки (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КурсыСравнение 135 курсов по SMMЦены, школы, длительность, рассрочка

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

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

  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 показывает превью.
Курсы по Веб-разработчикКурсыСравнение 62 курсов для веб-разработчиковЦены, школы, длительность, рассрочка

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

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

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

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

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

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

Иногда «потеря исходящего трафика к соцсети» — это не глобальная фильтрация, а кривой маршрут у конкретного хостера, и чинится с их стороны. Напиши в поддержку: «С моего 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 месяцаОбзор курса
Нейросети для рабочих задач
Перейти на сайт курса
SkillboxSkillbox29 800 ₽2483 ₽/мес.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 месяцевОбзор курса
Frontend-разработчик с нуля
Перейти на сайт курса
НетологияНетология123 700 ₽5385 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология175 800 ₽7125 ₽/мес.21 месяцОбзор курса
Профессия «Разработчик игр на 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. Блин, наконец-то мне кто-то нормально объяснил, почему ог не показывались. Всю голову сломал, потому что на тильдовских сайтах всё нормально, а на моём личном ничего не работало)))

    Спасибо!

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

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

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