OpenSEO
Open-source альтернатива Ahrefs/Semrush: self-host, оплата за данные по факту и MCP-сервер для AI-агента из коробки. Развернули на своем сервере, прогнали живые запросы и проверили главное - годится ли он для российского SEO.
Вердикт
- нужна дешевая замена Ahrefs/Semrush для Google/глобального SEO, оплата по факту
- хочется гонять SEO через AI-агента - MCP и skills есть из коробки
- работаете с не-российского адреса и вам не нужен Яндекс
- нужен Яндекс и российские регионы - источник данных их не отдает
- хостинг и работа из РФ - API данных не отвечает российскому серверу
- нужен «поставил и забыл» прод - проект очень молодой (v0.0.x)
Тестовый стенд: CPU4-RAM8-DISK100, Ubuntu 24.04, OpenSEO v0.0.26.
SEO-комбайн, который дружит с агентом
Semrush только что купила Adobe за $1.9 млрд, а подписки на Ahrefs/Semrush начинаются от сотни долларов в месяц - и для РФ к цене добавляются сложности с оплатой и доступом. OpenSEO (MIT, версия 0.0.26 на момент теста) заходит с другой стороны: open-source, self-host, «плати только за данные».
Внутри - привычный набор: keyword research, обзор доменов, бэклинки, rank tracking, site audit, интеграция с Google Search Console. Отличие от грандов - «SEO для тебя и твоего AI-агента»: встроенный MCP-сервер и набор skills, чтобы работать с данными прямо из Claude Code, OpenClaw или другого агента.
Ключевой нюанс под капотом: OpenSEO сам данные не собирает. Это аккуратный фронт и оркестратор поверх стороннего платного API - DataForSEO. Без ключа приложение - пустая оболочка. К этому мы еще вернемся.
Один docker-образ
Ставится готовым образом, отдельная БД не нужна - состояние живет в volume. Мы подняли его на Ubuntu 24.04 и закрыли Caddy с Let's Encrypt и basic-auth (своей авторизации у приложения нет).
services:
open-seo:
image: ghcr.io/every-app/open-seo:latest
environment:
- DATAFORSEO_API_KEY=${DATAFORSEO_API_KEY}
- ALLOWED_HOST=openseo.example.ru
ports:
- "127.0.0.1:3001:3001"
Что стоит знать заранее, из замеров живого стенда:
- Образ ~3.07 ГБ, и контейнер делает Vite-билд на каждом старте (~48 секунд) - до этого сервер не отвечает. Рестарт - это минута прогрева.
- В простое: RAM ~524 МиБ, CPU ~0.1%.
- Своей авторизации нет (
AUTH_MODE=local_noauth): наружу - только за reverse-proxy с аутентификацией.
Сначала $1, потом $50
DataForSEO - pay-as-you-go. На старте дают $1 бесплатных кредитов (без карты), дальше минимальный депозит $50, а сами запросы стоят копейки (живой Google-SERP - около $0.002, пачка частотностей - центы). Модель «свой UI + плати по факту» на бумаге дешевле фиксированной подписки при нерегулярном использовании.
С не-российского адреса все работает: запрос выдачи Google вернул 20000 Ok и живой топ по «self hosted analytics» - matomo.org, plausible.io. Частотности приходят с CPC и конкуренцией. А теперь - про гео-IP-ограничения.
Ограничения по гео-IP - в два слоя
Слой первый - нет Яндекса. SEO в России - это в первую очередь Яндекс и российские регионы. Проверяем на живом API:
# Google, локация Russia:
task 40501 Invalid Field: 'location_code' # российской локации не существует
# Яндекс:
task 40402 Invalid Path # API Яндекса вырезан целиком
Это не наша ошибка настройки: DataForSEO с 9 марта 2022 года убрал Яндекс и заблокировал локации РФ и Беларуси.
Слой второй - API не отвечает российскому серверу. OpenSEO мы поставили на российский сервер. С него DataForSEO не отвечает вообще - запрос виснет и обрывается по таймауту (30 секунд, пустой ответ). В логах приложения - TimeoutError: aborted due to timeout, в интерфейсе keyword research отдает «An unexpected error occurred». Наши успешные тесты выше шли с зарубежного адреса; на самой российской VM данных нет в принципе.
Складываем: для РФ это двойной блокер - нет российских данных И источник недоступен с российской инфраструктуры. Self-host OpenSEO в России из коробки не «неудобный», а именно нерабочий.
Мы не сдались - вернули в проект Россию
OpenSEO - open-source, и весь слой доступа к данным сходится в одну точку. Значит источник можно заменить. Мы не стали сдаваться: форкнули OpenSEO и вернули в него Россию - вписали Яндекс.Wordstat для частотностей и Yandex-выдачу для позиций, доступные из РФ. Получился тот же удобный self-host + MCP/AI, но уже с российскими данными и работающий с российского сервера.
Когда это НЕ ваш выбор
- Нужен Яндекс и российские регионы. В исходном виде источник данных их не отдает - разбор про Google-срез, для РФ нужен форк.
- Хостинг и работа из РФ. API данных не отвечает российскому egress - на российском сервере продукт данных не получает.
- Нужен стабильный прод «поставил и забыл». Проект очень молодой (v0.0.x): тяжелый образ, билд на каждом старте, ранние шероховатости.
- Не готовы платить за данные. Сам self-host бесплатный, но без платного DataForSEO (мин. депозит $50) приложение - пустая оболочка.
Частые вопросы
Это правда бесплатно?
Сам OpenSEO - да (open-source, self-host). Но данные платные: DataForSEO pay-as-you-go, минимальный депозит $50, $1 trial на старте. Без ключа приложение пустое.
Работает ли для Яндекса / российского SEO?
В исходном виде - нет. Источник данных (DataForSEO) не отдает Яндекс и российские локации, а его API не отвечает с российского egress. Нужен форк на российский источник данных.
Docker или Cloudflare?
Есть оба пути. Docker - для личного использования (мы так и ставили). Cloudflare Workers - для команды/интернет-доступа с бэкапами БД.
Насколько он «прод»?
Проект очень молодой (v0.0.x), активная разработка. UI аккуратный, но образ тяжелый (3 ГБ) и билдится на каждом старте (~48с) - рестарт небыстрый.
Зачем ему MCP?
Чтобы подключить AI-агента (Claude Code, OpenClaw, Hermes) и гонять SEO-задачи через него, а не только руками в UI.
Итог
OpenSEO разворачивается одним docker-образом, UI работает, MCP/AI - из коробки, оплата за данные копеечная. Но для РФ из коробки он нерабочий: источник данных не знает Яндекса и российских регионов, а его API не отвечает российскому серверу. Но мы не сдались: форкнули проект и вернули в него Россию - Яндекс и работу из РФ, на российском сервере.
Стенд у нас запущен на тарифе CPU4-RAM8-DISK100. Нашли неточность в разборе - напишите, поправим в течение дня.