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

Генератор и валидатор манифеста PWA

Заполните форму и получите manifest.webmanifest вместе с тегами для head, или вставьте манифест, который уже отдаёт ваш сайт. Оба проходят один и тот же чеклист: критерии установки Chrome, правила, по которым он выбирает окно установки, и поля, которые стоит исправить.

Работает в браузере. То, что вы вводите или вставляете, не покидает страницу.

Сгенерируйте манифест

Название и описание
name В окне установки и на сплеш-экране.
short_name Подпись под иконкой на главном экране. Ориентир — около 12 символов.
lang Язык name и description, например ru.
description Строка текста в высоком шите установки Chrome.
Идентификатор и URL
id Постоянная идентичность приложения. / подходит, если на домене одно приложение.
start_url Страница, которая открывается при запуске.
scope URL, которые остаются в окне приложения. start_url должен быть внутри.
Окно и цвета
display browser не подходит для установки.
orientation Не задавайте, если приложение работает в любой ориентации.
theme_color Цвет тулбара и превью в переключателе приложений.
background_color Фон сплеш-экрана на мобильных.
Иконки
Где лежат файлы иконок, например /icons/.
Какие иконки добавить

Для критериев установки Chrome нужны иконки 192 и 512. Maskable заполняет адаптивные формы Android; держите логотип в центральных 80%.

Скриншоты (необязательно)

Узкий скриншот переключает Chrome на Android на высокий шит установки, широкий — то же на десктопе. Оставьте оба выключенными, чтобы сохранить компактное окно.

Его показывает Chrome на Android.
Ширина x высота в пикселях, например 1080x1920.
Его показывает Chrome на десктопе.
Ширина x высота в пикселях, например 1920x1080.

Ваш манифест

Положите его в корень сайта как manifest.webmanifest — туда указывают теги ниже.

{
  "name": "Aurora Play",
  "short_name": "Aurora",
  "description": "Ежедневные турниры, бонусы и аккаунт — в один тап с главного экрана.",
  "lang": "ru",
  "id": "/",
  "start_url": "/",
  "scope": "/",
  "display": "standalone",
  "theme_color": "#0b0d14",
  "background_color": "#0b0d14",
  "icons": [
    {
      "src": "/icons/icon-192.png",
      "sizes": "192x192",
      "type": "image/png",
      "purpose": "any"
    },
    {
      "src": "/icons/icon-512.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "any"
    },
    {
      "src": "/icons/icon-512-maskable.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "maskable"
    }
  ]
}

Теги для HTML head

Добавьте их на каждую страницу приложения. apple-touch-icon нужен для Safari на iOS; обычно это 180×180.

<link rel="manifest" href="/manifest.webmanifest">
<meta name="theme-color" content="#0b0d14">
<link rel="apple-touch-icon" href="/icons/apple-touch-icon.png">

Чеклист

Соответствует всем 5 критериям установки Chrome, которые относятся к манифесту. Живой сайт ещё должен пройти то, что эта страница проверить не может.

Ошибки: 0 · Предупреждения: 0 · Пройдено: 12 · Заметки: 2

Критерии установки Chrome

Часть списка Chrome, которая относится к самому манифесту.

  • Пройдено name или short_name Задано: name, short_name.
  • Пройдено icons: 192px и 512px Объявлены иконки 192×192 и 512×512.
  • Пройдено start_url Задано: /.
  • Пройдено display standalone подходит для установки.
  • Пройдено prefer_related_applications Не равно true.

Окно установки

Какое из двух окон установки Chrome получит этот манифест.

  • Заметка Окно на Android Скриншотов нет, поэтому Android покажет компактное окно.
  • Заметка Окно на десктопе Широких скриншотов нет, поэтому Chrome на десктопе покажет стандартное окно.
  • Пройдено description Символов: 68. Заполняет строку текста в высоком шите.

Стоит исправить

Для установки не обязательно, но человек увидит результат.

  • Пройдено Длина short_name Символов: 6 — помещается на большинстве главных экранов.
  • Пройдено scope start_url / внутри scope /.
  • Пройдено id Задано: /. Приложение сохранит идентичность, если start_url изменится.
  • Пройдено Maskable-иконка Есть. Android сможет заполнить адаптивные формы иконки.
  • Пройдено theme_color #0b0d14 — валидный цвет.
  • Пройдено background_color #0b0d14 — валидный цвет.

Проверьте существующий манифест

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

Весь файл, от первой { до последней }.

Чеклист

Результаты появятся здесь после проверки.

Чего проверка манифеста не докажет

Чистый чеклист значит, что файл соответствует правилам Chrome. Он не доказывает, что приложение устанавливается: это зависит ещё и от живого сайта.

HTTPS
Chrome предлагает установку только на страницах, отданных по HTTPS.
Файлы иконок
Страница читает размеры, которые вы объявили. Она не может подтвердить, что файлы существуют и действительно имеют 192 и 512 пикселей; что Chrome реально загрузил, видно в DevTools → Application → Manifest.
Тег и ответ сервера
На каждой странице нужен тег <link rel="manifest">, а файл должен загрузиться и распарситься. Chrome запрашивает его без credentials, если в теге нет crossorigin="use-credentials".
Service worker
Текущие критерии установки Chrome его уже не содержат, но офлайн-страницы, кеш и push без него не работают, а ваш эта страница не видит.
Сам визит
Chrome также ждёт клик или тап и 30 секунд на странице и не предлагает установить уже установленное приложение.

Поля манифеста и что с ними делает Chrome

Названия и значения полей — по справочнику MDN по Web App Manifest; поведение Chrome — по документации самого Chrome.

ПолеЧто делаетЧто с ним делает Chrome
name / short_nameНазвание приложения; short_name — там, где мало места, например под иконкой на главном экране.Для установки нужно одно из двух. Сплеш-экран показывает name.
iconsИзображения для главного экрана, лаунчера, переключателя приложений и сплеш-экрана.Для установки нужны иконки 192px и 512px. Без maskable Android кладёт иконку на белый фон.
start_urlСтраница, которая открывается при запуске.Обязателен для установки. start_url с другого origin игнорируется в пользу страницы, с которой началась установка.
scopeURL, которые принадлежат приложению.Страницы вне него показывают интерфейс браузера в окне приложения. Если start_url не внутри scope, scope игнорируется.
idПостоянная идентичность приложения.Без него идентичность берётся из start_url, поэтому смена start_url позже может зарегистрировать второе приложение.
displayСколько интерфейса браузера остаётся в окне приложения.fullscreen, standalone, minimal-ui или window-controls-overlay подходят для установки; browser — нет.
orientationОриентация по умолчанию.Применяется при открытии; без неё приложение следует устройству и настройкам пользователя.
theme_colorЦвет тулбара и переключателя приложений.Красит тулбар приложения. Держите его равным мета-тегу theme-color.
background_colorФон сплеш-экрана.Используется на сплеш-экране на мобильных. Совпадение с фоном страницы даёт плавный старт.
descriptionКороткое описание приложения.Заполняет строку текста в высоком шите установки; обрезается после 300 символов.
screenshotsСнимки приложения в работе.Пригодные записи включают высокий шит: широкие — на десктопе, узкие или без form_factor — на Android.
prefer_related_applicationsОтправляет пользователей к нативному приложению.true на Android ведёт в Play Store за приложением из related_applications вместо установки PWA.
langЯзык name и description.По данным MDN, браузеры lang пока не реализуют; добавлять его не вредно.

Расширенное или компактное окно установки

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

description формат не выбирает. Оно лишь заполняет строку текста в высоком шите, поэтому удаление описания компактную карточку не вернёт. На десктопе учитываются только широкие скриншоты; Android широкие игнорирует и показывает узкие или те, что без form_factor.

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

Читать: два окна установки Chrome рядом

Где манифесты обычно ломаются

  1. 1

    Размеры, которых нет в файле

    sizes — это обещание, а не замер. Запись 512x512, указывающая на файл 256px, пройдёт любую проверку манифеста. Экспортируйте каждый файл в том размере, который объявляете.

  2. 2

    Смена start_url без id

    Без id идентичность приложения — это start_url. Перенесёте его, и браузер воспримет новый манифест как другое приложение, так что у человека могут оказаться две иконки.

  3. 3

    Click ID в start_url

    MDN предупреждает: start_url с данными конкретного пользователя, вроде ?user=123, становится постоянным отпечатком. Держите click ID в трекере, а не в URL запуска.

  4. 4

    Удаление иконок ради компактного окна

    Иконки решают, будет ли установка вообще. Для компактного окна уберите скриншоты; уберёте иконки — не появится никакого окна.

Хватит править манифест вручную под каждую PWA.

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

Показать флоу установки