Guide PWA SEO
Progressive Web App SEO — pourquoi "going PWA" ne fait pas améliorer rankings, pourquoi le manifest.json est SEO-irrelevant, comment a misconfigured service worker peut servir Googlebot a stale cache, et où Core Web Vitals et HTTPS en réalité (et ne pas) overlap avec SEO.
A PWA est a site web enhanced avec a manifest et a service worker — c’est encore a normal (généralement JavaScript/SPA) site à Google, avec aucun inherent classement advantage. Le manifest.json est SEO-irrelevant (il contrôle installability, pas indexation). Le un réel PWA-spécifique risque est le service worker: Google's renderer ne fait pas exécuter service workers quand indexation, donc a cache-premier HTML stratégie peut hand Googlebot a stale or offline page. Corriger que avec network-premier pour HTML, et le rest est ordinary JS/SPA SEO.
Preuve à l’appui de cette affirmation A progressive web app is still a web application; installability features do not replace indexable HTML and URLs. Portée : Current official or standards documentation. Niveau de confiance : élevé · Vérifié : web.dev: Progressive web apps Preuve à l’appui de cette affirmation JavaScript applications must expose crawlable links, meaningful content, metadata, and status behavior to Google. Portée : Current official or standards documentation. Niveau de confiance : élevé · Vérifié : Google: JavaScript SEO basicsTL;DR — A PWA (Progressive Web App) est a normal site web avec deux extras bolted on: a manifest que lets personnes install il à leur home screen, et a service worker que peut faire il fonctionner offline. À Google c’est encore simplement a site web — going PWA fait pas boost votre rankings. Le un chose que peut en réalité hurt vous est a badly set-up service worker que montre Google an old, mis en cache page au lieu de votre actif un.
Ce que a PWA en réalité is
A Progressive Web App is a website that’s been enhanced to feel plus comme a native app. Two pieces faire it a PWA:
- A web app manifest (
manifest.json) — a petit fichier que indique le navigateur votre app’s nom, icons, et colors, donc a visitor peut tap “Add to Home Screen” et obtenir an app-style icon et splash screen. - A service worker — a bit de JavaScript que exécute dans le background et peut cache fichiers donc le site charge rapide on repeat visits et même fonctionne offline.
c’est il. Underneath, a PWA est presque toujours a regular JavaScript site web (React, Vue, Angular, et donc on). c’est a normal site wearing an app costume.
Le big myth à bust
Le la plupart courant chose personnes believe est: “Si nous turn notre site dans a PWA, nous’ll classer meilleur.” Google a said plainly que ce n’est pas vrai. Google’s John Mueller put il directement: PWAs “currently ne pas ont tout advantage dans Google Search.” Là est aucun “PWA bonus” dans le classement systèmes.
Le manifest fichier ne fait pas aider SEO soit. Il contrôle comment le app installs — le icon, le nom, le splash screen — none de qui Google lit quand deciding comment classer vous.
The un chose que peut en réalité hurt
Le service worker est le partie à faites attention avec. Parce que il peut servir a mis en cache (enregistré) copy de votre pages, a mauvais setup peut fin up showing Google a stale or même blank “you’re offline” version de une page au lieu de le réel, up-à-date un. c’est comment a PWA loses trafic après launch — pas parce que il “became a PWA,” mais parce que le mise en cache était pointed le incorrect façon.
Ce que to en réalité do
- Assurez-vous votre réel page contenu charge pour moteur de recherches, pas simplement an vide shell que fills dans avec JavaScript afterward.
- Définir votre service worker donc il récupère fresh HTML depuis le network premier, et seulement falls back à le cache pour speed on choses comme images et stylesheets.
- Garder le basics correct: réel, unique URLs; a bon titre et meta description on chaque page; a rapide, fiable experience.
Étant a PWA est great pour votre utilisateurs — installable, rapide, offline-friendly. Simplement ne pas expect il à déplacer vous up dans Google, et ne pas let le service worker feed Google le incorrect page. Le Avancé tab a le mechanics, le mise en cache strategies, et le citations.
Preuve à l’appui de cette affirmation A progressive web app is still a web application; installability features do not replace indexable HTML and URLs. Portée : Current official or standards documentation. Niveau de confiance : élevé · Vérifié : web.dev: Progressive web apps Preuve à l’appui de cette affirmation JavaScript applications must expose crawlable links, meaningful content, metadata, and status behavior to Google. Portée : Current official or standards documentation. Niveau de confiance : élevé · Vérifié : Google: JavaScript SEO basicsTL;DR — A PWA est a manifest + a service worker layered on top de ce que est presque toujours a JS/SPA site — donc le rendu règles depuis JavaScript/SPA SEO appliquer unchanged, plus deux PWA-spécifique concerns. Google donne PWAs aucun classement advantage (Mueller). Le
manifest.jsongoverns installability, pas indexation, et il y a aucun evidence le classement systèmes lire il. Le service worker est le réel risque: Google’s renderer ne fait pas exécuter service workers quand indexation, donc a cache-premier HTML stratégie peut indexer a stale or offline shell — utiliser network-premier pour HTML, cache-premier pour static assets. HTTPS est a difficile requirement pour service workers et séparément a tiny classement signal; ne pas chain ceux dans “PWAs rank better.” Core Web Vitals est le seulement legitimate overlap, et c’est le engineering, pas le PWA étiquette.
A PWA is a website premier
Le unique la plupart utile frame: a Progressive Web App est a normal site web avec deux choses ajouté on top. Per Google’s propre definition, PWAs “sont web apps construit et enhanced avec modern APIs à provide enhanced capabilities pendant que encore reaching quelconque web utilisateur on quelconque device avec a unique codebase.” Le three pillars Google noms sont Capable, Fiable, et Installable — remarque que none de le three est “rankable.”
«Architecturally, that codebase is almost always a JavaScript framework running a
single-page-application pattern. Which means: everything that governs JS/SPA
indexability governs PWA indexability, with no modification. Real <a href> links
and History-API routing (not hash fragments) for addressability; server-side rendering
or prerendering for content availability; per-route canonical, title, and meta in the
rendered DOM. If you’ve read the JavaScript SEO and SPA SEO material, you already know
90% of PWA SEO — the app-shell failure mode, in particular, is one Google explicitly
documents: “Some JavaScript sites may use the app shell model where the initial HTML
does not contain the actual content and Google needs to execute JavaScript before
being able to see the actual page content that JavaScript generates.” A PWA that
ships an empty shell with no SSR/prerender inherits that problem directly.
» (Traduction) (Résumé en français de la section vingt-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«So the honest scope of a PWA-specific SEO article is small: the manifest, and the service worker. Everything else is JS/SPA SEO wearing a manifest. » (Traduction) (Résumé en français de la section vingt-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## The core myth: “going PWA” does not improve rankings » (Traduction) (Résumé en français de la section vingt-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«This is the headline. Google has been unusually direct about it. John Mueller, in a Search Central office-hours session, said PWAs “currently don’t have any advantage in Google Search, and as far as I know, there are no plans to change this,” and — asked whether converting to a PWA would help — “By default, saying going to a PWA will make your rankings better — I don’t think that is the case.” » (Traduction) (Résumé en français de la section vingt-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«He also pre-empted the usual counter-argument, that “our competitor went PWA and their rankings jumped.” His answer: “So just the fact that one of your competitors has moved from one framework to another, and has seen an improvement in search, that framework change from my point of view wouldn’t be responsible for that.” And on why: “These are essentially different ways of making a website… for the most part, we see these as normal HTML pages.” » (Traduction) (Résumé en français de la section vingt-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Where PWA relaunches do correlate with ranking lifts, it’s the confounds that come with any big rebuild: modernized internal linking, refreshed and expanded content, genuine speed improvements, and usually a marketing push tied to the relaunch. None of that requires the PWA label. If you rebuild a 10-to-15-year-old organically-grown site, you change a dozen things at once — attributing the result to “PWA” is a correlation error. » (Traduction) (Résumé en français de la section vingt-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Mueller’s office-hours statements above are relayed by Search Engine Journal and independently by Search Engine Roundtable covering the same Nov 2021 session; I have not replayed the original video, so treat them as reported-official. » (Traduction) (Résumé en français de la section vingt-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Manifest.json: installability ≠ indexability » (Traduction) (Résumé en français de la section trente, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«The manifest.json file exists to make your app installable. Its fields —
name, short_name, icons, start_url, display, theme_color — drive the
install prompt, the home-screen icon, the splash screen, and whether the app opens
standalone or in a browser tab. That’s the entire job.
» (Traduction) (Résumé en français de la section trente et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«There’s no evidence Google’s ranking or indexing systems read the manifest as a signal. The cleanest external confirmation is Google’s own PWA checklist, which lists “Is installable” and “Discoverable in search” as two separate, independent checklist categories — where discoverability is defined as ordinary SEO fundamentals: “Enable search engine discovery through unique URLs, descriptive titles, meta descriptions, and structured data.” Installability (manifest-driven) and discoverability (classic SEO) are treated as parallel concerns, not one feeding the other. So: keep a valid manifest because it’s what makes the app installable — just don’t file it under SEO. » (Traduction) (Résumé en français de la section trente-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google doesn’t publish a page stating in exact words that manifest.json is excluded from ranking; this is a well-supported inference from the “no advantage” statement, the checklist’s separation of the two categories, and the manifest’s total absence from Google’s ranking-factor docs — phrase it as “no evidence it’s read,” not “confirmed ignored.” » (Traduction) (Résumé en français de la section trente-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Service workers: the one real PWA-specific SEO risk » (Traduction) (Résumé en français de la section trente-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Ici’s le fact que matters la plupart, et c’est PWA-spécifique: Google’s rendu service ne fait pas exécuter votre service worker quand il renders une page pour indexation. Le reasoning, depuis Martin Splitt: “As nous ont à assume que quelqu’un clicking on votre page depuis a SERP est a premier-time visitor, running a service worker est généralement pas going à faire beaucoup bon.” A service worker’s entier point est speeding up repeat visits depuis a cache — et Googlebot est, par design, toujours treated as a premier-time visitor, donc il y a rien pour il à speed up. Splitt à nouveau: “nous sommes pas supporting que parce que utilisateurs clicking sur votre page depuis le résultat de recherche pourrait jamais ont été là beforehand.” Mueller a confirmed ce est stable policy, pas a temporary state: “Je ne ferait pas expect il à modifier — c’est computationally expensive à exécuter service-workers dans le background comme ce pour indexation.”
«These three rep statements are relayed by SearchViu (Splitt at Google I/O 2019/2020; Mueller reported July 2023); I’ve confirmed the Splitt and Mueller quotes as exact substrings on that page but they’re a third-party relay, not a Google-owned URL. Note also that “never runs” is slightly too absolute — Google’s Splitt has indicated web workers can sometimes execute; the safe framing is “the rendering service doesn’t run service workers by design,” not “under no circumstance.” » (Traduction) (Résumé en français de la section trente-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Donc pourquoi est que a risque? Parce que votre service worker fait exécuter dans réel utilisateurs’ navigateurs, et si vous told il à servir HTML cache-premier — retourner le enregistré copy, skip le network — alors a réel repeat visitor voit a rapide mis en cache page, mais c’est a stratégie Googlebot jamais executes. Le danger est le reverse cas: a mise en cache modèle que, sous quelconque erreur or fallback condition, hands back a stale document or le offline-fallback page. Parce que rendu est stateless et le WRS treats chaque récupérer as fresh, a misconfigured mise en cache stratégie est comment a PWA ends up avec Googlebot indexation an outdated or vide offline shell au lieu de actif contenu.
Le caching-stratégie règle de thumb:
- HTML documents → network-premier (or stale-tandis que-revalidate avec a court TTL). Obtenir le actif page; utiliser le cache seulement as an offline fallback, et assurez-vous que fallback est jamais ce que a fresh explorer voudrait indexer.
- Static assets (JS, CSS, images, fonts) → cache-premier est fine et desirable — ils ne pas modifier per requête et ne sont pas le indexable document.
Comment audit il: comparer ce que Googlebot voit contre ce que a repeat visitor’s navigateur sert depuis cache. Utiliser Inspection d’URL dans Search Console (actif tester) à voir le rendu HTML Google en réalité obtient, et vérifier il contre le actif page. Si ils diverge, votre service worker or SSR setup est le premier suspect. Et watch rendu timeouts on hybrid setups — as Hamlet Batista noted depuis le dynamic-rendu era, “Rendu services ne va pas wait forever pour une page à finish chargement.” (Que spécifique article est à propos de dynamic rendu, qui Google maintenant discourages dans favor de SSR — cite le timeout principle, pas le modèle.)
HTTPS: a service-worker requirement, et séparément a tiny classement signal
Vous’ll voir PWA SEO posts imply “PWAs besoin HTTPS, et HTTPS boosts rankings, therefore PWAs sont plus SEO-friendly.” Deux vrai facts, wrongly chained.
«Fact one: service workers only run in a secure context. Per MDN: “Service workers are only available in secure contexts: this means that their document is served over HTTPS, although browsers also treat http://localhost as a secure context, to facilitate local development.” That’s a browser platform rule, not an SEO tactic — no HTTPS, no service worker, full stop. » (Traduction) (Résumé en français de la section quarante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Fact two: HTTPS is a réel Google ranking signal, but a minuscule un. Google’s propre 2014 announcement: “we’re starting to utiliser HTTPS as a ranking signal. Pour now it’s seulement a very lightweight signal — affecting fewer que 1% of global requêtes, and carrying moins weight que autre signals tel as high-quality content.”
Le point: quelconque HTTPS site obtient que même tiny signal — PWA or pas. A PWA ne fait pas obtenir supplémentaire SEO credit pour HTTPS; il simplement ne peut pas function sans il. ne pas sell HTTPS as a PWA SEO avantage.
Core Web Vitals: the un legitimate overlap
Si il y a a réel placer où “bon PWA” et “bon SEO” meet, c’est performances. Google’s PWA guidance leads avec reliability — “A fiable Progressive Web App feels rapide et dependable regardless de le network” — et Core Web Vitals sont a confirmed (si modest) facteur de classement. A well-engineered PWA que charge rapide et stays responsive va tend à score bien on Vitals.
«But read the causation carefully: it’s the engineering, not the PWA-ness. A bloated PWA — huge JS bundle, render-blocking hydration, an over-eager service worker — can easily post worse Core Web Vitals than a plain server-rendered page. The Vitals win comes from doing the performance work well, which you could do with or without a manifest. Being a PWA neither guarantees good Vitals nor grants a shortcut to them. » (Traduction) (Résumé en français de la section quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
App-like fonctionnalités are UX, pas ranking factors
Ajouter-à-home-screen, offline mode, push notifications, app-like navigation — tout genuine, valuable PWA avantages, et tout engagement/retention fonctionnalités, pas indexation or classement inputs. Google’s PWA liste de contrôle rend le split explicit par putting “installable” et “discoverable in search” dans séparé buckets.
ne pas treat “installable” as a unique, universal capability soit — il varies par
navigateur et OS, qui est un plus raison il ne peut pas être an SEO signal (Google voudrait ont
aucun consistent, cross-navigateur behavior à reward). Le beforeinstallprompt event que
lets a PWA montrer son propre custom install UI est a Chromium-seulement mechanism; per MDN’s PWA
installability guide, c’est “pas pris en charge on iOS.” On iOS Safari, installation se produit
seulement via le manual Share → Ajouter à Home Screen flow (extended à Chrome, Edge,
Firefox, et Orion on iOS 16,4+, tout de qui utiliser Apple’s requis WebKit moteur on iOS
et donc share que limitation), pas an automatic prompt. None de que changements le SEO
picture — il simplement signifie “est mon PWA installable” n’est pas a oui/aucun fact independent de qui
navigateur et OS a visitor est on.
Twitter Lite est le cas study everyone reaches pour as “proof PWAs aider SEO” — et son documented résultats sont réel (a 65% augmenter dans pages per session, 75% augmenter dans Tweets sent, 20% decrease dans bounce rate) — mais chaque un de ceux est an engagement metric. Google’s propre cas study de il jamais mentions SEO, organique recherche, or rankings à tout. Great résultat; incorrect column.
Ecommerce PWA storefronts: a court callout
«PWA storefronts add a few wrinkles worth naming, because they compound the SPA risks. Client-side routing plus faceted navigation can generate crawlable-looking URLs that all resolve to the same shell, or an explosion of parameter URLs. Cart and checkout state lives client-side and should never gate the indexable product content. And each product page must independently return real, unique HTML — the app-shell trap is most expensive exactly where you have the most pages. The fixes are the same ones from ecommerce and faceted-navigation SEO; the PWA layer doesn’t change them, it just makes the SSR/prerender discipline more important. » (Traduction) (Résumé en français de la section cinquante-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Bing and PWAs » (Traduction) (Résumé en français de la section cinquante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Worth a line: Bing has published no PWA-specific ranking or indexing guidance. Its webmaster guidelines are PWA-agnostic (general crawlability, sitemaps, robots.txt, IndexNow), and Microsoft’s extensive PWA docs are entirely about Edge install prompts, PWABuilder, and Microsoft Store packaging — distribution and installation, a separate track from web-search indexing. So for Bing, default to ordinary JS-rendering crawlability guidance; there’s no PWA exception to learn. » (Traduction) (Résumé en français de la section cinquante-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
L’essentiel
PWA SEO est JavaScript/SPA SEO plus exactly deux additions: ignore le manifest as an SEO entrée (c’est pour installability), et configurer le service worker donc il jamais traps Googlebot dans a stale or offline cache. Obtenir ceux correct et a PWA indexes exactly comme quelconque autre well-built site — aucun bonus, aucun penalty, simplement le même règles.
AI summary
A condensed prendre on the Avancé version:
- A PWA est a site web premier. c’est a
manifest.json(installability) + a service worker (offline/mise en cache) layered on qu’est-ce que presque toujours a JS/SPA site. Tout le JavaScript/SPA SEO règles appliquer unchanged. - Aucun classement advantage. Google’s John Mueller: PWAs “currently ne pas ont quelconque advantage dans la recherche Google.” “Going PWA” ne fait pas améliorer rankings.
- Manifest.json est SEO-irrelevant. Il contrôle install prompts, icons,
start_url,display— il y a aucun evidence le classement systèmes lire il. Google’s PWA liste de contrôle listes “installable” et “discoverable in search” as séparé categories. - Le un réel risque est le service worker. Google’s renderer ne fait pas exécuter service workers quand indexation (il treats chaque explorer as a premier-time visit), donc a cache-premier HTML stratégie peut indexer a stale or offline shell. Utiliser network-premier pour HTML, cache-premier pour static assets.
- HTTPS ≠ a PWA SEO perk. c’est a difficile requirement pour service workers (secure context) et séparément a “very lightweight” classement signal chaque HTTPS site obtient. ne pas chain le deux.
- Core Web Vitals est le seulement legit overlap — et c’est le performances engineering, pas le PWA étiquette. A bloated PWA peut score pire.
- App-like fonctionnalités (install, offline, push) sont engagement, pas classement. Twitter
Lite’s famous gains sont engagement metrics; que cas study jamais mentions SEO.
Installability itself varies par navigateur/OS (iOS Safari a aucun
beforeinstallprompt, seulement manual Ajouter à Home Screen) — un plus raison il ne peut pas être a classement signal. - Bing a aucun PWA-spécifique guidance; par défaut à ordinary JS crawlability.
«## Official documentation » (Traduction) (Résumé en français de la section soixante-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Primary-source material on PWAs, rendering, and the facts this article rests on. » (Traduction) (Résumé en français de la section soixante-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google / web.dev » (Traduction) (Résumé en français de la section soixante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- What are Progressive Web Apps? — Google’s definition and the three pillars (Capable, Reliable, Installable). » (Traduction) (Résumé en français de la section soixante-huit, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- What makes a good Progressive Web App? (PWA checklist) — separates “Is installable” from “Discoverable in search” as distinct categories. » (Traduction) (Résumé en français de la section soixante-huit, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- Service workers (Learn PWA) — caching strategies and the service-worker lifecycle. » (Traduction) (Résumé en français de la section soixante-huit, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- Understand JavaScript SEO Basics — the app-shell failure mode Google documents. » (Traduction) (Résumé en français de la section soixante-huit, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.) «- Building Indexable Progressive Web Apps (2016) — Google’s original PWA-indexability post. » (Traduction) (Résumé en français de la section soixante-huit, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.) «- Twitter Lite case study — the engagement metrics (note: no SEO/organic claims anywhere in it). » (Traduction) (Résumé en français de la section soixante-huit, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.) «- HTTPS as a ranking signal (2014) — the “very lightweight signal” statement. » (Traduction) (Résumé en français de la section soixante-huit, sous-partie huit : le texte source est conservé pour vérification lors de la relecture francophone.)
«MDN / platform
» (Traduction) (Résumé en français de la section soixante-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Service Worker API — the secure-context (HTTPS) requirement.
» (Traduction) (Résumé en français de la section soixante-neuf, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Making PWAs installable — browser/OS installability differences, including why beforeinstallprompt isn’t supported on iOS.
» (Traduction) (Résumé en français de la section soixante-neuf, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«Bing / Microsoft (no PWA-specific ranking guidance exists — these are install/distribution docs) » (Traduction) (Résumé en français de la section soixante-dix, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Bing Webmaster Guidelines — general crawlability; PWA-agnostic. » (Traduction) (Résumé en français de la section soixante-dix, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Overview of Progressive Web Apps (PWAs) — Edge install and distribution focus. » (Traduction) (Résumé en français de la section soixante-dix, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Quotes from the source » (Traduction) (Résumé en français de la section soixante-treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
On-le-record statements. Où a citation est relayed par a tiers plutôt que a Google-owned URL, le caveat dit donc.
Google — aucun PWA ranking advantage
«- “PWAs currently don’t have any advantage in Google Search, and as far as I know, there are no plans to change this.” — John Mueller, Google, Search Central office-hours (Nov 2021). Read the coverage » (Traduction) (Résumé en français de la section soixante-seize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “By default, saying going to a PWA will make your rankings better — I don’t think that is the case.” — John Mueller, same session. Read the coverage » (Traduction) (Résumé en français de la section soixante-seize, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- “So just the fact that one of your competitors has moved from one framework to another, and has seen an improvement in search, that framework change from my point of view wouldn’t be responsible for that.” — John Mueller, same session. Read the coverage » (Traduction) (Résumé en français de la section soixante-seize, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
Le three Mueller citations sont relayed par Moteur de recherche Journal et independently par Moteur de recherche Roundtable covering le même Nov 2021 office-hours session — reported-official, pas a principal Google URL.Google — ce que a PWA est, et le app-shell risque
«- “Progressive Web Apps (PWA) are web apps built and enhanced with modern APIs to provide enhanced capabilities while still reaching any web user on any device with a single codebase.” — web.dev. Jump to quote » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “Some JavaScript sites may use the app shell model where the initial HTML does not contain the actual content and Google needs to execute JavaScript before being able to see the actual page content that JavaScript generates.” — Google Search Central. Jump to quote » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- “Enable search engine discovery through unique URLs, descriptive titles, meta descriptions, and structured data.” — web.dev PWA checklist, “Discoverable in search.” Jump to quote » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
Google — service workers and indexation (relayed)
«- “As we have to assume that someone clicking on your page from a SERP is a first-time visitor, running a service worker is usually not going to do much good.” — Martin Splitt, Google. Read the coverage » (Traduction) (Résumé en français de la section quatre-vingt-un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “We’re not supporting that because users clicking onto your page from the search result might never have been there beforehand.” — Martin Splitt, Google (Google I/O 2019). Read the coverage » (Traduction) (Résumé en français de la section quatre-vingt-un, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- “I wouldn’t expect it to change — it’s computationally expensive to run service-workers in the background like this for indexing.” — John Mueller, Google (reported July 2023). Read the coverage » (Traduction) (Résumé en français de la section quatre-vingt-un, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
Ces three sont relayed par SearchViu (Splitt à Google Je/O 2019/2020; Mueller July 2023). Je confirmed le Splitt et Mueller citations as exact substrings on que page, mais c’est a tiers relay, pas a Google-owned URL.HTTPS: plateforme requirement vs. classement signal
«- “Service workers are only available in secure contexts: this means that their document is served over HTTPS, although browsers also treat http://localhost as a secure context, to facilitate local development.” — MDN, Service Worker API. Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “we’re starting to use HTTPS as a ranking signal. For now it’s only a very lightweight signal — affecting fewer than 1% of global queries, and carrying less weight than other signals such as high-quality content.” — Google, “HTTPS as a ranking signal” (2014). Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
The 2014 HTTPS quote is confirmed via a prior verified réussir in ce repo’s propre HTTPS brief; Google’s blog archive resisted a direct re-fetch ce session, so spot-check the deep lien avant treating as final.Installability varies by navigateur/OS
- “This is not supported on iOS.”
— MDN, on le
beforeinstallpromptcustom-install-prompt event. Jump à citation
beforeinstallprompt pour a custom install UI.On rendu timeouts (dated context)
«- “Rendering services won’t wait forever for a page to finish loading.” — Hamlet Batista, Search Engine Land. Read the article » (Traduction) (Résumé en français de la section quatre-vingt-dix, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Depuis le dynamic-rendu era; dynamic rendu est maintenant discouraged par Google dans favor de SSR. Cite le timeout principle, pas le modèle.Devrait I go PWA — and ce que va it do pour le SEO?
A rapide walk via the questions personnes en réalité bring to ce topic.
“nous sommes considering a PWA. Va il aider notre SEO?”
- Aucun inherent classement avantage — Google dit PWAs obtenir aucun advantage dans Recherche. → Construire a PWA pour le utilisateur avantages (installable, offline, rapide repeat charge), pas pour rankings. → Il ne va pas hurt SEO soit, tant que votre rendu et service worker sont définir up correctement (continuer ci-dessous).
“We’re building/have a PWA. Is my content actually indexable?”
- Fait le initial HTML contenir le contenu réel (SSR/prerender), or est il an vide
app shell filled par JS?
- Vide shell, aucun SSR → ce est le app-shell trap. Ajouter SSR or prerendering avant worrying à propos de n’importe quoi PWA-spécifique. (Même corriger as quelconque SPA.)
- SSR/prerender dans placer → bon; déplacer à le service worker.
“How should my service worker cache pages?”
- HTML documents → network-premier (or stale-tandis que-revalidate, court TTL). Jamais cache-premier pour HTML.
- Static assets (JS/CSS/images/fonts) → cache-premier est fine et bon.
- Offline fallback page → assurez-vous il peut jamais être le version a fresh explorer indexes.
“My PWA lost rankings/traffic after launch. Where do I look?”
- Exécuter Inspection d’URL (actif tester) dans Search Console — est Google seeing le réel page or a stale/offline/vide un?
- Si stale or vide → suspect le service-worker mise en cache stratégie (cache-premier HTML) or a manquant SSR étape.
- Si le contenu’s là mais rankings encore dropped → regarder à ce que sinon le rebuild modifié: lien internes, contenu, redirections, speed. Le PWA étiquette est rarely le causer.
“Faire Je besoin à faire n’importe quoi special avec le manifest pour SEO?”
- Aucun. Garder il valide pour installability; il a aucun SEO role. Spend le effort on URLs, titles, meta, données structurées, et Core Web Vitals à la place.
PWA SEO checklist
Scannable réussir pour keeping a Progressive Web App crawlable et indexable:
- Contenu réel est serveur-rendu or prerendered — pas an vide app shell filled par JavaScript après charger.
- Chaque route a a réel, unique URL via le History API (aucun hash/
#!routing). - Chaque route renvoie son propre canonical, titre, et meta description dans le rendu DOM.
- Service worker sert HTML network-premier (or stale-tandis que-revalidate, court TTL) — jamais cache-premier pour HTML documents.
- Static assets (JS/CSS/images/fonts) peut être cache-premier; c’est fine.
- Le offline-fallback page peut jamais être ce que a fresh explorer indexes.
- Inspection d’URL (actif tester) montre Google le réel, actuel page — comparé contre le actif page.
- Le manifest est valide pour installability, mais vous êtes pas treating il as an SEO lever.
- Installability est testé per navigateur/OS, pas assumed universal (iOS Safari a aucun
beforeinstallprompt; c’est manual Ajouter à Home Screen) — et none de que variance est treated as an SEO problème. - Servi over HTTPS (requis pour service workers anyway).
- Core Web Vitals sont sain — vérifier le JS bundle et hydration ne sont pas dragging LCP/INP bas.
- Ecommerce: produit pages chaque retourner réel unique HTML; faceted-nav/client routing n’est pas spawning shell-seulement or infinite parameter URLs.
PWA SEO — cheat sheet
Fait it affecter SEO?
| PWA component | Ce que il fait | SEO effect |
|---|---|---|
manifest.json | Install prompt, icons, start_url, display | None — pas lire par classement systèmes |
| Service worker | Offline, background mise en cache, push | Risque seulement — peut servir Googlebot stale/offline HTML si misconfigured |
| HTTPS | Requis pour service workers (secure context) | Tiny classement signal — chaque HTTPS site obtient il, PWA or pas |
| Ajouter-à-home-screen / push / offline | App-like UX | None — engagement, pas classement |
| Core Web Vitals | Charger/interactivity/stability | Réel (modest) facteur de classement — c’est le engineering, pas le PWA étiquette |
| Underlying JS/SPA rendu | Comment lune page est construit | Le réel battleground — SSR/prerender, réel URLs, per-route metadata |
Service-worker mise en cache by resource type
«| Resource | Strategy | Why | | --- | --- | --- | | HTML documents | Network-first / stale-while-revalidate | Google never runs your SW; it must see live HTML | | JS / CSS | Cache-first | Static, versioned, not the indexable doc | | Images / fonts | Cache-first | Static, safe to cache aggressively | | Offline fallback | Serve only truly offline | Must never be the indexed version | » (Traduction) (Résumé en français de la section cent douze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Fast facts » (Traduction) (Résumé en français de la section cent treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Google gives PWAs no ranking advantage (Mueller). » (Traduction) (Résumé en français de la section cent treize, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Google’s renderer does not run service workers when indexing. » (Traduction) (Résumé en français de la section cent treize, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- HTTPS ranking signal: “fewer than 1% of global queries” (Google, 2014). » (Traduction) (Résumé en français de la section cent treize, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- Bing: no PWA-specific guidance — treat as any JS site. » (Traduction) (Résumé en français de la section cent treize, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Incident playbook: search traffic dropped after a PWA release » (Traduction) (Résumé en français de la section cent seize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«1. Freeze the release path. Stop further service-worker and routing deployments while you preserve the failing production state and release identifiers. 2. Confirm scope. Segment the drop by template, directory, device, and deployment time. A PWA-wide failure should not be assumed from one broken route. 3. Compare three responses. Save the raw HTTP response, a fresh rendered page with storage cleared, and a returning-user page controlled by the service worker. Check the title, canonical, robots directives, primary copy, links, and status behavior. 4. Inspect registration and cache policy. In DevTools Application, identify the active worker, its scope, waiting versions, cache names, and navigation handler. Confirm HTML navigations are not trapped behind an old cache-first response. 5. Bypass the worker. Unregister it or use DevTools’ bypass option, reload, and repeat the affected route. If the defect disappears, the worker or its cache is the likely boundary; if it remains, continue as an ordinary JavaScript SEO incident. 6. Restore a safe navigation path. Roll back the worker or switch document requests to network-first with an explicit offline fallback. Do not delete all caches blindly if users depend on offline data. 7. Validate and monitor. Test a clean browser, an updating browser, and an offline browser. Then inspect representative URLs and watch search performance through the normal recrawl window. » (Traduction) (Résumé en français de la section cent dix-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Treating the manifest as an SEO file » (Traduction) (Résumé en français de la section cent vingt, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Stuffing mots-clés dans name, short_name, or icon metadata ne fait pas faire pages plus
indexable. Utiliser le manifest pour installation behavior et put recherche-pertinent contenu
dans crawlable HTML avec ordinary titles, liens, et canonicals.
Mise en cache HTML forever
A cache-premier règle que treats navigations comme immutable assets peut garder old copy, canonicals, or robots directives alive après a release. Cache versioned JS, CSS, et images aggressively; donner HTML a network-aware mettre à jour stratégie.
Returning le offline shell as a successful page
Diffusion le même offline app shell pour chaque indisponible URL peut regarder comme nombreux différent URLs returning identical contenu pauvre. Garder le offline experience clairement séparé depuis normal navigation et ne faites pas pretend a manquant document est la requêteed page.
Hiding navigation behind non-link contrôle
A button que changements client state peut fonctionner dans le app pendant que providing aucun crawlable
<a href> chemin à le destination. Utiliser réel liens pour routes moteur de recherches et utilisateurs
besoin à suivre, alors enhance le transition avec JavaScript.
Testing seulement as a warm returning utilisateur
A developer navigateur avec an installed worker et populated cache peut mask a broken premier visit. Tester clean storage, an upgrade depuis le previous worker, et a returning visit. Ceux sont distinct PWA states.
Exemple: asset mise en cache and document mise en cache besoin différent rules
Le suivant simplified service-worker logic montre le boundary. Hashed assets peut être cache-premier; document navigations devrait essayer le network avant falling back.
self.addEventListener('fetch', event => {
const request = event.request;
if (request.mode === 'navigate') {
event.respondWith(
fetch(request).catch(() => caches.match('/offline/'))
);
return;
}
if (['script', 'style', 'image', 'font'].includes(request.destination)) {
event.respondWith(
caches.match(request).then(cached => cached || fetch(request))
);
}
});Le exact production policy dépend on mettre à jour et offline requirements, mais le SEO lesson est stable: HTML n’est pas le même kind de immutable asset as a fingerprinted bundle.
Exemple: crawlable route versus app-seulement state
<!-- Search engines and users get a real destination. -->
<a href="/products/running-shoes/">Running shoes</a>
<!-- This changes app state but exposes no destination URL. -->
<button onclick="showCategory('running-shoes')">Running shoes</button>A PWA peut intercept the lien pour an app-like transition sans removing its crawlable URL.
Prompt: examiner a service-worker mise en cache strategy
Paste le worker source et a route inventory. Ne faites pas inclure secrets or privé API réponses.
Audit this service worker for search and freshness risks. Classify each fetch route as
document navigation, versioned static asset, API response, media, or offline fallback.
For each route, state the current strategy, the stale-content failure mode, and a safer
strategy. Pay special attention to HTML served cache-first, redirect handling, offline
shells returned for real URLs, cache-version cleanup, and worker scope. Quote the exact
code that creates each finding. Do not claim that PWA features provide a ranking boost.
Route inventory:
[PASTE ROUTES AND CONTENT TYPES]
Service worker:
[PASTE SOURCE]Prompt: construire a PWA release QA matrix
Create a release QA matrix for this PWA. Cover a clean first visit, a returning visit
with the current worker, an upgrade from the previous worker, offline navigation, and a
worker-bypassed visit. For each state, list how to reproduce it and what to compare in
the raw response and rendered page: status behavior, title, canonical, robots, primary
content, internal links, and freshness. Use only the routes and requirements I provide;
flag missing evidence instead of inventing expected results.
Routes and requirements:
[PASTE ROUTE | EXPECTED CONTENT | OFFLINE REQUIREMENT | RELEASE CHANGE] «## The SHELL framework for PWA SEO reviews » (Traduction) (Résumé en français de la section cent quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- S: Server response. A usable first response, or a deliberate rendering strategy, must expose the page rather than only an empty app shell. » (Traduction) (Résumé en français de la section cent quarante-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- H: Hrefs. Important routes use crawlable links with stable URLs, not controls that exist only as client-side state. » (Traduction) (Résumé en français de la section cent quarante-neuf, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- E: Expected metadata. Titles, canonicals, robots directives, and structured data remain correct in raw and rendered states. » (Traduction) (Résumé en français de la section cent quarante-neuf, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- L: Live documents. Navigation requests have a freshness policy appropriate for HTML; stale cached documents do not silently outlive releases. » (Traduction) (Résumé en français de la section cent quarante-neuf, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- L: Lifecycle tests. QA covers install, activate, update, waiting-worker, offline, and bypass states instead of one warm developer session. » (Traduction) (Résumé en français de la section cent quarante-neuf, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«The framework keeps PWA-specific review narrow. If all five pass, most remaining work is ordinary JavaScript, performance, and indexability QA. » (Traduction) (Résumé en français de la section cent cinquante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
DevTools Console: inspect le active worker et caches
Run ce in le navigateur DevTools Console on the PWA. It reports registrations and cache noms sans modification soit un.
const registrations = await navigator.serviceWorker.getRegistrations();
console.table(registrations.map(r => ({
scope: r.scope,
active: r.active?.scriptURL || '',
waiting: r.waiting?.scriptURL || '',
installing: r.installing?.scriptURL || ''
})));
console.log('Caches:', await caches.keys());DevTools Console: comparer a network récupérer with a mis en cache réponse
const path = location.pathname;
const network = await fetch(path, { cache: 'no-store' });
const cached = await caches.match(path);
console.table({
network: { status: network.status, type: network.type },
cache: { found: Boolean(cached), status: cached?.status ?? '' }
});Le résultat proves que une réponse exists dans a cache; il ne fait pas prove qui récupérer handler va win pour chaque navigation. Confirmer routing dans le worker source et le Network panel.
Regex: trouver risky cache-first navigation handlers
Utiliser ce as a examiner aid, pas a parser. It semble pour a navigation condition followed nearby by a cache lookup.
request\.mode\s*===?\s*['"]navigate['"][\s\S]{0,500}caches\.(?:match|open)\s*\( Valider a PWA SEO release
| Tester à exécuter | Attendu résultat | Échec interpretation | Monitoring window | Rollback trigger |
|---|---|---|---|---|
| Récupérer representative routes avec an vide navigateur profile | Chaque route charge son prévu contenu et metadata on le premier visit | Le app dépend on a pre-existing worker or cache | Chaque release | Roll back si critical routes échouer pour nouveau utilisateurs |
| Upgrade depuis le previous production worker sans clearing storage | Le nouveau worker activates predictably et documents refresh à le released version | Lifecycle or cache-version logic strands utilisateurs on old HTML | Release rehearsal et deployment day | Roll back si le prior version ne peut pas mettre à jour safely |
| Comparer raw HTML, rendu DOM, et worker-bypassed rendu | Titles, canonicals, robots directives, principal copy, et liens remain equivalent dans meaning | Client rendu or worker interception changements recherche-critical sortie | Avant deployment et après deployment | Roll back si pages become non-indexable or lose principal contenu |
| Navigate online, alors repeat offline | Online requêtes recevoir actif documents; offline behavior est explicit et limited à son designed scope | An offline shell or stale cache est masking réel routes | Chaque worker modifier | Roll back si online utilisateurs recevoir offline or obsolete contenu |
| Requête a nonexistent URL online | La réponse ne fait pas masquerade as a valide contenu page avec le générique app shell | Catch-tous routing crée soft-404 behavior | Chaque routing modifier | Roll back si arbitrary URLs retourner indexable shell contenu |
Testez vos connaissances: PWA SEO
Five rapide questions on comment Progressive Web Apps interact avec recherche. Pick an réponse pour chaque, alors vérifier.
Ressources utiles
Mon connexe writing
- JavaScript SEO Problèmes & Meilleur Practices — le rendu foundation chaque PWA sits on; app-shell, SSR, et ce que Google’s renderer fait et ne fait pas faire.
- Le Beginner’s Guide à SEO technique — où rendu et crawlability fit dans le bigger picture.
Mon speaking
- Comment Recherche Fonctionne (SlideShare) — mon walkthrough de exploration, rendu, indexation, et classement, le pipeline a PWA a à réussir via. (Standing disclaimer: “This is my understanding of systems… not going to be 100% complete or accurate.”)
Depuis autour le industry
- Google: Progressive Web Apps ne pas Classer Meilleur Que Regular Sites (Moteur de recherche Journal) — le Mueller office-hours coverage que anchors le myth-bust.
- Google Dit Progressive Web Apps (PWAs) Ont Aucun Advantage Dans Recherche (Moteur de recherche Roundtable) — independent écrire-up de le même session.
- Service Worker – Ce que SEOs Besoin à Know (SearchViu) — le Splitt/Mueller statements on pourquoi le renderer skips service workers.
- Comprendre JavaScript SEO Basics (Google) — le app-shell échec mode, documented à le source.
- Ce que rend a bon Progressive Web App? (PWA liste de contrôle) (web.dev) — installability et discoverability as séparé categories.
- Twitter Lite cas study (web.dev) — le réel engagement numbers, et proof ils étaient jamais à propos de SEO.
Videos
- Recherche Google Central (YouTube) — Martin Splitt’s JavaScript SEO et rendu explainers cover le exact pipeline (explorer → rendre → indexer) a PWA dépend on, notamment comment le stateless renderer handles JS. Channel
Journal des modifications
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.