Как мы решили проблему с индексацией сайта в России: TLS, ТСПУ и HTTP/2

При запуске каталога Telegram-каналов tg-sliv.ru мы столкнулись с неочевидной проблемой: сайт отлично открывался у пользователей, но Яндекс.Вебмастер упорно показывал фатальную ошибку «Не удалось подключиться к серверу из-за ошибки DNS». При этом ручная проверка ответа сервера давала 200 OK.

Разбираемся, что случилось и как мы это исправили.

Что такое ТСПУ и при чём тут TLS

ТСПУ (технические средства противодействия угрозам) — это оборудование, установленное у российских операторов связи по требованию закона о суверенном интернете. Оно анализирует трафик на лету и может блокировать или замедлять соединения по различным признакам.

Одним из таких признаков оказался TLS 1.3 с включённой функцией 0-RTT (Zero Round Trip Time). Это оптимизация протокола, которая позволяет отправлять данные ещё до завершения handshake — звучит хорошо, но именно этот паттерн трафика ТСПУ воспринимает как подозрительный и режет соединение.

В результате складывалась странная ситуация:

Обычные пользователи заходили на сайт нормально (браузеры делали несколько попыток и в итоге устанавливали соединение)
Поисковый робот Яндекса получал таймаут при первой же попытке и фиксировал «ошибку DNS»
Ручная проверка в вебмастере срабатывала, потому что выполнялась из другой точки сети

Что мы попробовали сначала

Первым решением был откат на TLS 1.2 — сайт заработал стабильно, но это не решало проблему с роботом, который ожидает более современные протоколы. Пробовали CDN от Timeweb — не помогло, потому что их серверы находятся в тех же подсетях. Cloudflare тоже не дал результата в нашей конфигурации.

Решение: TLS 1.3 + отключение 0-RTT + HTTP/2

Решение оказалось простым — три строчки в конфиге nginx.

В файле /etc/nginx/nginx.conf:

ssl_protocols TLSv1.2 TLSv1.3;

В файле /etc/nginx/sites-available/ваш-сайт:

listen 443 ssl http2;
ssl_early_data off;

Разберём что делает каждая строка:

ssl_protocols TLSv1.2 TLSv1.3 — включаем оба протокола. TLS 1.2 остаётся для совместимости со старыми клиентами, TLS 1.3 доступен для современных браузеров и поисковых роботов.

ssl_early_data off — отключаем именно 0-RTT, ту самую функцию TLS 1.3, которую детектирует ТСПУ. TLS 1.3 при этом остаётся включённым и работает в стандартном режиме без проблемного паттерна трафика.

http2 в директиве listen — включаем HTTP/2, который работает только поверх TLS и даёт дополнительный прирост производительности за счёт мультиплексирования запросов.

После применения конфига и перезагрузки nginx командой nginx -t && systemctl reload nginx сайт начал стабильно открываться без задержек, а поисковый робот Яндекса получил возможность нормально обходить страницы.

Итог

Проблема оказалась не в DNS и не в недоступности сервера — это была специфика работы ТСПУ, которая блокировала конкретную оптимизацию TLS 1.3. Отключение одной функции (ssl_early_data off) при сохранении всех преимуществ современных протоколов решило проблему полностью.

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