← Назад к блогу

Почему фильтры и сортировки в URL плодят дубли страниц и съедают лимиты парсера

Разбираем, почему параметры URL (фильтры, сортировки, UTM) превращают один каталог в тысячи дублей — и как это бьёт по бюджету на прокси и скорости парсинга маркетплейсов.

📅22 октября 2026 г.

Запустили парсер на Wildberries или Ozon, настроили прокси, а через час упёрлись в лимиты и получили кучу забаненных IP — хотя собрали всего пару тысяч карточек? Проблема почти всегда одна: параметры URL. Фильтры, сортировки, пагинация и UTM-метки превращают один каталог в десятки тысяч технических дублей, и парсер честно обходит их все, вместо того чтобы собирать уникальные данные.

Что такое дубли страниц из-за параметров URL

Дубль страницы — это URL, который технически отличается от другого, но содержание отдаёт то же самое или почти то же самое. Классический пример: каталог платьев на Wildberries доступен по адресу /catalog/zhenshchinam/odezhda/platya, но та же выдача, отсортированная по цене, уже превращается в /catalog/zhenshchinam/odezhda/platya?sort=price. Добавьте фильтр по размеру, бренду, цвету, диапазону цен — и на выходе получите сотни комбинаций параметров, каждая из которых формально уникальный URL.

Для живого пользователя это удобно: выбрал фильтр — увидел нужный товар. Но для парсера, который обходит ссылки по маске или следует за пагинацией, каждая такая комбинация — отдельная страница, которую нужно загрузить, распарсить и сохранить. Если не задать правила, робот будет «проваливаться» в бесконечную воронку фильтров: сортировка по цене → фильтр по бренду → фильтр по размеру → снова сортировка, но уже в другом порядке. Количество уникальных URL растёт экспоненциально, а полезных данных в них не прибавляется — это те же самые карточки товаров, только в другом порядке или урезанном наборе.

Отдельная категория дублей — UTM-метки и сессионные параметры (utm_source, clid, _openstat). Они вообще не влияют на контент страницы, но если парсер собирает ссылки с других страниц сайта как есть, он будет тянуть одну и ту же карточку товара десятки раз с разными хвостами в адресе.

Почему это критично именно для парсера

Для SEO-специалиста дубли страниц — это проблема индексации и размытия веса. Для того, кто парсит маркетплейс ради мониторинга цен или сбора ассортимента, дубли — это прямая потеря денег и времени, причём по трём направлениям одновременно.

Во-первых, каждая загрузка дублирующей страницы — это запрос через прокси. Если вы используете платные ротационные прокси (а для обхода защиты Wildberries и Ozon без них никуда), то оплачиваете трафик и за бесполезные запросы тоже. При масштабе в десятки тысяч карточек лишние 30-40% запросов на дубли ощутимо увеличивают расход.

Во-вторых, скорость сбора падает кратно. Если ваш парсер физически способен делать 10 запросов в секунду, а треть из них уходит на страницы с теми же данными, то реальная скорость сбора уникального контента падает до 6-7 карточек в секунду. На больших каталогах это разница между сбором за час и за полдня.

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

Реальные примеры: Wildberries, Ozon, Авито

На Wildberries один и тот же каталог может отдаваться с параметрами ?sort=popular, ?sort=rate, ?sort=newly, плюс фильтры fbrand, fsize, priceU. Если парсер собирает ссылки «карточка → похожие товары → снова карточка», он легко генерирует URL с комбинациями всех этих параметров, хотя набор товаров внутри пересекается на 90%.

На Ozon похожая история с параметром ?sorting= и фильтрами по характеристикам товара — там комбинаций ещё больше, потому что у каждой категории свой набор фильтров (материал, объём, цвет и так далее).

На Авито отдельная боль — параметры геолокации и радиуса поиска (?radius=, ?district=). Одно и то же объявление может «всплывать» в выдаче с разными комбинациями этих параметров, и наивный парсер будет считать это разными находками, раздувая базу дублированными записями.

Как дубли съедают бюджет на прокси и время

Посчитаем на условном примере. Допустим, у категории 500 уникальных товаров, но из-за 8 вариантов сортировки и 12 комбинаций популярных фильтров парсер без нормализации URL обходит не 500, а 4000-5000 страниц с листингом плюс повторные заходы на одни и те же карточки. Если один запрос через резидентный прокси стоит условную единицу трафика, то при наивном обходе вы тратите в 8-10 раз больше, чем нужно для получения того же объёма уникальных данных.

Хуже того, повторные запросы с одного и того же IP к похожим URL — это характерный паттерн для антибот-систем. Чем выше частота и однообразие запросов, тем быстрее срабатывает защита. Получается замкнутый круг: дубли увеличивают число запросов → растёт нагрузка на пул прокси → IP банятся быстрее → приходится чаще менять прокси и перезапускать сбор → итоговое время и стоимость парсинга растут ещё сильнее.

На практике это выглядит так: селлер хочет мониторить цены 200 конкурентов на Wildberries раз в сутки, но из-за неочищенных URL его скрипт делает 15 000 запросов вместо 2 000, упирается в лимиты прокси-пула и получает неполные данные к вечеру вместо утра.

Как обнаружить дубли перед запуском парсера

Прежде чем масштабировать сбор, стоит потратить час на анализ структуры URL целевого сайта. Вот практический порядок действий:

  1. Откройте целевой каталог в браузере и вручную переберите фильтры и сортировки — зафиксируйте, какие параметры появляются в адресной строке.
  2. Проверьте, меняется ли содержимое страницы при добавлении параметра, не влияющего на выдачу (например, UTM-метка) — если контент тот же, этот параметр нужно игнорировать при сборе.
  3. Посмотрите на rel="canonical" в исходном коде страницы — сайты часто сами подсказывают, какой URL считается «основным» для дублирующихся вариантов.
  4. Соберите небольшую тестовую выборку из 100-200 URL и прогоните её через простую дедупликацию по ключевым параметрам — посмотрите, насколько сократится список.
  5. Проверьте robots.txt — иногда там уже прописаны директивы Disallow для параметризованных URL, это тоже подсказка, какие параметры считаются «мусорными».

Нормализация URL: правила и примеры

Нормализация — это приведение URL к единому каноническому виду перед тем, как решать, нужно ли его обходить. Базовый принцип: выделить «значимые» параметры (например, номер страницы пагинации или категория) и отбросить «незначимые» (сортировка, UTM, сессионные идентификаторы).

Практический пример правила нормализации для Wildberries-подобного каталога:

import urllib.parse as up

IGNORED_PARAMS = {"sort", "utm_source", "utm_medium", "utm_campaign", "clid", "_openstat"}

def normalize_url(url: str) -> str:
    parsed = up.urlparse(url)
    query = up.parse_qsl(parsed.query)
    # оставляем только значимые параметры, остальные выбрасываем
    filtered = [(k, v) for k, v in query if k not in IGNORED_PARAMS]
    filtered.sort()  # приводим порядок параметров к единому виду
    new_query = up.urlencode(filtered)
    return up.urlunparse(parsed._replace(query=new_query))
  

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

Для несложных случаев эту же логику можно реализовать без кода — через настройки инструмента парсинга: указать «игнорировать параметры» и перечислить список, либо задать регулярное выражение для отсечения хвоста URL после знака вопроса, если параметры вообще не несут значимой информации для вашей задачи.

Настройка парсера для игнорирования параметров

Большинство готовых решений для сбора данных с маркетплейсов и конструкторов парсинга поддерживают правила исключения параметров URL на уровне настроек проекта. Вот что стоит проверить и настроить в первую очередь:

  • Список игнорируемых параметров. Внесите туда все найденные на этапе анализа сортировки, UTM-метки и сессионные идентификаторы.
  • Дедупликация по хэшу нормализованного URL. Многие парсеры хранят список уже посещённых адресов — важно, чтобы сравнение шло по нормализованной версии, а не по исходной строке.
  • Ограничение глубины обхода фильтров. Если задача — собрать ассортимент категории, достаточно одного «базового» прохода без сортировок и фильтров, а не рекурсивного обхода всех комбинаций.
  • Приоритизация пагинации над фильтрами. Если сайт отдаёт полный список товаров через постраничную навигацию, этого обычно достаточно — отдельно обходить тот же список с применёнными фильтрами избыточно.

После такой настройки объём запросов обычно сокращается в 3-6 раз в зависимости от того, насколько «параметризован» каталог сайта-источника.

Роль прокси при масштабировании парсинга

Даже после идеальной нормализации URL парсинг крупных каталогов Wildberries или Ozon требует распределения запросов между множеством IP-адресов — иначе антибот-защита быстро отследит аномальную активность с одного источника. Здесь важно правильно подобрать тип прокси под задачу.

Для масштабного сбора карточек товаров и мониторинга цен, где важны объём и скорость при разумной стоимости, обычно хватает прокси дата-центров — они быстрее и дешевле резидентных, что критично при миллионах запросов в сутки. Но если защита сайта агрессивно банит дата-центровые диапазоны IP, стоит переключиться на резидентные прокси, которые выглядят как обычные пользователи с реальных провайдеров и реже попадают под подозрение.

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

Важно понимать: правильный выбор прокси не заменяет нормализацию URL, а дополняет её. Без очистки от дублей вы просто быстрее сожжёте даже самый качественный пул IP-адресов. Сначала сокращаете число бесполезных запросов, потом масштабируете оставшиеся через ротацию прокси — именно в таком порядке это даёт максимальную экономию.

Чек-лист перед запуском сбора данных

Прежде чем запускать парсер на боевой масштаб, пройдитесь по короткому списку проверок:

Пункт проверки Зачем нужно
Список параметров сортировки и фильтров выявлен Понять, какие URL можно считать дублями
Правило нормализации URL настроено Схлопнуть дубли в один канонический адрес
Дедупликация по хэшу включена Исключить повторную загрузку одних и тех же данных
Тип прокси подобран под объём и агрессивность защиты Снизить риск бана и ускорить сбор
Лимиты запросов на IP выставлены с запасом Избежать массового бана прокси-пула

Заключение

Фильтры, сортировки и служебные параметры в URL — это не просто техническая мелочь, а один из главных источников бесполезного трафика при парсинге маркетплейсов. Без нормализации URL парсер может делать в 5-10 раз больше запросов, чем нужно для получения тех же данных, что напрямую бьёт по бюджету на прокси, скорости сбора и риску блокировок.

Решение простое по формулировке, но требует дисциплины на этапе подготовки: проанализируйте структуру URL целевого сайта, определите, какие параметры влияют на контент, а какие нет, настройте дедупликацию по нормализованному адресу и только после этого масштабируйте сбор через ротацию прокси. Если ваша задача — стабильный мониторинг цен и ассортимента на Wildberries, Ozon или Авито в большом объёме, стоит начать с резидентных прокси — они дают наилучший баланс между доверием антибот-систем и гибкостью настройки под конкретную задачу.