Разработка · 6 мин чтения

Парсер ключей Озон: как собирать поисковые фразы маркетплейса

Парсер ключей Озон нужен всем, кто зависит от органического трафика с поиска маркетплейса: продавцам, которые сами ведут карточки, и агентствам, которые настраивают рекламу на десятки магазинов сразу. Вручную подобрать релевантные фразы для сотни SKU нереально, а сервисы аналитики закрывают выгрузку частотности платной подпиской. Дальше показываю, откуда Ozon берет данные для автодополнения в поиске, как собрать их скриптом на Python и на что обратить внимание, чтобы скрипт не блокировали через день после запуска.

Зачем продавцу собственная база поисковых фраз Ozon

Карточка на Ozon ранжируется по тем же принципам, что и страница сайта в поиске: заголовок, характеристики и описание должны содержать слова, которые реально вбивают покупатели. Я смотрел статистику по десятку карточек разных продавцов и почти всегда вижу одно и то же: в заголовке стоит красивое название бренда, а слово, по которому товар ищут чаще всего, туда не попало вообще.

Свой список поисковых фраз закрывает три задачи сразу:

  • заголовки и характеристики карточек - под конкретные запросы, а не под интуицию
  • ставки в Трафарете и Поиске - без слива бюджета на фразы, по которым никто не ищет
  • кластеризация конкурентов - видно, какими словами описывают тот же товар другие продавцы

На практике 30-40 собранных и отфильтрованных фраз для одной товарной позиции хватает, чтобы закрыть и SEO карточки, и первую рекламную кампанию.

Откуда Ozon отдает данные для сбора семантики

У Ozon нет открытого аналога Вордстата, но данные, из которых складывается семантика, доступны в нескольких местах:

  • автодополнение в строке поиска - подсказки, которые Ozon показывает при вводе запроса
  • блок «С этим товаром покупают» и «Похожие запросы» на карточке товара
  • количество найденных позиций в выдаче по запросу - косвенный индикатор популярности фразы
  • категории и фильтры каталога - названия фильтров часто совпадают с реальными запросами

Все это открытые данные, которые видит любой посетитель сайта без авторизации. Задача парсера ключевых запросов Ozon - не изобретать доступ туда, где его нет, а автоматизировать то, что вручную занимает часы: перебор десятков сидовых фраз через автодополнение и сохранение результата в таблицу.

Готовые сервисы аналитики или свой парсер: что выбрать

На рынке есть сервисы вроде MPSTATS и Moneyplace, которые уже собирают семантику Ozon и продают доступ по подписке. У них хорошая база и готовые отчеты, но есть ограничения, с которыми я регулярно сталкиваюсь у клиентов.

Критерий Готовый сервис аналитики Свой парсер под задачу
Глубина данных только то, что заложено в интерфейс любой источник, который отдает Ozon: подсказки, фильтры, категории
Скорость обновления по расписанию сервиса, обычно раз в сутки по своему расписанию, вплоть до нескольких раз в день
Интеграция с рабочими процессами выгрузка в Excel вручную автоматическая запись в базу, уведомление в Telegram, запуск по крону
Порог входа минимальный, регистрация и оплата нужна разработка под конкретный набор категорий

Подписки на такие сервисы на рынке стоят от 3000 до 15000 ₽ в месяц в зависимости от тарифа и числа магазинов - это не моя цена, а ориентир по рынку. Свой скрипт я делаю разово, дальше он работает без ежемесячной платы за чужой сервис.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Как собрать парсер ключевых запросов Ozon на Python

Забираю подсказки автодополнения

Логика простая: беру список сидовых фраз, широкие категорийные запросы вроде «кроссовки мужские» или «чехол для телефона», по каждой дергаю подсказки автодополнения и получаю набор более узких фраз с хвостами.

import requests
import time
import random
import csv

SEED_QUERIES = ["кроссовки мужские", "чехол для телефона", "повербанк"]

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15",
]

def get_suggestions(query):
    url = "https://www.ozon.ru/api/entrypoint-api.bx/page/json/v2"
    params = {"url": f"/search/suggest?text={query}"}
    headers = {"User-Agent": random.choice(USER_AGENTS)}
    response = requests.get(url, params=params, headers=headers, timeout=10)
    response.raise_for_status()
    return response.json().get("suggestions", [])

results = []
for seed in SEED_QUERIES:
    for phrase in get_suggestions(seed):
        results.append({"seed": seed, "phrase": phrase})
    time.sleep(random.uniform(1.5, 3.5))

with open("ozon_keywords.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["seed", "phrase"])
    writer.writeheader()
    writer.writerows(results)

Структура ответа у Ozon меняется без предупреждения, поэтому в реальном проекте я оборачиваю парсинг подсказок в отдельную функцию с обработкой на случай, если ключ в JSON пропал или сервер вернул другой формат.

Считаю частотность и группирую фразы

У Ozon нет прямой цифры «частотность в месяц», как в Вордстате. Я использую два косвенных показателя: позицию фразы в списке подсказок, чем выше, тем чаще ищут, и число товаров в выдаче по этому запросу. После сбора 800‑1200 фраз для одной категории через пандас группирую их по совпадающим словам и оставляю 60-80 самых частотных и релевантных, остальное в заголовок и характеристики карточки все равно не поместится.

Делаю скрипт устойчивым к банам

Без этого пункта половина парсеров умирает на третий день работы. Что реально помогает:

  • пауза между запросами 1,5-3,5 секунды со случайным разбросом, а не фиксированный интервал
  • ротация IP через пул прокси, если объем сбора большой
  • рандомизация User-Agent и заголовков между запросами
  • соблюдение общего лимита запросов в минуту, чтобы не перегружать сервер

Задача не в том, чтобы притвориться кем-то другим, а в том, чтобы скрипт вел себя как обычный посетитель с браузером, а не как бот, отправляющий сотню запросов в секунду.

Что делать с собранной семантикой ключей Ozon

Дальше список фраз превращается в конкретные правки:

  • в заголовок карточки - 1-2 самые частотные фразы, без переспама
  • в характеристики и описание - остальные релевантные фразы естественным текстом
  • в рекламный кабинет - фразы с высокой частотой и явным коммерческим смыслом идут в Поиск, широкие - в Трафарет
  • в отдельный список минус-фраз - все, что нашлось случайно и не относится к товару

На одном проекте с категорией «автомобильные аксессуары» пересборка заголовков под собранную семантику подняла позиции карточек в поиске Ozon по 15 из 40 ключевых фраз в течение трех недель, без изменения цены и без вложений в рекламу.

Автоматизация сбора: расписание, база и уведомления

Разовый сбор семантики устаревает за месяц-два: конкуренты меняют заголовки, появляются новые товары, сезонность двигает частотность. Я обычно ставлю сбор на регулярную основу:

  • сам скрипт запускается по крону или через настройку автоматизации сбора данных в n8n, без ручного запуска раз в неделю
  • результаты пишутся в PostgreSQL на сервере в РФ, а не в Google Таблицы - так проще хранить историю по неделям и не гонять коммерческие данные через зарубежное облако
  • бот на aiogram раз в сутки присылает в Telegram сводку: сколько новых фраз, что выросло в выдаче, что пропало

Такая связка снимает с меня и с клиента рутину: не нужно помнить про запуск скрипта, отчет сам падает в чат.

Частые вопросы

Законно ли парсить ключевые запросы Ozon?

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

Как часто нужно обновлять собранную семантику?

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

Сколько стоит разработка парсера ключевых слов под Ozon?

Разработка парсинга и автоматизации на Python у меня - от 20 000 ₽, итоговая цена зависит от числа источников данных (только подсказки или еще и категории с фильтрами) и от того, нужна ли интеграция с базой и уведомлениями в Telegram.

Можно ли использовать Ozon Seller API вместо парсинга ключевых фраз?

Seller API отдает статистику по вашим собственным товарам и рекламным кампаниям, но не показывает поисковые подсказки и семантику по категории в целом. Для сбора ключевых фраз это разные источники, и на практике я использую оба: API для своей статистики, парсер подсказок - для внешней семантики.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно