Когда сайт слишком нравится Яндексу
Как нашего клиента заддосили Яндекс-боты и как мы с этим справились
У нашего постоянного клиента — Орматек — на сайте используются разные поддомены для разных городов. Вообще это типичная история для e-commerce, которую очень любят сеошники.
В начале марта 2024 сайт начали DDOS-ить Яндекс-боты, причем так, что он временами ощутимо подтормаживал. Стали искать причину: оказалось, они считали, что ormatek.com, barnaul.ormatek.com, ufa.ormatek.com и т. д. — разные сайты, которые соответственно надо индексировать независимо и лучше делать это почаще, так как контент обновляется регулярно.
В начале марта 2024 сайт начали DDOS-ить Яндекс-боты, причем так, что он временами ощутимо подтормаживал. Стали искать причину: оказалось, они считали, что ormatek.com, barnaul.ormatek.com, ufa.ormatek.com и т. д. — разные сайты, которые соответственно надо индексировать независимо и лучше делать это почаще, так как контент обновляется регулярно.
Иван
технический директор
— На самом деле Яндекс-боты штурмовали сайт уже на протяжении пары месяцев, только проблема стояла не так остро. Постепенно активность ботов нарастала. Причем запросов от ботов не стало сильно больше, но раньше они были размазаны по дню, а теперь начали приходить ОЧЕНЬ большими пачками. Обычно от Яндекса идёт 100−200 запросов в минуту, внезапно начинает приходить по 3000—5000 запросов. Вероятно, раньше они обрабатывали сначала один поддомен, потом второй и дальше, сейчас же стали слать запросы одновременно на все.
Елена
продакшн-директор
— Нас спасало распределение по серверам и балансировщик Varity. Если один сервер был недоступен — трафик шел на второй, только время ответа сайта пользователям становилось больше.
Итак, что мы проделали, чтобы даже при активности ботов от Яндекса снизить нагрузку на сайт:
Проверка теории, что мы принимаем разом слишком много запросов
Первой у нас возникла теория, что сайт принимает разом слишком много запросов, и потом «висит» на ожидании базы. Поэтому мы проверили настройки веб-серверов и убедились, что ставим такие запросы в очередь заранее. В планах — провести нагрузочное тестирование, отправляя запросы между тестовым и рабочим серверами, и посмотреть, где именно утыкаемся в бутылочное горлышко.
Разгон детальной страницы товара
95% запросов от Яндекса шли на детальные страницы товаров, что не удивительно — на сайте больше 196 000 SKU. Поэтому оптимизацию начали именно с них.
Оптимизация кэша
Для детальной карточки товара у нас был отдельный кэш на каждый город, так как там очень много блоков содержат данные, зависящие от города — цены, доставки, в том числе экспресс, акции и скидки и т. д. Мы поменяли подход к кэшированию — теперь выделяются блоки, не зависящие от города, и они кешируются глобально.
Эта оптимизация была для начала сделана только для блоков дополнительных товаров, которые мы за последние полгода заметно усложнили. Это один из самых тяжёлых блоков на странице, и результат сразу виден на замерах скорости.
Эта оптимизация была для начала сделана только для блоков дополнительных товаров, которые мы за последние полгода заметно усложнили. Это один из самых тяжёлых блоков на странице, и результат сразу виден на замерах скорости.
Замеры по скорости на примере страницы кровати Como (Veda) 4 (это самая тяжёлая детальная страница товара — у кровати рекордные 6200 SKU):
- была 3.6 секунд без кеша и 1.6 секунды с кешем
- сейчас 2.9−3.0 секунды без кеша и 1.0−1.1 с кешем
Оптимизация блока доставки
На детальных страницах товаров раньше был тяжёлый и долгий ajax-запрос: загрузка сроков доставки. Оказалось, внезапно, что Яндекс-бот его тоже выполняет. При этом данный запрос занимал почти половину времени от общей загрузки страницы (1 сек на начальную загрузку страницы, потом ещё 0,75 сек на доставки аяксом). Для ботов мы его просто отключили. Соответственно, теперь Яндекс-бот, индексируя детальную страницу товара, грузит наш сервер не 1.75 сек, а всего 1 секунду.
Изменение работы с SEO для карточек товаров
Мы поменяли работу с SEO для карточек товаров (на списке товаров и на детальной странице).
Раньше для каждой карточки товара выполнялось получение SEO-параметров, настроенных для неё в свойствах элемента инфоблока. Он достаточно медленный (особенно на списке, если карточек на странице 50+ штук). При этом для большей части карточек использовались только два поля: alt и title для картинки.
Мы посмотрели, какой формат у этих полей сейчас в базе данных и зашили эти значения в код страниц: там теперь имяТовара+имяСку. Итого:
- на детальной странице товара стало минус 60 запросов к базе данных
- на списке товаров — минус 100 запросов.
Сейчас сайт работает стабильно. Кроме того Яндекс также отписался, что они внесли изменения, уменьшающую нагрузку (касаются количества ботов на страницы).
Елена
продакшн-директор
— В итоге мы понервничали пару вечеров, когда трафик ботов совпадал с увеличением трафика пользователей. Наша команда находится в Барнауле, а это значит, что у нас +4 часа к московскому времени. Так что мониторить ситуацию и всё отлаживать нам приходилось именно вечером, чтобы понять какую-то закономерность.
На самом деле Яндекс — молодцы, их поддержка оперативно отвечала и собирала чатики. Не смотря на то, что компания очень большая, мы обошлись без каких-то бюрократических сложностей и ответов от техподдержки длиною в неделю.
На самом деле Яндекс — молодцы, их поддержка оперативно отвечала и собирала чатики. Не смотря на то, что компания очень большая, мы обошлись без каких-то бюрократических сложностей и ответов от техподдержки длиною в неделю.