Правила чистки площадок РСЯ
Общий пайплайн обработки
Процесс чистки площадок проходит через следующие этапы:
- CheckType - проверка типа кампании
- StatLoad - загрузка статистики из API
- StatDiff - анализ различий в статистике
- ListWhite - проверка белого списка доменов
- ListGray - проверка серого списка доменов
- ListWhiteApps - проверка белого списка приложений
- Stat1Bounces - анализ отказов
- Stat2CtrMin - анализ низкого CTR
- Stat3CtrMax - анализ подозрительно высокого CTR
- Stat4ViewsBlackList - анализ подозрительных площадок
- NetworkResult - формирование результата
- NetworkSetYandex - применение изменений в API
- FinishCampaign - завершение обработки кампании
Правила фильтрации
🤗 WhiteList (Белый список)
- Файл:
domain-list-white.yaml
- Действие: Домены из белого списка НЕ попадают в исключения
- Формат: HitsClicksImpressionsCostCtrMinCtrMaxCtripappnameai
🤗 GrayList (Серый список)
- Файл:
domain-list-gray.yaml
- Действие: Домены из серого списка НЕ попадают в исключения
- Формат: аналогично белому списку
🤗 APPS-WhiteList (Белый список приложений)
- Файл:
domain-list-white-apps.yaml
- Действие: Приложения из белого списка НЕ попадают в исключения
- Формат: HitsClicksImpressionsCostCtrMinCtrMaxCtripappfoobarnameno
Статистические правила
[Stat1Bounces] - Много отказов
- Условие: Clicks > 5 И BounceRate > 55%
- Действие: Площадка попадает в исключения
- Описание: Высокий процент отказов указывает на некачественный трафик
[Stat2CtrMin] - Низкий CTR
- Условие: Impressions > 500 И Ctr < 0.2%
- Действие: Площадка попадает в исключения
- Описание: Очень низкий CTR указывает на неэффективность площадки
[Stat3CtrMax] - Подозрительно высокий CTR
- Условие: Clicks >= 10 И Ctr >= 10%
- Действие: Площадка попадает в исключения
- Описание: Неестественно высокий CTR указывает на накрутку кликов
[Stat4ViewsBlackList] - Подозрительные площадки
- Условие: Impressions >= 100
- Действие: Проверка по черным спискам доменов
- Файлы черных списков:
domain-black-starts.yaml - домены начинающиеся с определенных префиксов
domain-black-finish.yaml - домены заканчивающиеся определенными суффиксами
domain-black-words.yaml - домены содержащие определенные слова
Логика принятия решений
Приоритет правил:
- Белые списки - имеют высший приоритет, исключают из фильтрации
- Статистические правила - применяются к площадкам не в белых списках
- Черные списки - применяются к площадкам с большим количеством показов
Границы попадания в правила:
- WhiteList/GrayList/APPS-WhiteList: точное совпадение домена
- Stat1Bounces: клики > 5 И отказы > 55%
- Stat2CtrMin: показы > 500 И CTR < 0.2%
- Stat3CtrMax: клики >= 10 И CTR >= 10%
- Stat4ViewsBlackList: показы >= 100 И совпадение с черными списками
Исключения:
- Домены в белых списках НЕ попадают под статистические правила
- Домены в белых списках НЕ попадают под черные списки
- Приоритет: WhiteList > GrayList > APPS-WhiteList > статистические правила > черные списки
⚠️ ВАЖНО: Лимит в 1000 площадок
Ограничение API Яндекс.Директ
- Максимум 1000 площадок можно исключить из показа в одной кампании
- При превышении лимита API возвращает ошибку
Текущая логика обработки
1. Проверка в NetworkSetYandex.php
if (count($excluded) > 1000) {
$this->io->error("{$login}\t{$campain['Id']}\t{$campain['Name']}\tExcludedSites > 1000");
}
- Проверяет количество исключаемых площадок перед отправкой в API
- Выводит ошибку, но НЕ останавливает процесс
- Проблема: изменения все равно отправляются в API
2. Проверка в FinishCampaign.php
if ($this->count++ > 1000) {
$this->io->writeln("{$login}\t{$campain['Id']}\t{$campain['Name']}");
die("Count == {$this->count}\n");
}
- Считает количество обработанных кампаний
- Останавливает процесс при превышении 1000 кампаний
- Проблема: это не связано с лимитом площадок
Рекомендации по улучшению
-
Приоритизация площадок:
- Сначала исключать площадки с худшими показателями
- Использовать статистику для ранжирования
-
Логика обрезки:
- Если площадок > 1000, оставлять только самые проблемные
- Логировать отброшенные площадки
-
Разделение кампаний:
- Разбивать большие кампании на несколько
- Применять лимиты к каждой отдельно
TODO из README.md
- "¿что делать если 1000+" - вопрос остается открытым
- Нужна стратегия обработки превышения лимита
🔄 Проверка минусованных доменов
Когда проводить проверку
При достижении лимита в 1000 исключенных площадок рекомендуется провести аудит уже минусованных доменов.
Цель проверки
- Выявить домены, которые больше не актуальны
- Найти неработающие/недоступные сайты
- Освободить место для новых исключений
Методика проверки
1. Получение списка минусованных доменов
# Получить список исключенных площадок из API
./symfony app:net --limit=1 --campaign=ID_КАМПАНИИ
2. Проверка доступности доменов
# Проверка DNS-резолвинга
dig domain.com @1.1.1.1 +short
# Проверка HTTP-доступности
curl -I http://domain.com --connect-timeout 5
# Проверка HTTPS-доступности
curl -I https://domain.com --connect-timeout 5
3. Анализ статистики
- Домены с 0 показов за последние 30 дней
- Домены с 0 кликов за последние 30 дней
- Домены с очень низким CTR (< 0.1%)
4. Критерии для удаления из исключений
- DNS не резолвится - домен больше не существует
- HTTP 404/500 - сайт недоступен
- 0 трафика - домен не используется в рекламе
- Изменение контента - сайт больше не соответствует категории
Команды для проверки
# Запуск проверки конкретного домена
./symfony app:domains --domain=example.com
# Проверка IP-адреса домена
redis-cli -n 3 get "\$ya:domains:example.com:ip"
# Проверка статуса домена в Yandex Search
redis-cli -n 3 get "\$ya:domains:example.com:ya-status"
Автоматизация процесса
Скрипт проверки минусованных доменов
#!/bin/bash
# check-excluded-domains.sh
# Получить список исключенных доменов
excluded_domains=$(redis-cli -n 3 keys "\$domains-stat:*" | sed 's/\$domains-stat://')
for domain in $excluded_domains; do
echo "Проверяем домен: $domain"
# Проверка DNS
if ! dig $domain @1.1.1.1 +short | grep -q .; then
echo "❌ $domain - DNS не резолвится"
continue
fi
# Проверка HTTP
if ! curl -I http://$domain --connect-timeout 5 --silent | grep -q "HTTP"; then
echo "❌ $domain - HTTP недоступен"
continue
fi
echo "✅ $domain - доступен"
done
Рекомендации
- Периодичность: Проводить проверку раз в месяц
- Приоритет: Сначала проверять домены с 0 трафика
- Документирование: Вести лог проверок и решений
- Тестирование: Перед массовым удалением тестировать на одной кампании
Интеграция с существующим процессом
- Добавить этап CheckExcludedDomains в пайплайн
- Автоматически проверять домены при достижении 900 исключений
- Предлагать список доменов для удаления из исключений