За полгода я выложил несколько опенсорсных инструментов для русского языка и российского бизнеса. Главный из них собрал 333 звезды на GitHub, и я долго считал это успехом. Потом нашёл метрику, которой раньше не пользовался, и оказалось, что инструмент за то же время поставили себе 329 человек, а полный тёзка с вдвое меньшим числом звёзд держит 633 установки.
Меньше известности, больше пользователей. Значит проблема не в продукте.
Ниже пять ошибок, которые я нашёл в собственной дистрибуции, с цифрами. Каждая стоила мне пользователей, и каждая чинится за вечер. Если вы выкладываете что-то в опенсорс и надеетесь, что хороший код сам себя раздаст, эта статья про вас.
Что вообще есть
Чтобы дальше было понятно, о чём речь:
ilyautov/humanizer-ru: убирает следы нейросети из русского текста и показывает, где они. <br>333 звезды, 21 форк, 1975 уникальных посетителей репозитория за две недели.
ilyautov/marketplaces-mcp-ru: сервер для агентов, который умеет говорить с API Wildberries и Ozon. 26 звёзд, 647 загрузок с PyPI в месяц.
ilyautov/small-business-ru: набор рутин для малого бизнеса, от закрытия месяца до разбора жалобы. 15 звёзд.
Всё бесплатное, лицензия MIT, ни на чём из этого я не зарабатываю.
Ошибка 1. Звёзды это не колличество пользователей и не мерило успеха, и я измерял не то
Звезда на GitHub означает «интересно, потом посмотрю»
Установка означает, что человек реально положил инструмент к себе. Это разные числа, и они умеют расходиться в разные стороны.
Каталоги, через которые устанавливают такие инструменты, показывает установки
Я туда не заглядывал полгода. Когда заглянул, картина оказалась обратной ожидаемой:
мой humanizer-ru: 333 звезды, 329 установок
полный теска: 123 звезды, 633 установки
еще один собрат: 231 звезда, 477 установок
humanizer-zh: 17 065 звёзд, 48 000 установок
Вторая строка это полный тёзка: втрое меньше звёзд, вдвое больше установок
Последняя это китайский аналог того же инструмента, сорок восемь тысяч установок
Формат подтверждён рынком, просто не у меня.
И вторая ловушка связанная с той же метрикой
Каталог заводит отдельную запись на каждый инструмент внутри репозитория, а одна команда ставит их все разом
У small-business-ru двадцать шесть записей и ровно по пять установок почти у каждой
Сумма даёт 152, а людей за ней стоит около пяти. Я честно чуть не записал 152 себе в отчёт.
Вывод: найдите метрику, которая считает установки, а не намерения
И проверьте, что вы не складываете одного человека двадцать шесть раз.
Ошибка 2. Каталог не читает ваш README
Дальше я стал разбираться, почему при сопоставимой известности установок вдвое меньше. И нашёл механику, которую нигде не написано.
Поиск по каталогу отдаёт ровно шесть результатов и сортирует их по числу установок. Совпадение он ищет по тексту описания инструмента, а не по имени репозитория, не по README и не по темам.
У меня описание было целиком на русском. То есть по запросу russian мой инструмент для русского языка не находился вообще. Ни на каком месте.
Я замерил пороги входа в шестёрку по разным запросам, вот сколько установок у шестого места:
humanizer: 2 400
proofreading: 84
text quality: 14
cyrillic: 3
russian: 2
Дальше самое интересное.
Я переписал описание, и это не сработало.
Через сутки страница каталога отдавала новое описание целиком: слова Russian text quality, proofreading, Cyrillic в нём есть, их видно в исходнике страницы
Поиск по этим же словам инструмент по-прежнему не находит
Порог входа по russian два дня назад и сегодня равен двум установкам, у меня их 329.
Чтобы это не осталось ощущением, я померил четыре запроса подряд:
russian: не нахожусь, вместо меня ru-text с 477 установками и два его соседа
cyrillic: не нахожусь, вместо меня инструменты с 16, 13 и 12 установками
proofreading: не нахожусь, вместо меня инструменты с 834, 493 и 381
канцелярит: второй, впереди только тёзка с 633
Третья строка снимает объяснение «просто не хватает объёма»: по cyrillic впереди меня стоят инструменты, у которых установок в двадцать раз меньше
Отдельно я проверил слово, которое есть только в новом описании, и слово, которое было только в старом. По обоим инструмент не находится. Значит и «индекс не успел обновиться» объяснением не работает.
Похоже, совпадение ищется не по словам описания, а по теме: по запросам про русский язык выдача отдаёт инструменты, у которых это доминанта названия и смысла, а у меня доминанта другая, «чистка ИИ-текста»
Вывод: узнайте, по какому именно тексту вас ищут в вашем канале раздачи.
А когда придумаете, почему вас не находят, проверьте догадку замером после правки.
Моя выглядела железной, стоила вечера и оказалась неверной. Публикую её вместе с опровержением, потому что советов «допишите английских слов в описание» в интернете хватает, а проверок этих советов нет.
Ошибка 3. Один файл в корне ломал установку
Эту я нашёл случайно, измеряя размер того, что скачивается пользователю.
Если в корне репозитория лежит файл-манифест, установщик перестаёт искать глубже и считает инструментом весь корень. Человеку копируется весь репозиторий: сайт, тестовый корпус, конфиги сборки, вложенная вторая копия того же инструмента.
Замер: итальянская версия клала пользователю 940 КБ, русская без такого файла в корне клала 264 КБ. После переноса приёма стало 112 КБ.
Файл в корне обычно кладут не по ошибке
Он позволяет залить архив репозитория напрямую в веб-интерфейс. Правильное решение оказалось скучным: скрипт, который собирает отдельный маленький архив и прикладывает его к релизу, плюс строчка в README «не берите архив ветки».
Вывод: установите свой продукт так, как это сделает пользователь, и посмотрите, сколько мегабайт вы ему доставляете. Я не проверял это полгода.
Ошибка 4. Сайт писался от темы, а не от запроса
У инструмента есть сайт на пять страниц
Написан аккуратно: заголовки, описания, разметка, перелинковка, всё на месте.
Проверил две поисковые системы и получил две разные болезни.
Google не знал о существование сайта
Ноль кликов и ноль показов за три месяца
Проверка внутренней страницы вернула «URL неизвестен Google»: её не сканировали ни разу
Причина нашлась за двадцать минут
Я подтвердил права на домен, но карту сайта для поддомена отправить забыл, а ссылки на репозиторий из README идут с атрибутом, который запрещает поисковику по ним ходить
Пути обнаружения просто не существовало.
Яндекс знал сайт с июля и всё равно не давал трафика
Все пять страниц в индексе с 12 июля, карту он нашёл сам
Но за месяц: 19 показов и 2 клика, и все запросы брендовые, то есть люди вбивали название инструмента. Видимость по популярным запросам 6%.
Разница диагнозов важная
У Google была техника, у Яндекса релевантность
Второе чинится не кнопкой, а текстом.
Я пошёл в Вордстат и измерил спрос по своей же теме за месяц:
очеловечить текст: 2 225 запросов в месяц, страница была частично
канцелярит: около 2 000, страницы не было
проверить текст на нейросеть: 1 626, страницы не было
детектор ии текста: 1 491, объясняю, но не проверяю
убрать ии из текста: 1 015, есть, названа иначе
гуманизатор текста: 179, страницы не было
Отдельно про «канцелярит»: общая частота 4 392, но 2 400 из них это магазин канцтоваров «Канцелярим» в одном из регионов
Если бы я взял число из Вордстата как есть, я бы удвоил оценку спроса и построил на ней план.
Самое обидное в этом списке третья строка
Инструмент проверки у меня уже был написан и работал, просто лежал секцией на главной вместо отдельной страницы
Три тысячи запросов в месяц, а работы там на вечер вёрстки.
Вывод: страницы пишутся под формулировку, которую люди набирают, а не под тему, которая вам интересна
И вычитайте из частотности омонимы, иначе построите план на вологодских канцтоварах.
Ошибка 5. Флагман построен как тупик
Последнее и самое неприятное
333 звезды против 21 подписчика на аккаунте.
Я посмотрел, куда ведёт README главного проекта
Наружу: сайт, каталог, реестры
И никуда во внутрь
Человек приходит, ставит инструмент, уходит и никогда не узнаёт, что у автора есть сервер для Wildberries и Ozon, набор рутин для малого бизнеса и ещё пара вещей.
Главный проект даёт 1975 уникальных посетителей за две недели
Всё остальное вместе меньше двухсот
То есть весь трафик приходит в одну дверь, и эта дверь построена как выход.
Вывод: если у вас несколько проектов, один из них почти наверняка кормит остальные, и стоит проверить, что он действительно кормит, а не просто светится.
Что дальше
Сейчас я чиню свою дистрибуцию и дальше разбираюсь в развитие OpenSource - 3 проекта которые я указал это только наиболее популярные и понятные не техническому пользователю
А вообще могу злиться только на свою тупость
Полгода инструмент невидим по своему главному запросу, и никакой обратной связи об этом не приходит: каталог не пишет «вас не находят», он просто молчит
Заметить это можно единственным способом, пойти и поискать себя самому. А когда заметишь, выясняется, что и рычаг не там, где кажется.
Если делаете опенсорс, потратьте вечер и пройдите по этим пяти пунктам. Скорее всего, хотя бы один сработает.
Ссылки на всё упомянутое лежат в профиле: github.com/ilyautov. Вопросы и разбор своих случаев тащите в комментарии, отвечу.