Перейти к основному содержимому

Фото-формула ТОПа — бенчмарк контента ТОП-20

Data-driven creative brief для фотосъёмки: анализируем контент ТОП-20 товаров в категории и строим формулу успеха, которую клиент должен повторить или превзойти.

Проблема

Фотостудии снимают «как видят» или по типовым брифам. Но в каждой категории Wildberries существует своя «выигрышная формула» — у ТОП-20 товаров есть общие паттерны контента:

  • Количество фото — в одних категориях хватает 6, в других нужно 15+
  • Наличие видео — где-то видео даёт +40% конверсии, где-то не влияет
  • Типы кадров — lifestyle, на белом фоне, инфографика, детали, размерная сетка
  • 3D-модели — в некоторых нишах это уже стандарт

Без анализа этих паттернов контент создаётся вслепую. Клиент платит за съёмку, но получает набор фото, который не соответствует стандарту категории. В результате карточка проигрывает конкурентам по визуалу, несмотря на потраченный бюджет.

Возможность для Fotofactor: перейти от субъективных брифов к data-driven ТЗ на фотосъёмку. Каждый бриф подкреплён цифрами: «ТОП-20 в вашей категории используют в среднем 12.3 фото и 85% из них имеют видео — вам нужно минимум столько же».

Пайплайн данных

Два ключевых эндпоинта MPStats

graph LR
A["POST /wb/get/category<br/>ТОП-20 по выручке"] --> B["Контент-метрики:<br/>picscount, hasvideo,<br/>has3d, rating"]
B --> C["Расчёт бенчмарков<br/>avg, %, gap"]
A --> D["GET /wb/get/item/{sku}/by_keywords<br/>Ключевые слова"]
D --> E["Общие ключи<br/>(50%+ ТОПа)"]
C --> F["Фото-формула<br/>= Creative Brief"]
E --> F
ЭндпоинтДанныеЗачем
POST /wb/get/categoryТОП-20 товаров по выручкеКонтент-метрики лидеров категории
GET /wb/get/item/{sku}/by_keywordsКлючевые слова для каждого товараSEO-ядро для инфографики и описаний

Поля для контент-бенчмаркинга

Все данные приходят из одного запроса POST /wb/get/category:

ПолеЧто анализируемКак используем
picscountСреднее количество фото у ТОП-20Минимальное кол-во фото для клиента
hasvideo% товаров с видеоНужно ли видео (да/нет)
has3d% товаров с 3DНужна ли 3D-модель (да/нет/опционально)
commentsКоличество отзывов (social proof)Уровень конкуренции за доверие
ratingСредний рейтингПорог качества в категории
revenueВыручка (для весов)Вес каждого товара в бенчмарке
category_positionПозиция в категорииПодтверждение принадлежности к ТОПу

Анализ

Алгоритм построения фото-формулы

import httpx
from urllib.parse import quote
from collections import Counter

MPSTATS_TOKEN = "YOUR_TOKEN"
BASE_URL = "https://mpstats.io/api"
HEADERS = {
"X-Mpstats-TOKEN": MPSTATS_TOKEN,
"Content-Type": "application/json",
}


# Шаг 1: Загрузить ТОП-20 товаров категории по выручке
def fetch_top20(category: str, d1: str, d2: str) -> list:
"""ТОП-20 товаров категории, отсортированных по revenue."""
resp = httpx.post(
f"{BASE_URL}/wb/get/category",
headers=HEADERS,
json={
"path": quote(category, safe=""),
"d1": d1,
"d2": d2,
"startRow": 0,
"endRow": 20,
"sortModel": [{"colId": "revenue", "sort": "desc"}],
},
timeout=30,
)
resp.raise_for_status()
return resp.json().get("data", [])


# Шаг 2: Рассчитать контент-бенчмарки
def calculate_benchmarks(products: list) -> dict:
"""
Бенчмарки контента ТОП-20:
- avg_photos: среднее количество фото
- video_rate: доля товаров с видео (0.0 - 1.0)
- has3d_rate: доля товаров с 3D (0.0 - 1.0)
- avg_rating: средний рейтинг
- avg_comments: среднее кол-во отзывов
"""
n = len(products)
if n == 0:
return {}

avg_photos = sum(p.get("picscount", 0) for p in products) / n
video_rate = sum(1 for p in products if p.get("hasvideo")) / n
has3d_rate = sum(1 for p in products if p.get("has3d")) / n
avg_rating = sum(p.get("rating", 0) for p in products) / n
avg_comments = sum(p.get("comments", 0) for p in products) / n

return {
"avg_photos": round(avg_photos, 1),
"video_rate": round(video_rate * 100), # в процентах
"has3d_rate": round(has3d_rate * 100),
"avg_rating": round(avg_rating, 1),
"avg_comments": round(avg_comments),
"total_products": n,
}


# Шаг 3: Собрать общие ключевые слова ТОП-20
def fetch_common_keywords(products: list, min_overlap: float = 0.5) -> list:
"""
Ключевые слова, которые встречаются у 50%+ товаров ТОП-20.
Это MUST-HAVE ключи для SEO и инфографики.
"""
keyword_counter = Counter()
n = len(products)

for product in products:
sku = product.get("id")
if not sku:
continue

resp = httpx.get(
f"{BASE_URL}/wb/get/item/{sku}/by_keywords",
headers=HEADERS,
timeout=30,
)
if resp.status_code != 200:
continue

keywords = resp.json()
unique_keys = set()
for kw in keywords:
word = kw.get("keyword", "").lower().strip()
if word:
unique_keys.add(word)

for word in unique_keys:
keyword_counter[word] += 1

# Фильтруем: оставляем только те, что у 50%+ товаров
threshold = int(n * min_overlap)
common = [
{"keyword": kw, "overlap": count, "overlap_pct": round(count / n * 100)}
for kw, count in keyword_counter.most_common()
if count >= threshold
]

return common


# Шаг 4: Сгенерировать фото-формулу (gap-анализ)
def generate_content_formula(
benchmarks: dict,
client_photos: int,
client_has_video: bool,
client_has_3d: bool,
client_rating: float,
) -> list:
"""
Сравнение бенчмарка ТОП-20 с текущим контентом клиента.
Возвращает список gap-ов с рекомендациями.
"""
gaps = []

# Фото
photo_gap = benchmarks["avg_photos"] - client_photos
gaps.append({
"metric": "Количество фото",
"benchmark": benchmarks["avg_photos"],
"client": client_photos,
"gap": round(photo_gap, 1),
"action": f"Добавить минимум {max(0, int(photo_gap))} фото"
if photo_gap > 0 else "Соответствует ТОПу",
})

# Видео
video_needed = benchmarks["video_rate"] >= 50
gaps.append({
"metric": "Видео",
"benchmark": f"{benchmarks['video_rate']}%",
"client": "Есть" if client_has_video else "Нет",
"gap": "Нужно" if video_needed and not client_has_video else "Ок",
"action": "Снять видеообзор 30-60 сек"
if video_needed and not client_has_video else "Опционально",
})

# 3D
three_d_needed = benchmarks["has3d_rate"] >= 30
gaps.append({
"metric": "3D-модель",
"benchmark": f"{benchmarks['has3d_rate']}%",
"client": "Есть" if client_has_3d else "Нет",
"gap": "Нужно" if three_d_needed and not client_has_3d else "Опционально",
"action": "Создать 3D-модель"
if three_d_needed and not client_has_3d else "Низкий приоритет",
})

# Рейтинг
rating_gap = benchmarks["avg_rating"] - client_rating
gaps.append({
"metric": "Рейтинг",
"benchmark": benchmarks["avg_rating"],
"client": client_rating,
"gap": round(rating_gap, 1),
"action": "Улучшить контент для снижения возвратов"
if rating_gap > 0.3 else "В пределах нормы",
})

return gaps

Пример выходных данных

Категория «Автомобильные ароматизаторы» — бенчмарк ТОП-20:

МетрикаТОП-20 бенчмаркКлиент сейчасGapДействие
Количество фото12.35-7.3Добавить минимум 8 фото
Видео85%НетНужноСнять видеообзор 30-60 сек
3D15%НетОпциональноНизкий приоритет
Рейтинг4.74.2-0.5Улучшить контент (снизить возвраты)
Анализ ключевых слов ТОП-20

Эндпоинт GET /wb/get/item/{sku}/by_keywords возвращает ключевые слова, по которым ранжируется каждый товар. Мы собираем ключи со всех 20 товаров и оставляем только те, что встречаются у 50%+ лидеров.

Эти ключевые слова становятся MUST-HAVE для SEO-оптимизации:

  • Их нужно включить в заголовок карточки
  • Они должны быть визуально отражены на инфографике (если ключ = характеристика товара)
  • Их нужно использовать в описании и rich-контенте

Пример для «Автомобильные ароматизаторы»:

Ключевое словоУ скольких из ТОП-20% перекрытия
ароматизатор в машину18 из 2090%
автомобильный ароматизатор16 из 2080%
освежитель воздуха авто14 из 2070%
запах в машину12 из 2060%
ароматизатор подвесной11 из 2055%

Эти ключи должны быть в каждой карточке конкурентной ниши. Если клиент не использует хотя бы 3 из 5 — он теряет органический трафик.

Детализация фото-формулы

На основе визуального анализа ТОП-20 (выполняется аналитиком вручную после получения списка лидеров) строим типовую раскладку:

Тип кадраСреднее кол-во у ТОП-20Описание
На белом фоне4Чистые packshot-ы товара с разных ракурсов
Lifestyle3Товар в контексте использования (интерьер авто)
Инфографика3Характеристики, преимущества, сравнения
Детали/крупный план2Текстура, механизм, упаковка
Размерная сетка / сравнение1Габариты, комплектация

Итого: ~13 кадров — это и есть «фото-формула ТОПа» для данной категории.

Действие Fotofactor

От данных к ТЗ на фотосъёмку

graph TD
A["MPStats API<br/>ТОП-20 по выручке"] --> B["Контент-бенчмарк<br/>фото, видео, 3D, рейтинг"]
B --> C["Gap-анализ<br/>клиент vs бенчмарк"]
A --> D["Ключевые слова<br/>by_keywords × 20 SKU"]
D --> E["MUST-HAVE ключи<br/>(50%+ overlap)"]
C --> F["Creative Brief<br/>= ТЗ на фотосъёмку"]
E --> F
F --> G["Фотосъёмка<br/>Fotofactor"]
G --> H["Загрузка на WB<br/>+ мониторинг"]
Шаблон creative brief (ТЗ на фотосъёмку)

Клиент: {название бренда / продавца} Категория: {название категории WB} Дата анализа: {дата}


1. Бенчмарк контента ТОП-20

МетрикаБенчмаркКлиентGap
Фото{avg_photos} шт.{client_photos} шт.{gap}
Видео{video_rate}% имеютда/нетнужно/ок
3D{has3d_rate}% имеютда/нетнужно/опционально

2. Раскладка по типам кадров

  • На белом фоне: {N} кадров (фронт, бок, зад, сверху)
  • Lifestyle: {N} кадров (в контексте использования)
  • Инфографика: {N} кадров (ключевые характеристики, USP)
  • Детали: {N} кадров (текстура, механизм, комплектация)
  • Видеообзор: 30-60 сек (распаковка + демонстрация)

3. MUST-HAVE ключевые слова (для инфографики и SEO)

  1. {keyword_1}{overlap}% ТОПа
  2. {keyword_2}{overlap}% ТОПа
  3. {keyword_3}{overlap}% ТОПа
  4. ...

4. Рекомендации

  • ТОП-20 используют в среднем {N} lifestyle фото, {N} на белом фоне, {N} инфографик, {N} фото деталей
  • Клиенту необходимо довести количество фото до {target} для соответствия стандарту категории
  • Видео {обязательно/опционально}{video_rate}% лидеров имеют видеообзор
  • Ключевые слова {kw_1}, {kw_2}, {kw_3} должны быть визуально отражены на инфографике

Ценообразование на основе gap-а

Размер gap-а напрямую определяет объём работы и стоимость проекта:

Gap (фото)Объём работыПримерная стоимость
1-3 фотоДосъёмка25 000-40 000 рублей
4-7 фотоЧастичный рестайлинг50 000-80 000 рублей
8-12 фото + видеоПолный рестайлинг80 000-120 000 рублей
12+ фото + видео + 3DПремиум-пакет120 000-180 000 рублей

Ключевой принцип: клиент платит не за «красивые фото», а за закрытие конкретного gap-а до уровня ТОП-20 в его категории. Это делает ценник обоснованным и снимает возражение «а почему так дорого».

Upsell: ежемесячный мониторинг

После выполнения съёмки Fotofactor предлагает подписку на мониторинг:

  1. Еженедельно — проверяем, как изменились позиции карточки после обновления контента
  2. Ежемесячно — пересчитываем бенчмарк ТОП-20 (формула может меняться: конкуренты тоже обновляют контент)
  3. Ежеквартально — полный ре-аудит с рекомендациями по обновлению

Стоимость мониторинга: 15 000-25 000 рублей/мес — рекуррентный доход для Fotofactor.

Результат

Для клиента (продавца на WB)

  • Evidence-based бриф вместо гадания — каждая рекомендация подкреплена данными ТОП-20
  • Понятный ROI: «доведите контент до стандарта ТОП-20 → ожидайте рост позиций и конверсии»
  • Конкретика: не «сделайте красиво», а «нужно 12 фото: 4 packshot, 3 lifestyle, 3 инфографики, 2 детали»
  • SEO-бонус: ключевые слова из анализа ТОП-20 встроены в инфографику и описание

Для Fotofactor

МетрикаЗначение
Средний чек проекта80 000-120 000 рублей
Конверсия аудита в заказ40-60% (бриф убедителен)
Время на анализ~30 мин (автоматизировано)
Стоимость MPStats-запросов21 запрос на категорию (1 category + 20 by_keywords)
Upsell в мониторинг30% клиентов подключают подписку
Рекуррент от мониторинга15 000-25 000 рублей/мес на клиента

Почему это работает

  1. Объективность — клиент видит не мнение фотографа, а стандарт категории в цифрах
  2. Urgency — gap-таблица показывает, насколько клиент отстаёт от конкурентов прямо сейчас
  3. Комплексность — бриф покрывает фото + видео + SEO + инфографику, средний чек выше
  4. Обоснованная цена — стоимость привязана к объёму работы (gap), а не к «ощущениям»
  5. Повторные продажи — бенчмарк меняется каждый месяц, клиент возвращается за обновлением

Unit-экономика

Вход:  1 категория клиента (21 API-запрос)

Анализ: Бенчмарк ТОП-20 + gap-таблица + MUST-HAVE ключи (~30 мин)

Бриф: Data-driven ТЗ на фотосъёмку

Сделка: 80 000-120 000 рублей (съёмка)
+ 15 000-25 000 рублей/мес (мониторинг)

LTV: 200 000-420 000 рублей/год на клиента

Что дальше