PWA

Progressive Web App, прогрессивное веб-приложение

PWA — это веб-сайт, который благодаря манифесту и сервис-воркеру работает как нативное приложение: ставится на главный экран, открывается офлайн и грузится почти мгновенно.

Технически PWA держится на двух вещах. Манифест (manifest.json) описывает иконку, название и режим запуска, чтобы браузер предложил «установить» сайт на экран телефона. Сервис-воркер — фоновый скрипт, который кэширует файлы и отдаёт страницу даже без интернета.

Для SEO прямого бонуса от статуса PWA нет, поиск не ранжирует сайт выше просто за манифест. Но косвенный эффект ощутимый: кэширование разгоняет повторные загрузки, улучшает Core Web Vitals и удерживает мобильного пользователя. А скорость и поведенческие в мобильной выдаче решают многое.

Суть
сайт-приложение

Веб-сайт ведёт себя как нативное приложение

Как
service worker

Кэш, офлайн-режим и иконка на домашнем экране

Эффект
+скорость, +удержание

Повторные заходы грузятся мгновенно из кэша

Скорость PWA напрямую влияет на Core Web Vitals
Пример

Магазин обернул сайт в PWA: иконка на экране, работа офлайн, пуши о скидках. Повторные заходы выросли на 40 %, а мгновенная загрузка из кэша подтянула Core Web Vitals.

Сервис-воркер удобен для пользователя, но коварен для индексации: если он начнёт отдавать роботу закэшированную или урезанную версию страницы, в индекс попадёт устаревший контент. Робот Яндекса и Googlebot сервис-воркеры не исполняют — они краулят исходный ответ сервера, поэтому критично, чтобы первый HTML с сервера уже содержал весь контент и метатеги, а не дорисовывался скриптом после установки воркера. Проверять это нужно инструментом «Переобход» и просмотром кэша в Вебмастере, а в Google — через «Проверку URL» с рендером.

Главная ловушка PWA на JS-фреймворках — клиентский рендеринг (CSR): контент собирается в браузере, а серверный ответ почти пустой. Для mobile-first индексации это риск недополучить текст в индекс, поэтому ставьте SSR или пререндер. Сам по себе сервис-воркер не улучшает TTFB первого визита — он ускоряет повторные заходы из кэша; именно эта разница между «холодной» и «тёплой» загрузкой и подтягивает Core Web Vitals по возвращающимся пользователям.