- html5css.dev
- SEO
- Мобильное SEO
- Мобильные технологии
- PWA — прогрессивные веб-приложения
PWA — прогрессивные веб-приложения
PWA — не способ продвижения, а способ удержания: установка на экран, работа при плохой связи, повторные заходы. Разбираем, из чего состоит PWA, что он даёт на самом деле и как не сломать индексацию.
Что такое PWA
Прогрессивное веб-приложение — это обычный сайт, которому добавили три вещи:
- HTTPS — без него ничего из остального не работает.
- Манифест — файл с названием, иконками и параметрами отображения. Он позволяет установить сайт на домашний экран и запускать без адресной строки.
- Service Worker — скрипт-посредник между страницей и сетью. Он кеширует ресурсы, обеспечивает работу при плохой связи и делает возможными push-уведомления.
Ключевое слово — «прогрессивное»: сайт остаётся обычным сайтом. Пользователь из поиска получает нормальную страницу, а тот, кто установил приложение, — ускоренную повторную загрузку.
Манифест
{
"name": "Каталог инструментов",
"short_name": "Каталог",
"start_url": "/?source=pwa",
"scope": "/",
"display": "standalone",
"background_color": "#0e1116",
"theme_color": "#0e1116",
"icons": [
{ "src": "/icons/192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icons/512.png", "sizes": "512x512", "type": "image/png" },
{ "src": "/icons/mask.png", "sizes": "512x512", "type": "image/png",
"purpose": "maskable" }
]
}
Подключается одной строкой в <head>:
<link rel="manifest" href="/manifest.webmanifest">
Service Worker: осторожная стратегия
// sw.js — сеть в приоритете, кеш как запасной вариант
const CACHE = 'v3';
self.addEventListener('fetch', event => {
const req = event.request;
// HTML всегда пробуем взять из сети: контент должен быть свежим
if (req.mode === 'navigate') {
event.respondWith(
fetch(req).catch(() => caches.match('/offline.html'))
);
return;
}
// статику отдаём из кеша, обновляя в фоне
event.respondWith(
caches.match(req).then(hit => hit || fetch(req).then(res => {
const copy = res.clone();
caches.open(CACHE).then(c => c.put(req, copy));
return res;
}))
);
});
Что PWA даёт и чего не даёт
| Даёт | Не даёт |
|---|---|
| Мгновенную повторную загрузку за счёт кеша статики | Прибавку к позициям — отдельного фактора нет |
| Установку на домашний экран без магазина приложений | Автоматической скорости первой загрузки: она зависит от обычной оптимизации |
| Работоспособность при нестабильной связи | Замены нативному приложению там, где нужен глубокий доступ к устройству |
| Push-уведомления и возврат аудитории | Индексации того, что рисует только Service Worker |
| Лучшие поведенческие показатели у вернувшихся | Присутствия в App Store и Google Play |
PWA и индексация
- Googlebot не выполняет Service Worker. Робот всегда ходит в сеть напрямую — значит, сервер обязан отдавать полноценный HTML сам по себе.
- Каждый экран — отдельный URL. Если приложение — SPA, используйте History API и серверный рендеринг или пререндер, иначе индексировать будет нечего.
- Офлайн-страница закрывается от индексации.
/offline.htmlдолжен отдаватьnoindex, иначе рискует попасть в выдачу. start_urlс меткой источника. Параметр вида?source=pwaудобен для аналитики, но закройте его от индексации через canonical.- Скорость первой загрузки важнее. Из поиска приходят новые пользователи, у которых кеша нет. За неё отвечают Core Web Vitals, а не Service Worker.
Когда PWA оправдан
| Тип проекта | Стоит ли | Почему |
|---|---|---|
| Сервис с повторными визитами: почта, трекер, личный кабинет | Да | Пользователь возвращается, установка и кеш окупаются |
| Интернет-магазин с лояльной аудиторией | Скорее да | Возврат через уведомления, ускорение повторных сессий |
| Медиа с постоянными читателями | Возможно | Полезен офлайн-режим и уведомления о новых материалах |
| Информационный сайт с трафиком из поиска | Нет | Посетитель приходит один раз, кеш не пригодится |
| Лендинг | Нет | Смысла в установке нет вовсе |
Итог
PWA — инструмент удержания и удобства, а не продвижения. Он окупается там, где к вам возвращаются, и почти бесполезен там, где посетитель приходит из поиска однократно. Внедряя, следите за одним: сервер должен отдавать полный HTML сам, без участия Service Worker.
Частые вопросы
Влияет ли PWA на позиции в поиске?
Напрямую — нет, отдельного фактора «это PWA» не существует. Косвенно помогает то, ради чего PWA обычно и делают: быстрая повторная загрузка и лучшее удержание пользователя.
Из чего минимально состоит PWA?
HTTPS, файл манифеста manifest.webmanifest с иконками и именем, зарегистрированный Service Worker. Этого достаточно, чтобы приложение можно было установить на домашний экран.
Может ли Service Worker навредить индексации?
Googlebot рендерит страницы без Service Worker, так что показать роботу «версию из кеша» не получится. Опасность в другом: агрессивное кеширование отдаёт живым пользователям устаревшие страницы, а неправильный офлайн-фолбэк может подменять содержимое.
PWA или нативное приложение?
PWA дешевле, индексируется поиском и не требует магазина приложений. Нативное выигрывает там, где нужен глубокий доступ к возможностям устройства и присутствие в сторе. Часто разумно начать с PWA.
Вся глава «Мобильные технологии» — 2 урока
- AMP — ускоренные мобильные страницы
- PWA — прогрессивные веб-приложения