Високият трафик към един онлайн магазин обикновено е добра новина. Но когато сайтът започне да се бави точно в момента, в който статистиката показва рязък скок в посещенията, картината може да се окаже съвсем различна.
Наскоро попаднах точно на такъв случай при WooCommerce магазин на наш клиент. Сайтът ту се зареждаше нормално, ту започваше да се бави, а в статистиките се виждаха над 166 000 посещения само за един ден – необичайно много за иначе сравнително спокоен онлайн магазин.

На пръв поглед изглежда като страхотен ден за магазина. Само че зад тези посещения не стояха потенциални клиенти, а ботове, които обхождаха продуктовите филтри и генерираха огромен брой заявки към сървъра.
В тази статия ще покажа как открихме откъде идва натоварването, какво общо имаха WooCommerce филтрите с него и как едно Cloudflare правило промени ситуацията.
Какво всъщност се случваше
Ако имаш WooCommerce магазин (в случая с тема WoodMart), филтрите за цвят, размер, цена, наличност и подредба генерират URL адреси с query параметри, като това:/shop/?filter_color=black/shop/?filter_size=large&query_type_size=or/shop/?min_price=50&max_price=100&orderby=price/shop/?filter_category=lighting&stock_status=instock
За човек това са няколко клика. За ботовете е като детска площадка. Комбинираш няколко цвята, два размера, ценови диапазон и подредба, и изведнъж имаш десетки хиляди уникални адреса. Всеки от тях изглежда като нова страница.
Тези адреси почти не се кешират. Кеш плъгинът пази нормалните страници, но всяка нова комбинация филтри е „студена“ заявка. След първо зареждане, тя се кешира, но почти няма втора заявка с тази комбинация. Google описва точно този проблем под името faceted navigation и е добре известен казус.
Накратко – изглеждаше като трафик. А всъщност беше атака, само че възпитана, в по-учтивата си версия.
Как изглежда това от гледна точка на сървъра
Нека да погледнем и графиките на натоварването. Времето на скриптовете и базата достигаше от около 5000 до 6000 минути на ден. Това не е CPU процент, а чисто време, в което процесорите са заети с обработка на заявките.

Няма грешки в логовете, няма проблемен плъгин. CPU-то е на 100%, паметта е на максимум, а причината са заявките с ?filter_ в адреса.

Решението с Cloudflare правило
Наскоро попаднах на статия в блога на WoodMart, в която екипа споделят за казуса и дават обяснение. Тествах я с реален казус и си свърши работата, затова я разказвам от първо лице.
В Cloudflare отиваш на Security → Security rules → Create rule → Custom rules и пускаш Managed Challenge за заявки, които съдържат филтърните параметри:(http.request.uri.query contains "filter_") or (http.request.uri.query contains "per_page=") or (http.request.uri.query contains "per_row=") or (http.request.uri.query contains "shop_view=") or (http.request.uri.query contains "stock_status=") or (http.request.uri.query contains "min_price=") or (http.request.uri.query contains "max_price=") or (http.request.uri.query contains "orderby=")

Какво прави това? Когато има заявка с филтър в адреса, Cloudflare показва Managed Challenge, преди тя изобщо да стигне до сървъра. Истинският посетител минава през него веднъж и продължава към сайта. Ботовете не преминават тази проверка.
Резултатът – от над 184 хиляди заявки, над 179 хиляди бяха блокирани. Пиковете на потребление на процесорите, които виждах преди, просто изчезнаха. И най-важното – сайтът спря да се бави.

Бъди внимателен, когато го прилагаш
Преди да копираш правилото едно към едно, прочети нататък. Има няколко особености.
Managed Challenge и AJAX не са най-добри приятели. WoodMart филтрите работят през AJAX, а challenge страниците на Cloudflare не се разбират идеално с XHR заявки. На практика първата филтърна заявка се отваря като нормална страница с challenge, минаваш го, и оттам нататък AJAX филтрирането работи нормално. Точно затова го тествай – провери първия филтър, после още няколко, на десктоп и на телефон. Ако се покаже challenge съдържание, не пускай правилото в този вид.
„filter_“ е широко обхватно, и то нарочно. Хваща filter_color, filter_size, filter_category и всичко друго, което започва с filter_. Удобно е, но ако някъде другаде в сайта се използва същият текст, може да се филтрира и легитимен трафик. След като пуснеш правилото, гледай Security Events в Cloudflare няколко дни и пренареди при нужда.
Правилото пази магазина, но не мисли вместо теб за SEO. То спира натоварването, не управлява индексирането. Затова са robots.txt, canonical адресите и SEO настройките на магазина. Пример за robots.txt:User-agent: * Disallow: /*?*filter_ Disallow: /*?*min_price= Disallow: /*?*max_price= Disallow: /*?*orderby=
И понеже злонамерените ботове весело пренебрегват robots.txt, той не замества Cloudflare правилото, а върви заедно с него.
Googlebot е отделен разговор. Cloudflare може да разпознава верифицирани ботове (cf.client.bot). Можеш да пуснеш Googlebot да минава без challenge, за да не пипаш обхождането, но тогава пращаш повече заявки към сървъра. Или го ограничаваш и пестиш ресурс, но внимаваш какво става с индексирането. Зависи от SEO стратегията на конкретния магазин, универсален отговор няма.
И така
Не всеки скок в статистиките е добра новина. Понякога 166 000 „посещения“ означават натоварен сървър и нула продажби. Хубавото е, че за този конкретен сценарий, WooCommerce и WoodMart филтри, обхождани от ботове, решението е сравнително просто с Cloudflare.
Оригиналната статия на екипа на WoodMart, върху която стъпих: https://xtemos.com/blog/how-to-stop-bot-traffic-to-woodmart-product-filters-with-cloudflare/
Топ статии
Акценти
- 1 минута четене
Бизнес философията в JetHost: Почтеност преди всичко
Почтеността не е дума, която се изчерпва с „честност“. Тя е далеч повече – тя е готовността да правиш правилното нещо, дори когато никой не гледа. Да поставяш дългосрочните взаимоотношения…
- 1 минута четене
Хостингът, на който разчиташ, вече и в България! JetHost.BG e live!
От днес JetHost е достъпен за всички клиенти на българския пазар, на jethost.bg. Много от вас вероятно познават екипа, който стои зад това начинание. JetHost е нов бранд, но идеята…
- 1 минута четене
eDesign: за хората, идеите и работата под напрежение
Проектите на eDesign варират от мащабни онлайн магазини до впечатляващи лендинг страници. Във всеки сайт се преплитат креативна концепция, UX стратегия, техническа прецизност и надеждна работа дори при високо натоварване.
Свързани статии
1 минута четенеКогато стабилността е важна: Надежден хостинг за сайта на Френската гимназия в София
След малко повече от шест месеца на българския пазар, JetHost вече е доверен дом за хиляди различни сайтове и уебпроекти. Сред тях са не само фирмени сайтове и онлайн магазини,…
1 минута четенеeDesign: за хората, идеите и работата под напрежение
Проектите на eDesign варират от мащабни онлайн магазини до впечатляващи лендинг страници. Във всеки сайт се преплитат креативна концепция, UX стратегия, техническа прецизност и надеждна работа дори при високо натоварване.


