Оглавление
- → Что такое SoftwareApplication и чем от него отличается MobileApplication?
- → Какие поля обязательны, а какие рекомендованы?
- → Как выглядит рабочий пример JSON-LD?
- → Где размещать разметку на странице и как проверить валидатором?
- → Какие типичные ошибки делают в разметке приложения?
- → Как держать разметку в синхроне с реальностью?
- → Таблица: поля схемы, назначение и примеры
- → Закажите технический аудит приложения за 5000 ₽
- → Частые вопросы (FAQ)

Экспертный разбор от Максима Гончаренко, основатель Optimentor.
TL;DR
SoftwareApplication — тип микроразметки schema.org, который описывает приложение машиночитаемо: название, категория, платформа, цена, рейтинг, ссылка на стор. Для мобильных продуктов есть подтип MobileApplication. Ниже — рабочий пример JSON-LD с разбором каждого поля, правила размещения, проверка валидатором и главное предупреждение: фейковый рейтинг ставить нельзя.
Этот гайд — часть большого разбора Продвижение приложений в ответах нейросетей, где я показываю всю систему App AEO целиком. Здесь мы углубляемся в один технический кирпич — разметку, без которой данные о приложении остаются для машины просто текстом, который ещё надо угадать.
Что такое SoftwareApplication и чем от него отличается MobileApplication?
SoftwareApplication — это базовый тип schema.org для описания любой программы: десктопной, веб- или мобильной. Он сообщает машине, что объект на странице — приложение, и задаёт его свойства: имя, категорию, операционную систему, цену, рейтинг. MobileApplication — это уточняющий подтип SoftwareApplication специально для мобильных приложений. Оба официально документированы на schema.org, и это публичный факт, на который можно опираться смело. Разница между ними на практике невелика, но важна для точности. Если ваш продукт — мобильное приложение для Android и iOS, корректнее использовать"@type": "MobileApplication": вы сразу даёте машине более конкретный класс объекта. Если приложение существует и как веб-сервис, и как мобильное, и как десктоп, можно остаться на родительском SoftwareApplication — он шире и покрывает все формы. У MobileApplication есть несколько специфичных полей вроде carrierRequirements (требования к оператору связи), но в большинстве случаев набор свойств у них одинаковый.
Я обычно рассуждаю так. Чем точнее тип, тем меньше у модели простора для домысливания. Поэтому для чисто мобильного продукта беру MobileApplication, а SoftwareApplication оставляю для случаев, когда у приложения несколько платформенных воплощений и хочется описать их одной сущностью. Ошибкой ни один из вариантов не будет — оба валидны и оба читаются.
Зачем это вообще нужно нейросети? Когда модель формирует ответ на запрос «посоветуй приложение для учёта расходов», она опирается на источники, которые понимает. Простой текст на лендинге она интерпретирует — и может ошибиться: спутать платформу, неверно понять, платное приложение или бесплатное. Разметка убирает эту неоднозначность. Поля applicationCategory, operatingSystem, offers становятся не предложениями для разбора, а готовыми фактами. Это резко повышает то, что я называю извлекаемостью: модель достаёт нужные данные без догадок.
Если коротко: SoftwareApplication отвечает на вопрос «это вообще приложение и какое», а MobileApplication уточняет «это мобильное приложение». Берите подтип, который точнее описывает ваш продукт.
Какие поля обязательны, а какие рекомендованы?
Строго обязательное поле в разметке приложения по сути одно —name, само имя продукта. Без него объект бессмысленный. Но «минимально достаточная» разметка, которую стоит делать на практике, шире: к имени добавляют категорию, платформу и блок предложения с ценой. Это тот набор, по которому машина уверенно классифицирует приложение и понимает его базовые условия. Всё остальное — рекомендованные поля, которые усиливают картину, но не ломают разметку своим отсутствием.
Я делю поля на три группы по приоритету, и в работе иду именно в таком порядке.
Первая группа — каркас, без которого разметка не имеет смысла: name, applicationCategory, operatingSystem. Это «кто я, к какому классу задач отношусь и на чём работаю». Если заполнить только их, модель уже понимает сущность продукта.
Вторая группа — коммерческие и доверительные сигналы: offers (цена и валюта) и aggregateRating (рейтинг и число оценок). Здесь начинается зона риска, о которой я подробно скажу ниже: offers заполняйте всегда, а aggregateRating — только если рейтинг реально есть.
Третья группа — обогащение: downloadUrl, screenshot, softwareVersion, author, publisher, description, operatingSystem с точными версиями. Эти поля дают модели больше зацепок и связывают приложение с компанией-разработчиком, но без них разметка остаётся валидной.
Важная оговорка по поисковым системам. Раньше Google показывал по такой разметке богатый сниппет приложения со звёздами в выдаче, но он отказался от этого формата ещё несколько лет назад. Значит ли это, что разметка бесполезна? Нет. Звёзды в обычной выдаче — это лишь один сценарий. Для App AEO важнее другое: структурированные данные остаются машиночитаемым описанием продукта, которое считывают и краулеры, и языковые модели через веб-поиск. Так что размечать имеет смысл не ради звёздочек, а ради ясности сущности.
Что важно понимать: пустое поле — это нормально, а заполненное неверно — опасно. Лучше не указать рейтинг вовсе, чем указать выдуманный.
Как выглядит рабочий пример JSON-LD?
Ниже — рабочий пример разметки MobileApplication в формате JSON-LD. Все значения в нём примерные: имена, ссылки, цена и особенно рейтинг приведены как образец структуры. Подставьте свои реальные данные. Этот блок нельзя копировать как есть — это шаблон, а не готовая разметка вашего приложения.{
"@context": "https://schema.org",
"@type": "MobileApplication",
"name": "Кошелёк: учёт расходов",
"description": "Приложение для учёта личных расходов и планирования бюджета: категории трат, статистика по неделям, работа офлайн.",
"applicationCategory": "FinanceApplication",
"operatingSystem": "Android 9.0+, iOS 15.0+",
"softwareVersion": "3.4.1",
"downloadUrl": "https://www.rustore.ru/catalog/app/ru.example.wallet",
"screenshot": [
"https://example.ru/app/screen-1.png",
"https://example.ru/app/screen-2.png"
],
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "RUB"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"ratingCount": "1280",
"bestRating": "5",
"worstRating": "1"
},
"author": {
"@type": "Organization",
"name": "ООО «Пример»",
"url": "https://example.ru"
},
"publisher": {
"@type": "Organization",
"name": "ООО «Пример»",
"url": "https://example.ru"
}
}
Ещё раз, без этого никак: значения ratingValue «4.6» и ratingCount «1280» в примере — выдуманные, для демонстрации структуры. У вашего приложения они должны точно совпадать с реальным рейтингом — например, с тем, что показывает карточка в RuStore или ваша собственная честная агрегация отзывов на сайте. То же касается цены, версии и ссылок: всё это надо заменить на свои фактические данные.
Несколько практических замечаний по примеру. Поле operatingSystem я указал с минимальными версиями ОС — это полезный уровень детализации, но допустимо написать и просто «Android, iOS». Поле screenshot принимает массив URL — давайте по одному снимку на ключевой экран. Блоки author и publisher я заполнил одной организацией, потому что чаще всего разработчик и издатель совпадают; если у вас это разные юрлица, укажите оба честно. А offers с price: "0" — это корректный способ обозначить бесплатное приложение; если у вас платная версия или подписка, поставьте реальную цену и валюту.
Синтаксис в примере валидный: это полноценный JSON-объект, где строки в двойных кавычках, вложенные сущности оформлены своими @type, а массив скриншотов — в квадратных скобках. Если будете править руками, следите за запятыми: лишняя запятая после последнего поля в объекте ломает JSON, и валидатор это поймает.
Где размещать разметку на странице и как проверить валидатором?
Размещают JSON-LD в коде страницы приложения на вашем сайте — на том самом лендинге, который вы контролируете полностью. Технически это блок<script type="application/ld+json">…</script>, который ставят либо в <head>, либо в конце <body>. Для языковых моделей и поисковиков место в коде роли почти не играет, главное — чтобы блок присутствовал на странице, отдавался в исходном HTML и содержал валидный JSON. JSON-LD удобен именно тем, что не вплетается в вёрстку: это отдельный блок данных, который не зависит от того, как оформлен видимый контент.
Принципиальный момент — разметка должна описывать ту же страницу, на которой стоит. Не нужно вешать разметку приложения на главную, если приложение описано на отдельном лендинге: ставьте её туда, где есть видимый человеку контент про этот продукт. Структурированные данные и видимое содержимое должны соответствовать друг другу — это требование и поисковиков, и здравого смысла.
После внедрения разметку обязательно проверяют валидатором. Я пользуюсь двумя инструментами и советую прогонять через оба:
- Schema.org Validator (validator.schema.org) — показывает, корректно ли разобрана разметка по типам и свойствам, и подсвечивает синтаксические ошибки.
- Google Rich Results Test — проверяет, видит ли разметку Google и нет ли в ней критичных ошибок с точки зрения поисковика.
Какие типичные ошибки делают в разметке приложения?
Главная и самая опасная ошибка — выдуманныйaggregateRating. Это когда в разметку вписывают красивый рейтинг «4.9» с тысячами оценок, которых на самом деле нет. Соблазн понятен: рейтинг выглядит как сигнал доверия. Но это прямой обман и поисковика, и нейросети, и за ложные структурированные данные Google применяет ручные санкции — вплоть до исключения сниппета или понижения страницы. Правило железное: в aggregateRating идут только реальные, проверяемые числа. Нет рейтинга — поле просто не заполняют. Это не повредит разметке: каркас работает и без него.
Поля SoftwareApplication schema: назначение и примеры значений
- Несоответствие разметки и видимого контента. В JSON-LD цена «0», а на странице написано «по подписке 299 ₽/мес». Поисковик считает это попыткой манипуляции. Данные в разметке и на экране должны совпадать.
- Невалидный JSON. Лишняя или пропущенная запятая, незакрытая кавычка, кириллица без экранирования в неподходящем месте. Любая такая мелочь ломает весь блок — валидатор покажет, где.
- Неверный тип объекта. Размечают приложение как
ProductилиWebSiteвместо SoftwareApplication/MobileApplication. Машина классифицирует продукт неправильно. - Устаревшие данные. Цена изменилась, версия обновилась, число оценок выросло — а в разметке всё по-старому. Поисковик и модель верят разметке буквально, поэтому старые данные хуже отсутствия.
- Разметка без видимого контента. JSON-LD есть, а на странице про приложение почти ничего нет. Структурированные данные должны опираться на реальный контент, а не заменять его.
- Разные названия в разметке и в сторах. Если в JSON-LD одно имя, в RuStore другое, нейросеть может не связать это в один продукт.
Главное, что я понял на практике: почти все проблемы с разметкой — это либо невалидный синтаксис, либо расхождение данных с реальностью. Первое лечит валидатор, второе — дисциплина. Третьего риска, по сути, нет.
Как держать разметку в синхроне с реальностью?
Разметка — это не «сделал и забыл», а живой слепок продукта, который надо обновлять вместе с ним. Цена изменилась, добавилась поддержка новой платформы, вышла крупная версия, выросло число оценок — всё это должно отразиться в JSON-LD. Поисковик и нейросеть читают структурированные данные буквально и доверяют им, поэтому устаревшая разметка вводит их в заблуждение активнее, чем её отсутствие. На практике я привязываю обновление разметки к событиям в жизни продукта, а не к календарю. Удобно встроить это в существующие процессы: выкатываете релиз — заодно правитеsoftwareVersion; меняете тариф — правите offers; обновляете скриншоты в сторе — обновляете screenshot. Так разметка не отрывается от реальности и не превращается в забытый артефакт.
Отдельно про aggregateRating, если вы его ведёте. Рейтинг — самое подвижное поле: число оценок растёт постоянно. Держать его абсолютно точным «до последней оценки» нереально и не нужно — но грубое расхождение (в разметке 4.9, а реально 3.8) недопустимо. Разумный подход — периодически синхронизировать значение с фактическим, например при каждом релизе или раз в обозначенный период. Если поддерживать точность тяжело, честнее не указывать рейтинг в разметке вообще, чем держать заведомо устаревший.
Чтобы синхронизация не была мучением, я советую завести короткий чек-лист «что проверить в разметке при релизе»: версия, цена, платформы, ссылки на сторы, рейтинг. Пять пунктов, минута работы — но именно эта минута отделяет разметку, которой можно верить, от разметки, которая тихо врёт. И ещё одно: один раз пройдитесь по этим полям и спросите себя, по каким уточняющим запросам вы хотите попадать в ответы нейросети («бесплатное», «офлайн», «для Android») — и проследите, чтобы соответствующие поля и видимый текст это подтверждали.
Последнее, что часто упускают, — синхронизация разметки с перелинковкой. Когда у приложения появляется новый раздел сайта или новый материал (обзор, кейс, страница функции), важно не только поставить ссылку в тексте, но и обновить связанные поля разметки: sameAs у бренда, isPartOf у дочерних страниц, хлебные крошки. Если этого не сделать, нейросеть будет видеть устаревшую карту связей и хуже понимать структуру продукта. Поэтому я отношусь к разметке и перелинковке как к единому слою: меняется один — проверяется второй.
Таблица: поля схемы, назначение и примеры
Поля схемы SoftwareApplication
| Поле | Назначение | Пример значения |
|---|---|---|
@type |
Тип объекта: приложение или мобильное приложение | MobileApplication |
name |
Название приложения (единое со сторами) | «Кошелёк: учёт расходов» |
description |
Краткое описание сути продукта | «Учёт расходов и бюджет, статистика, офлайн» |
applicationCategory |
Класс задач приложения | FinanceApplication |
operatingSystem |
Платформы и минимальные версии ОС | «Android 9.0+, iOS 15.0+» |
softwareVersion |
Текущая версия приложения | «3.4.1» |
offers → price / priceCurrency |
Цена и валюта (0 — для бесплатного) | «0» / «RUB» |
aggregateRating → ratingValue / ratingCount |
Рейтинг и число оценок (ТОЛЬКО реальные) | примерные: «4.6» / «1280» |
downloadUrl |
Ссылка на карточку в сторе | URL карточки в RuStore |
screenshot |
Скриншоты ключевых экранов | массив URL изображений |
author / publisher |
Разработчик и издатель приложения | Organization «ООО „Пример»» |
aggregateRating я намеренно подписал «ТОЛЬКО реальные»: это единственное поле в таблице, ошибка в котором грозит санкциями, а не просто неточностью. Все остальные при необходимости можно оставить пустыми без последствий для валидности.
Закажите технический аудит приложения за 5000 ₽
Разметка — это один из пунктов технического аудита, с которого мы начинаем работу над видимостью приложения в нейросетях. На аудите я проверяю, читаема ли карточка и лендинг для ИИ, есть ли валидная SoftwareApplication/MobileApplication schema, не врут ли структурированные данные и какие барьеры мешают модели рекомендовать ваш продукт. По итогам вы получаете список проблем и понятный план, что чинить в первую очередь. Аудит стоит 5000 ₽ при подписке на наш Telegram-канал (или 15 000 ₽ без подписки) — это сознательно низкий порог входа против агентских прайсов в 150–200 тысяч рублей в месяц. Написать можно в Telegram @optimentor, по телефону +79531650000 или на help@optimentor.ru.
Технический аудит приложения
5000 ₽
Проверяем разметку, синхронизацию данных и барьеры для нейросетей
Написать: @optimentor | Телефон: +79531650000 | Email: help@optimentor.ru
Частые вопросы (FAQ)
Обязательна ли разметка SoftwareApplication для попадания в ответы нейросетей?
Не обязательна в смысле «без неё ничего не работает», но крайне желательна. Без разметки нейросеть всё равно может найти приложение по тексту лендинга и карточек, но ей придётся интерпретировать данные и она может ошибиться. Разметка убирает эту неоднозначность и делает ключевые факты — категорию, платформу, цену — машиночитаемыми. Это недорогой технический шаг с понятной отдачей.Что будет, если поставить выдуманный рейтинг в aggregateRating?
Это прямой риск санкций. Google трактует ложные структурированные данные как попытку манипуляции и применяет ручные меры — от снятия расширенного результата до понижения страницы. Плюс вы обманываете и нейросеть, которая строит описание продукта на этих данных. Если реального рейтинга нет, полеaggregateRating просто не заполняют — разметка остаётся валидной и без него.
SoftwareApplication или MobileApplication — что выбрать?
Для чисто мобильного приложения корректнее MobileApplication: это более точный подтип. Если продукт существует в нескольких формах (веб, десктоп, мобильное) и вы хотите описать его одной сущностью, берите родительский SoftwareApplication. Оба типа валидны и читаются машинами; ошибкой не будет ни один вариант.Чем проверить, что разметка приложения сделана правильно?
Двумя валидаторами: Schema.org Validator (validator.schema.org) показывает корректность по типам и синтаксис, а Google Rich Results Test проверяет, видит ли разметку Google. Вставляете URL страницы или сам код, запускаете и чините ошибки (errors). Предупреждения (warnings) обычно касаются необязательных полей и не критичны.
Читайте по теме
Этот разбор — часть пакета по продвижению приложений в ответах нейросетей.
- Обзорный гид со всей системой — Продвижение приложений в ответах нейросетей.
- Про то, где разместить разметку и как собрать страницу под ИИ, — Лендинг приложения для ИИ.
- Про источник данных для полей
downloadUrlиname— Карточка в сторах.
Автор: Максим Гончаренко. Обновлено: июнь 2026.