Transformer un site WordPress en Progressive Web App (PWA) en 2026 est plus accessible que jamais grâce à des bibliothèques matures comme Workbox et à une prise en charge native dans Chrome, Firefox et Safari. Une PWA offre à vos visiteurs une expérience mobile proche d’une application native : installation sur l’écran d’accueil, mode hors ligne, notifications push et chargement instantané. Ce guide complet explique le fonctionnement du Service Worker, la configuration du manifest.json, l’implémentation du mode hors ligne et des notifications push, et les étapes de publication sur le Play Store.

Qu’est-ce qu’une Progressive Web App et pourquoi l’adopter pour WordPress ?

Une Progressive Web App (PWA) est une application web qui adopte progressivement les fonctionnalités des applications natives mobiles : installation sur l’écran d’accueil, fonctionnement hors ligne, notifications push, accès à la caméra, géolocalisation, et chargement instantané grâce à la mise en cache. Le terme « progressive » signifie que ces fonctionnalités sont activées de façon incrementale selon la compatibilité du navigateur et de l’appareil, sans jamais dégrader l’expérience des utilisateurs sur navigateurs anciens. Une PWA reste accessible via URL standard dans un navigateur web tout en offrant une UX proche d’une application native.

Pour un site WordPress, transformer son site en PWA présente des avantages concrets et mesurables. Google a démontré à travers ses études de cas (Alibaba, Forbes, Pinterest) que l’adoption de la PWA augmentait le temps passé sur le site de 40 à 70 %, réduisait le taux de rebond sur mobile, et améliorait les métriques Core Web Vitals grâce à la mise en cache agressive. Pour les blogs et médias, le mode hors ligne permet aux lecteurs de consulter des articles déjà visités même sans connexion, une fonctionnalité particulièrement valorisée dans les zones de faible couverture réseau.

La différence technique fondamentale entre un site web classique et une PWA réside dans trois éléments : le Service Worker (un script JavaScript qui s’exécute en arrière-plan, intercepte les requêtes réseau et gère les caches), le Manifest Web App (un fichier JSON qui décrit l’application pour le système d’exploitation : icône, couleur de thème, mode d’affichage), et HTTPS (obligatoire pour les Service Workers, donc pour toute PWA). Ces trois conditions remplies, les navigateurs Chrome, Firefox, Safari et Edge affichent une invitation à « installer » l’application.

Le Service Worker : moteur de la PWA

Le Service Worker est un fichier JavaScript enregistré par votre page web et exécuté dans un thread séparé du navigateur, en arrière-plan. Il agit comme un proxy réseau programmable : il peut intercepter toutes les requêtes HTTP de la page (images, scripts, API calls, pages HTML), les répondre depuis un cache local ou les laisser passer au réseau selon la stratégie choisie. Sa durée de vie est indépendante de la page : il peut recevoir des notifications push ou synchroniser des données même si l’utilisateur a fermé l’onglet.

Il existe plusieurs stratégies de mise en cache à combiner selon le type de ressource. « Cache First » sert le fichier depuis le cache immédiatement, sans attendre le réseau, puis met à jour le cache en arrière-plan : parfait pour les images et les polices qui changent rarement. « Network First » essaie d’abord le réseau et bascule sur le cache uniquement si la connexion échoue : recommandé pour les pages HTML afin d’avoir toujours le contenu le plus récent. « Stale While Revalidate » sert immédiatement la version en cache tout en déclenchant une requête réseau pour mettre à jour le cache pour la prochaine visite.

La bibliothèque Workbox, développée par Google, simplifie considérablement l’écriture d’un Service Worker. Elle fournit des modules prêts à l’emploi pour chaque stratégie de cache, la gestion du précaching, l’expiration automatique des entrées de cache, la synchronisation en arrière-plan (Background Sync pour les formulaires hors ligne), et les routes de fallback. Pour WordPress, Workbox peut être intégré directement dans votre thème enfant ou via un plugin PWA dédié.

Intégrer un Service Worker dans WordPress

La méthode la plus propre pour ajouter un Service Worker à WordPress sans plugin tiers consiste à créer un fichier service-worker.js à la racine du site WordPress (pas dans le dossier du thème, car le SW doit être servi depuis la racine pour avoir un scope global). Enregistrez-le depuis functions.php de votre thème via wp_add_inline_script : ajoutez un bloc JavaScript en bas de page qui appelle navigator.serviceWorker.register(« /service-worker.js ») si la fonctionnalité est disponible dans le navigateur. Veillez à envoyer le bon en-tête Content-Type (application/javascript) pour le fichier SW.

Pour une approche sans code personnalisé, plusieurs plugins WordPress gèrent cela automatiquement. Le plugin PWA for WP est l’un des plus complets : il génère le manifest.json, crée et enregistre un Service Worker configurable, gère le mode hors ligne avec une page de fallback personnalisable, et propose une interface pour les notifications push via OneSignal ou Firebase Cloud Messaging. Super PWA est une alternative plus légère, idéale pour les petits sites qui n’ont besoin que des fonctionnalités de base (installation, hors ligne, splash screen).

Quelle que soit la méthode choisie, testez le Service Worker avec les outils dédiés. Dans Chrome DevTools, l’onglet « Application » > « Service Workers » affiche l’état du SW (activé, en attente, erreur) et permet de le forcer en mode « Update on reload » pour les tests. L’onglet « Cache Storage » liste le contenu de chaque cache nommé. Lighthouse (accessible via DevTools > onglet « Lighthouse » ou via la CLI) audite votre PWA selon la checklist officielle et génère un score avec des recommandations concrètes.

// service-worker.js — Cache First avec Workbox (version simplifiée)
importScripts('https://storage.googleapis.com/workbox-cdn/releases/7.0.0/workbox-sw.js');

const { registerRoute } = workbox.routing;
const { CacheFirst, NetworkFirst, StaleWhileRevalidate } = workbox.strategies;
const { precacheAndRoute } = workbox.precaching;

// Précache des assets statiques
precacheAndRoute([
  { url: '/offline.html', revision: 'v1.0' },
  { url: '/wp-content/themes/montheme/style.css', revision: 'v2.3' },
  { url: '/wp-content/themes/montheme/assets/logo.svg', revision: 'v1' }
]);

// Cache First pour les images
registerRoute(
  ({ request }) => request.destination === 'image',
  new CacheFirst({ cacheName: 'images-cache', plugins: [
    new workbox.expiration.ExpirationPlugin({ maxEntries: 100, maxAgeSeconds: 30 * 24 * 60 * 60 })
  ]})
);

// Network First pour les pages HTML (contenu frais en priorité)
registerRoute(
  ({ request }) => request.destination === 'document',
  new NetworkFirst({ cacheName: 'pages-cache',
    networkTimeoutSeconds: 3,
    plugins: [new workbox.expiration.ExpirationPlugin({ maxEntries: 50 })]
  })
);

// Fallback offline
self.addEventListener('fetch', event => {
  if (event.request.mode === 'navigate') {
    event.respondWith(fetch(event.request).catch(() => caches.match('/offline.html')));
  }
});

Le manifest.json : rendre votre WordPress « installable »

Le fichier manifest.json (ou webmanifest) est un document JSON placé à la racine du site ou dans un sous-dossier, référencé dans le de vos pages via une balise . Il déclare les métadonnées de votre application : nom complet, nom court (max 12 caractères pour l’icône d’accueil), description, URL de démarrage (start_url), mode d’affichage (standalone masque la barre d’adresse, fullscreen masque tout le chrome du navigateur), couleur de thème (barre de statut sur Android), et couleur de fond du splash screen.

Les icônes sont l’élément le plus important du manifest pour l’expérience d’installation. Prévoyez au minimum les tailles 192×192 et 512×512 pixels au format PNG ou WebP. Certains systèmes (iOS Safari, Windows 11) requièrent également 180×180 (apple-touch-icon) et des icônes maskable (avec un fond sécurisé sur 80 % de la surface pour les icônes adaptatives Android). L’outil Maskable App Editor (maskable.app) permet de créer et tester vos icônes maskable. Pour WordPress, placez ces icônes dans votre dossier de thème ou dans /wp-content/uploads/brand/ et référencez-les dans le manifest.

La propriété start_url définit quelle page se charge quand l’utilisateur ouvre la PWA depuis l’écran d’accueil. Utilisez « / » pour la page d’accueil, ou une URL avec un paramètre UTM (?source=pwa) pour tracer les ouvertures PWA dans Google Analytics. La propriété scope limite les URL que la PWA contrôle : toute navigation hors du scope s’ouvre dans le navigateur système. Pour WordPress, un scope « / » permet de couvrir tout le site. Activez screenshots dans le manifest pour afficher un aperçu de l’application dans le dialogue d’installation sur Chrome 116+.

Mode hors ligne et synchronisation en arrière-plan

Le mode hors ligne est la fonctionnalité la plus visible d’une PWA pour l’utilisateur final. L’implémentation minimale consiste à précacher les ressources statiques critiques lors de l’installation du Service Worker (fichiers CSS, JS, logo) et à créer une page offline.html qui s’affiche quand l’utilisateur demande une page non présente en cache sans connexion réseau. Cette page doit être informative et utile : listez les articles déjà mis en cache et navigables hors ligne, et proposez un bouton « Réessayer » qui teste la connexion.

Pour WordPress, le précaching des articles récents peut être automatisé. Lors de la première visite, le Service Worker peut récupérer la liste des articles via l’API REST WordPress (/wp-json/wp/v2/posts?per_page=10) puis précacher les 10 URLs retournées. Cette stratégie garantit que les articles les plus récents sont disponibles hors ligne sans que l’utilisateur n’ait à les visiter individuellement. Combinez cela avec un bouton « Télécharger pour hors ligne » sur chaque page d’article qui déclenche explicitement le cache de cet article si l’utilisateur le demande.

La Background Sync API (supportée sur Chrome et Edge, partielle sur Firefox) permet de différer les actions qui nécessitent un réseau jusqu’à ce que la connexion soit rétablie. Pour un formulaire de contact sur un site WordPress, si l’utilisateur soumet le formulaire hors ligne, le Service Worker stocke la requête dans IndexedDB et l’envoie automatiquement au retour de la connexion. C’est une amélioration UX significative par rapport au comportement classique (erreur réseau, données perdues). Implémentez ce pattern avec le module workbox-background-sync.

Notifications push WordPress : engager les lecteurs

Les notifications push sont l’une des fonctionnalités les plus puissantes des PWA pour les sites de contenu comme les blogs WordPress. Elles permettent d’envoyer un message court (titre + corps + icône + bouton d’action) qui s’affiche sur le bureau ou l’écran de verrouillage de l’utilisateur, même si le navigateur est fermé. Sur mobile, l’engagement des notifications push web est comparable à celui des notifications d’applications natives, avec des taux d’ouverture de 5 à 10 %, bien supérieurs à ceux des emails marketing.

L’implémentation technique des notifications push passe par le Web Push Protocol. Le processus est le suivant : (1) l’utilisateur donne son accord via l’API Notification.requestPermission(), (2) le Service Worker génère un objet d’abonnement (PushSubscription) contenant un endpoint HTTPS unique et des clés de chiffrement, (3) cet objet est envoyé à votre serveur WordPress via une requête AJAX, (4) le serveur stocke l’abonnement en base de données et peut l’utiliser ultérieurement pour envoyer des notifications via le Web Push Protocol. Les plugins WordPress comme OneSignal, WonderPush ou Push Engage gèrent tout ce pipeline clé en main.

Pour tirer le maximum des notifications push sans être intrusif, respectez quelques règles. Ne demandez pas la permission de notification dès l’arrivée sur le site : présentez d’abord un bouton « S’abonner aux actualités » qui explique ce que l’utilisateur recevra. Segmentez vos abonnés par catégorie d’article pour envoyer des notifications pertinentes. Limitez la fréquence à une ou deux notifications par semaine maximum. Proposez systématiquement un bouton de désabonnement facile. Les navigateurs bloquent automatiquement les sites qui ont un taux de rejet des permissions trop élevé, ce qui réduirait votre capacité à afficher la demande dans le futur.

Audit, performances et publication sur le Play Store

Avant de déclarer votre site WordPress prêt en tant que PWA, effectuez un audit complet avec Lighthouse. L’onglet « PWA » de Lighthouse vérifie la présence et la validité du manifest, l’enregistrement et la réactivité du Service Worker, le support HTTPS, les méta viewport et le comportement en mode hors ligne. Visez un score de 90+ dans toutes les catégories. Corrigez les alertes une par une : une icône de mauvaise taille, un start_url inaccessible hors ligne, ou un manifest sans display: standalone peut bloquer l’invitation à l’installation.

La performance est indissociable d’une bonne PWA. Les utilisateurs qui installent votre PWA ont une attente élevée en termes de réactivité. Optimisez votre WordPress avec un plugin de cache (WP Rocket, LiteSpeed Cache), compressez vos images avec WebP et le lazy loading, et réduisez le JavaScript bloquant. Sur les mobiles bas de gamme courants dans certaines régions, une page JavaScript lourde détruira l’expérience même avec un Service Worker actif. Mesurez avec WebPageTest sur un réseau 3G simulé et ciblez un Time to Interactive (TTI) inférieur à 5 secondes.

Depuis Chrome 72 sur Android, les PWA peuvent être publiées sur le Google Play Store via le format Trusted Web Activity (TWA). C’est une opportunité pour les éditeurs WordPress de bénéficier de la distribution de la boutique d’applications sans maintenir une application native. L’outil Bubblewrap de Google génère un projet Android Shell qui enveloppe votre PWA dans une activité native, avec support des In-App Purchases si vous vendez du contenu premium. Vérifiez votre identité de domaine avec un fichier assetlinks.json pour que Chrome valide la relation entre votre PWA et le package Android.

Sources et références

W
WP Admin Lab

Architecte web full-stack. WordPress, performance, data et sécurité. Notes de terrain, tests reproductibles et retours d'expérience.