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

Поиск внутри платформы, а не только в Google

Ваш продукт живёт внутри Telegram, магазина приложений или маркетплейса, а значит у платформы свой поиск по своему индексу, и ваш сайт на этот индекс не влияет никак.

Полей, по которым платформа сопоставляет запрос, мало, и они короткие. Впишете туда не те слова — спрос пройдёт мимо.

При этом ничего не сломается и никуда ничего не запишется, поэтому такую поломку так дорого и искать.

Каждая платформа сопоставляет свой набор полей. Разберитесь с этим набором до того, как что-то писать.

ПлатформаПо чему ищетПо чему не ищет
TelegramИмя бота и @usernameDescription и About — их читают после того, как вас нашли
App StoreTitle, subtitle, поле keywords, основная категорияDescription и промо-текст
Google PlayTitle и остальные метаданные карточки

Имя тянет весь поиск, поэтому пишите его их словами

Заголовок раздела «Имя тянет весь поиск, поэтому пишите его их словами»

Пишите в имени функцию, а не только бренд, и тем алфавитом, которым набирает аудитория, потому что всё остальное в профиле читают уже после того, как вас нашли.

Бюджеты маленькие, в этом вся трудность:

ПолеЛимит
Имя бота в Telegram0–64 символа
Title в App Store30 символов
Title в Google Play30 символов
Короткое описание в Telegram120 символов
Описание в Telegram512 символов
Keywords в App Store100 байт

Выбирать один алфавит при этом не обязательно. setMyName и setMyDescription принимают language_code, то есть носителям каждого языка вы показываете отдельное имя, и это самая дешёвая правка на всей странице.

У двух описаний разные работы. Короткое описание стоит в профиле и едет вместе со ссылкой, когда ей делятся, а длинное описание отвечает на вопрос «жать ли start».

Как потратить бюджет keywords и не повториться

Заголовок раздела «Как потратить бюджет keywords и не повториться»

Поле keywords у Apple вмещает 100 байт через запятую. Байт, а не символов. ASCII тратит байт на букву, кириллица в UTF-8 — два, так что для русского списка это примерно 50 букв.

На своей странице про product page Apple пишет «100 characters», но в справочнике App Store Connect стоят байты, и на приёмке действует именно справочник.

Слова, которые уже стоят в title или subtitle, повторять там не надо, а имена конкурентов в этом поле — частая причина отклонения.

Само поле относится к версии, а не к приложению целиком. Поэтому его и не находят.

Откройте Apps, выберите приложение, потом версию под её платформой в боковом меню: Keywords лежит там рядом с Description и Promotional Text и локализуется по языкам.

Name и Subtitle общие для всех версий. Они лежат под App Information, то есть на другом экране.

Прочитать метаданные обратно с платформы

Заголовок раздела «Прочитать метаданные обратно с платформы»

Спросите у платформы, что там установлено на самом деле, потому что ваша память тут не доказательство — и консоль, в которой вы это набирали, тоже не доказательство.

getMe возвращает объект User — id, username и first_name, то есть имя бота, а описания в нём нет вообще, поэтому за полями описаний нужны отдельные вызовы.

getMyName, getMyDescription и getMyShortDescription читают по одному полю каждый и принимают language_code. Передавайте язык аудитории. Иначе прочитаете дефолт и решите, что ничего не установлено.

Свежий аккаунт, язык аудитории, фразы, которые она правда набрала бы. Запишите, кто выходит.

Их имена — бесплатный список ровно тех слов, которыми говорит спрос, и собрали этот список люди, которые по нему уже стоят в выдаче.

Разметить каждую ссылку, ведущую внутрь платформы

Заголовок раздела «Разметить каждую ссылку, ведущую внутрь платформы»

Свой start parameter на каждую площадку. Пишите его в запись пользователя только при первом контакте.

Повторный запуск перезапишет исходный источник тем, на что человек нажал последним, так что сработавшая площадка и пустая станут неотличимы.

  • Имя только на английском, когда спрос был в другом алфавите. Глобальный поиск сопоставляет имя, поэтому запросы в алфавите аудитории до бота не доходили вообще — ничего не ломалось и ничего не логировалось.
  • Читать состав пользователей как сигнал рынка. География регистраций совпадала с латинским написанием имени, а не с рынком, под который я строил, поэтому недели ушли на продуктовые теории про эту аудиторию. А аудитория была артефактом одного поля метаданных.
  • Рассчитывать, что вытянет description. Он всё это время был на нужном языке, но поиск по этому полю не сопоставляет, поэтому не изменилось ничего.
  • Сравнивать продукты вместо имён. Конкуренты с функцией, выписанной в алфавите аудитории, были заметно крупнее, и работали они на тех же публичных API. У них было имя, а не технология.
  • Считать символы против лимита в байтах. Поле keywords вмещает 100 байт, а кириллица тратит по два байта на букву: половины бюджета не стало до того, как я что-то набрал. На маркетинговой странице Apple написано «символы», её я и прочитал.
  • Верить своей памяти об имени. Прочитанное обратно через API разошлось с тем, что я считал установленным, и все диагнозы до этой проверки стояли на неверном факте.
  • Публиковать ссылки без start parameter. Код этот параметр тоже не читал, поэтому атрибуция была не приблизительной, а нулевой, и месяцы работы над дистрибуцией оценить было нечем.
  • Считать сайт главной дверью. Источника не нёс ни один вход, значит доля сайта неизвестна: откуда пользователь пришёл. Позиции я поднимал по-настоящему, только направлял работу в канал, про который так и не показал, что им пользуются.
  • Поискать с аккаунта, который никогда не пользовался продуктом, на языке аудитории, и отметить, находитесь ли вы вообще и кто стоит выше.

  • Прочитать имя, description и короткое описание обратно через API и сверить с тем, что вы собирались установить.

    Окно терминала
    curl -s "https://api.telegram.org/bot$TOKEN/getMyName?language_code=ru"
  • Считать символы против лимитов платформы до отправки, а не после отклонения.

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

  • Отправить себе размеченную ссылку и убедиться, что параметр сохранился при первом контакте, потом запустить ещё раз и убедиться, что он не перезаписан.

Снаружи платформы первые внешние ссылки берутся совсем в другом месте: откуда берутся первые внешние ссылки.

Предложить правку · Страница не помогла