Guide PWA SEO
Progressive Web App SEO — pourquoi "going PWA" doesn't améliorer rankings, pourquoi the manifest.json is SEO-irrelevant, how a misconfigured service worker peut serve Googlebot a stale cache, and où Core Web Vitals and HTTPS en réalité (and don't) overlap with SEO.
Langues
A PWA is a website enhanced with a manifest and a service worker — it's encore a normal (usually JavaScript/SPA) site to Google, with aucun inherent ranking advantage. The manifest.json is SEO-irrelevant (it contrôle installability, pas indexation). The un réel PWA-specific risk is the service worker: Google's renderer doesn't run service workers quand indexation, so a cache-first HTML strategy peut hand Googlebot a stale or offline page. Fix que with network-first pour HTML, and the rest is ordinary JS/SPA SEO.
Evidence for this claim A progressive web app is still a web application; installability features do not replace indexable HTML and URLs. Scope: Current official or standards documentation. Confidence: high · Verified: web.dev: Progressive web apps Evidence for this claim JavaScript applications must expose crawlable links, meaningful content, metadata, and status behavior to Google. Scope: Current official or standards documentation. Confidence: high · Verified: Google: JavaScript SEO basicsTL;DR — A PWA (Progressive Web App) is a normal website with two extras bolted on: a manifest que lets personnes install it to leur home screen, and a service worker que peut faire it fonctionner offline. To Google it’s encore simplement a website — going PWA fait pas boost votre rankings. The un chose que peut en réalité hurt vous is a badly set-up service worker que montre Google an old, mis en cache page au lieu de votre live 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, and colors, so a visitor peut tap “Add to Home Screen” and obtenir an app-style icon and splash screen. - A service worker — a bit of JavaScript que runs in the background and peut cache fichiers so le site loads fast on repeat visits and même fonctionne offline.
That’s it. Underneath, a PWA is almost toujours a regular JavaScript website (React, Vue, Angular, and so on). It’s a normal site wearing an app costume.
The big myth to bust
The la plupart courant chose personnes believe is: “Si we turn our site into a PWA, we’ll rank meilleur.” Google has said plainly que ce isn’t vrai. Google’s John Mueller put it directement: PWAs “currently don’t have any advantage in Google Search.” Là is aucun “PWA bonus” in the ranking systems.
The manifest fichier doesn’t aider SEO soit. It contrôle how the app installs — the icon, the nom, the splash screen — none of qui Google reads quand deciding how to rank vous.
The un chose que peut en réalité hurt
The service worker is the partie to faites attention with. Parce que it peut serve a mis en cache (enregistré) copy of votre pages, a bad setup peut fin up showing Google a stale or même blank “you’re offline” version of une page au lieu de the réel, up-to-date un. That’s how a PWA loses trafic après launch — pas parce que it “became a PWA,” but parce que the mise en cache was pointed the incorrect façon.
Ce que to en réalité do
- Assurez-vous votre réel page content loads pour moteur de recherches, pas simplement an vide shell que fills in with JavaScript afterward.
- Définir votre service worker so it récupère fresh HTML from the network premier, and seulement falls back to the cache pour speed on choses comme images and stylesheets.
- Garder the basics correct: réel, unique URLs; a bon title and meta description on every page; a fast, reliable experience.
Being a PWA is great pour votre utilisateurs — installable, fast, offline-friendly. Simplement don’t expect it to déplacer vous up in Google, and don’t let the service worker feed Google the incorrect page. The Avancé tab has the mechanics, the mise en cache strategies, and the quotes.
Evidence for this claim A progressive web app is still a web application; installability features do not replace indexable HTML and URLs. Scope: Current official or standards documentation. Confidence: high · Verified: web.dev: Progressive web apps Evidence for this claim JavaScript applications must expose crawlable links, meaningful content, metadata, and status behavior to Google. Scope: Current official or standards documentation. Confidence: high · Verified: Google: JavaScript SEO basicsTL;DR — A PWA is a manifest + a service worker layered on top of ce que is almost toujours a JS/SPA site — so the rendering rules from JavaScript/SPA SEO appliquer unchanged, plus two PWA-specific concerns. Google donne PWAs aucun ranking advantage (Mueller). The
manifest.jsongoverns installability, pas indexation, and there’s aucun evidence the ranking systems lire it. The service worker is the réel risk: Google’s renderer ne fait pas run service workers quand indexation, so a cache-first HTML strategy peut index a stale or offline shell — utiliser network-first pour HTML, cache-first pour static assets. HTTPS is a hard requirement pour service workers and separately a tiny ranking signal; don’t chain ceux into “PWAs rank better.” Core Web Vitals is the seulement legitimate overlap, and it’s the engineering, pas the PWA étiquette.
A PWA is a website premier
The unique la plupart utile frame: a Progressive Web App is a normal website with two choses ajouté on top. Per Google’s propre definition, PWAs “are web apps construit and enhanced with modern APIs to provide enhanced capabilities pendant que encore reaching quelconque web utilisateur on quelconque device with a unique codebase.” The three pillars Google noms are Capable, Reliable, and Installable — remarque que none of the three is “rankable.”
Architecturally, que codebase is almost toujours a JavaScript framework running a
single-page-application pattern. Qui signifie: everything que governs JS/SPA
indexability governs PWA indexability, with aucun modification. Réel <a href> liens
and History-API routing (pas hash fragments) pour addressability; rendu côté serveur
or prerendering pour content availability; per-route canonical, title, and meta in the
rendered DOM. Si you’ve lire the JavaScript SEO and SPA SEO material, vous déjà know
90% of PWA SEO — the app-shell échec mode, in particulier, is un Google explicitly
documents: “Some JavaScript sites may utiliser the app shell model où the initial HTML
ne fait pas contain the réel content and Google nécessite to execute JavaScript avant
being able to voir the réel page content que JavaScript generates.” A PWA que
ships an vide shell with aucun SSR/prerender inherits que problem directement.
So the honest scope of a PWA-specific SEO article is petit: the manifest, and the service worker. Everything sinon is JS/SPA SEO wearing a manifest.
The core myth: “going PWA” ne fait pas améliorer rankings
Ce is the headline. Google has been unusually direct à propos de it. John Mueller, in a Search Central office-hours session, said PWAs “currently don’t have quelconque advantage in Recherche Google, and as far as I know, là are aucun plans to modifier ce,” and — asked si converting to a PWA voudrait aider — “By par défaut, saying going to a PWA va faire votre rankings meilleur — I don’t think que is the cas.”
He aussi pre-empted the usual counter-argument, que “our competitor went PWA and leur rankings jumped.” His answer: “So simplement the fact que un of votre competitors has déplacé from un framework to un autre, and has seen an improvement in search, que framework modifier from my point of view wouldn’t be responsible pour que.” And on why: “Ces are essentially différent façons of making a website… pour the la plupart partie, we voir ces as normal HTML pages.”
Où PWA relaunches do correlate with ranking lifts, it’s the confounds que come with quelconque big rebuild: modernized maillage interne, refreshed and expanded content, genuine speed improvements, and usually a marketing push tied to the relaunch. None of que exige the PWA étiquette. Si vous rebuild a 10-to-15-year-old organically-grown site, vous modifier a dozen choses at une fois — attributing le résultat to “PWA” is a correlation error.
Mueller’s office-hours statements ci-dessus are relayed by Moteur de recherche Journal and independently by Moteur de recherche Roundtable covering the même Nov 2021 session; I have pas replayed the original video, so treat les as reported-official.Manifest.json: installability ≠ indexability
The manifest.json fichier exists to faire votre 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 si the app opens
standalone or in a navigateur tab. That’s the entier job.
There’s aucun evidence Google’s ranking or indexation systems lire the manifest as a signal. The cleanest external confirmation is Google’s propre PWA checklist, qui listes “Is installable” and “Discoverable in search” as two separate, independent checklist categories — où discoverability is défini as ordinary SEO fundamentals: “Enable moteur de recherche discovery via unique URLs, descriptive titles, meta descriptions, and données structurées.” Installability (manifest-driven) and discoverability (classic SEO) are treated as parallel concerns, pas un feeding the autre. So: garder a valid manifest parce que it’s ce que rend the app installable — simplement don’t fichier it sous SEO.
Google doesn’t publish une page stating in exact words que manifest.json is excluded from ranking; ce 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,” pas “confirmed ignored.”Service workers: the un réel PWA-specific SEO risk
Here’s the fact que matters la plupart, and it’s PWA-specific: Google’s rendering service ne fait pas run votre service worker quand it renders une page pour indexation. The reasoning, from Martin Splitt: “As we have to assume que someone clicking on votre page from a SERP is a first-time visitor, running a service worker is usually pas going to do beaucoup bon.” A service worker’s whole point is speeding up repeat visits from a cache — and Googlebot is, by design, toujours treated as a first-time visitor, so there’s nothing pour it to speed up. Splitt à nouveau: “We’re pas supporting que parce que utilisateurs clicking onto votre page from the résultat de recherche pourrait jamais have been là beforehand.” Mueller has confirmed ce is stable policy, pas a temporary state: “I wouldn’t expect it to modifier — it’s computationally expensive to run service-workers in the background comme ce pour indexation.”
Ces 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 que page but they’re a third-party relay, pas a Google-owned URL. Remarque aussi que “never runs” is slightly aussi absolute — Google’s Splitt has indicated web workers peut parfois execute; the safe framing is “the rendering service doesn’t run service workers by design,” pas “under no circumstance.”So pourquoi is que a risk? Parce que votre service worker fait run in réel utilisateurs’ navigateurs, and si vous told it to serve HTML cache-first — retourner the enregistré copy, skip the network — alors a réel repeat visitor sees a fast mis en cache page, but that’s a strategy Googlebot jamais executes. The danger is the reverse cas: a mise en cache pattern que, sous quelconque error or fallback condition, hands back a stale document or the offline-fallback page. Parce que rendering is stateless and the WRS treats every récupérer as fresh, a misconfigured mise en cache strategy is how a PWA ends up with Googlebot indexation an outdated or vide offline shell au lieu de live content.
The caching-strategy rule of thumb:
- HTML documents → network-first (or stale-while-revalidate with a short TTL). Obtenir the live page; utiliser the cache seulement as an offline fallback, and assurez-vous que fallback is jamais ce que a fresh explorer voudrait index.
- Static assets (JS, CSS, images, fonts) → cache-first is fine and desirable — ils don’t modifier per requête and aren’t the indexable document.
How to audit it: comparer ce que Googlebot voit contre ce que a repeat visitor’s navigateur sert from cache. Utiliser Inspection d’URL in Search Console (live tester) to voir the rendered HTML Google en réalité obtient, and vérifier it contre the live page. Si ils diverge, votre service worker or SSR setup is the premier suspect. And watch rendering timeouts on hybrid setups — as Hamlet Batista noted from the dynamic-rendering era, “Rendering services won’t wait forever pour une page to finish chargement.” (Que spécifique article is à propos de dynamic rendering, qui Google now discourages in favor of SSR — cite the timeout principle, pas the pattern.)
HTTPS: a service-worker requirement, and separately a tiny ranking signal
You’ll voir PWA SEO posts imply “PWAs besoin HTTPS, and HTTPS boosts rankings, therefore PWAs are plus SEO-friendly.” Two vrai facts, wrongly chained.
Fact un: service workers seulement run in a secure context. Per MDN: “Service workers are seulement disponible in secure contexts: ce signifie que leur document is served over HTTPS, although navigateurs aussi treat http://localhost as a secure context, to facilitate local development.” That’s a navigateur platform rule, pas an SEO tactic — aucun HTTPS, aucun service worker, complet arrêter.
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.”
The point: quelconque HTTPS site obtient que même tiny signal — PWA or pas. A PWA doesn’t obtenir supplémentaire SEO credit pour HTTPS; it simplement can’t function sans it. Don’t sell HTTPS as a PWA SEO benefit.
Core Web Vitals: the un legitimate overlap
Si there’s a réel placer où “good PWA” and “good SEO” meet, it’s performances. Google’s PWA guidance leads with reliability — “A reliable Progressive Web App feels fast and dependable regardless of the network” — and Core Web Vitals are a confirmed (si modest) ranking factor. A well-engineered PWA que loads fast and stays responsive va tend to score bien on Vitals.
But lire the causation carefully: it’s the engineering, pas the PWA-ness. A bloated PWA — huge JS bundle, render-blocking hydration, an over-eager service worker — peut easily post worse Core Web Vitals que a plain server-rendered page. The Vitals win comes from doing the performances fonctionner bien, qui vous pourrait do with or sans a manifest. Being a PWA neither guarantees bon Vitals nor grants a shortcut to les.
App-like fonctionnalités are UX, pas ranking factors
Add-to-home-screen, offline mode, push notifications, app-like navigation — tout genuine, valuable PWA benefits, and tout engagement/retention fonctionnalités, pas indexation or ranking inputs. Google’s PWA checklist rend the split explicit by putting “installable” and “discoverable in search” in separate buckets.
Don’t treat “installable” as a unique, universal capability soit — it varies by
navigateur and OS, qui is un plus raison it can’t be an SEO signal (Google voudrait have
aucun consistent, cross-browser behavior to reward). The beforeinstallprompt event que
lets a PWA montrer its propre custom install UI is a Chromium-only mechanism; per MDN’s PWA
installability guide, it’s “not supported on iOS.” On iOS Safari, installation se produit
seulement via the manual Share → Ajouter to Home Screen flow (extended to Chrome, Edge,
Firefox, and Orion on iOS 16,4+, tout of qui utiliser Apple’s requis WebKit engine on iOS
and so share que limitation), pas an automatic prompt. None of que changements the SEO
picture — it simplement signifie “is my PWA installable” isn’t a yes/aucun fact independent of qui
navigateur and OS a visitor is on.
Twitter Lite is the cas study everyone reaches pour as “proof PWAs help SEO” — and its documented results are réel (a 65% augmenter in pages per session, 75% augmenter in Tweets sent, 20% decrease in bounce rate) — but every un of ceux is an engagement metric. Google’s propre cas study of it jamais mentions SEO, organic search, or rankings at tout. Great result; incorrect column.
Ecommerce PWA storefronts: a short callout
PWA storefronts ajouter a few wrinkles worth naming, parce que ils compound the SPA risks. Client-side routing plus faceted navigation peut generate crawlable-looking URLs que tout resolve to the même shell, or an explosion of parameter URLs. Cart and checkout state lives client-side and devrait jamais gate the indexable product content. And chaque product page doit independently retourner réel, unique HTML — the app-shell trap is la plupart expensive exactly où vous have the la plupart pages. The fixes are the même ones from ecommerce and faceted-navigation SEO; the PWA couche doesn’t modifier les, it simplement rend the SSR/prerender discipline plus important.
Bing and PWAs
Worth a line: Bing has publié aucun PWA-specific ranking or indexation guidance. Its webmaster guidelines are PWA-agnostic (general crawlability, sitemaps, robots.txt, IndexNow), and Microsoft’s extensive PWA docs are entirely à propos de Edge install prompts, PWABuilder, and Microsoft Store packaging — distribution and installation, a separate track from web-search indexation. So pour Bing, par défaut to ordinary JS-rendering crawlability guidance; there’s aucun PWA exception to apprendre.
L’essentiel
PWA SEO is JavaScript/SPA SEO plus exactly two additions: ignore the manifest as an SEO input (it’s pour installability), and configurer the service worker so it jamais traps Googlebot in a stale or offline cache. Obtenir ceux correct and a PWA indexes exactly comme quelconque autre well-built site — aucun bonus, aucun penalty, simplement the même rules.
AI summary
A condensed prendre on the Avancé version:
- A PWA is a website premier. It’s a
manifest.json(installability) + a service worker (offline/mise en cache) layered on what’s almost toujours a JS/SPA site. Tout the JavaScript/SPA SEO rules appliquer unchanged. - Aucun ranking advantage. Google’s John Mueller: PWAs “currently don’t have quelconque advantage dans la recherche Google.” “Going PWA” ne fait pas améliorer rankings.
- Manifest.json is SEO-irrelevant. It contrôle install prompts, icons,
start_url,display— there’s aucun evidence the ranking systems lire it. Google’s PWA checklist listes “installable” and “discoverable in search” as separate categories. - The un réel risk is the service worker. Google’s renderer doesn’t run service workers quand indexation (it treats every explorer as a first-time visit), so a cache-first HTML strategy peut index a stale or offline shell. Utiliser network-first pour HTML, cache-first pour static assets.
- HTTPS ≠ a PWA SEO perk. It’s a hard requirement pour service workers (secure context) and separately a “very lightweight” ranking signal every HTTPS site obtient. Don’t chain the two.
- Core Web Vitals is the seulement legit overlap — and it’s the performances engineering, pas the PWA étiquette. A bloated PWA peut score worse.
- App-like fonctionnalités (install, offline, push) are engagement, pas ranking. Twitter
Lite’s famous gains are engagement metrics; que cas study jamais mentions SEO.
Installability itself varies by navigateur/OS (iOS Safari has aucun
beforeinstallprompt, seulement manual Ajouter to Home Screen) — un plus raison it can’t be a ranking signal. - Bing has aucun PWA-specific guidance; par défaut to ordinary JS crawlability.
Documentation officielle
Primary-source material on PWAs, rendering, and the facts ce article rests on.
Google / web.dev
- Ce que are Progressive Web Apps? — Google’s definition and the three pillars (Capable, Reliable, Installable).
- Ce que rend a bon Progressive Web App? (PWA checklist) — separates “Is installable” from “Discoverable in search” as distinct categories.
- Service workers (Apprendre PWA) — mise en cache strategies and the service-worker lifecycle.
- Comprendre JavaScript SEO Basics — the app-shell échec mode Google documents.
- Building Indexable Progressive Web Apps (2016) — Google’s original PWA-indexability post.
- Twitter Lite cas study — the engagement metrics (remarque: aucun SEO/organic claims anywhere in it).
- HTTPS as a ranking signal (2014) — the “very lightweight signal” statement.
MDN / platform
- Service Worker API — the secure-context (HTTPS) requirement.
- Making PWAs installable — navigateur/OS installability differences, notamment pourquoi
beforeinstallpromptisn’t pris en charge on iOS.
Bing / Microsoft (aucun PWA-specific ranking guidance exists — ces are install/distribution docs)
- Bing Webmaster Guidelines — general crawlability; PWA-agnostic.
- Overview of Progressive Web Apps (PWAs) — Edge install and distribution focus.
Quotes from the source
On-the-record statements. Où a quote is relayed by a third party plutôt que a Google-owned URL, the caveat dit so.
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). Lire the coverage
- “By default, saying going to a PWA will make your rankings better — I don’t think that is the case.” — John Mueller, même session. Lire the coverage
- “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, même session. Lire the coverage
Google — ce que a PWA is, and the app-shell risk
- “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
- “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.” — Recherche Google Central. Jump to quote
- “Enable search engine discovery through unique URLs, descriptive titles, meta descriptions, and structured data.” — web.dev PWA checklist, “Discoverable in search.” Jump to quote
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. Lire the coverage
- “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). Lire the coverage
- “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). Lire the coverage
HTTPS: platform requirement vs. ranking 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
- “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
Installability varies by navigateur/OS
- “This is not supported on iOS.”
— MDN, on the
beforeinstallpromptcustom-install-prompt event. Jump to quote
beforeinstallprompt pour a custom install UI.On rendering timeouts (dated context)
- “Rendering services won’t wait forever for a page to finish loading.” — Hamlet Batista, Moteur de recherche Land. Lire the article
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.
“We’re considering a PWA. Will it help our SEO?”
- Aucun inherent ranking benefit — Google dit PWAs obtenir aucun advantage in Search. → Construire a PWA pour the utilisateur benefits (installable, offline, fast repeat loads), pas pour rankings. → It won’t hurt SEO soit, tant que votre rendering and service worker are définir up correctement (continuer ci-dessous).
“We’re building/have a PWA. Is my content actually indexable?”
- Fait the initial HTML contain the contenu réel (SSR/prerender), or is it an vide
app shell filled by JS?
- Vide shell, aucun SSR → ce is the app-shell trap. Ajouter SSR or prerendering avant worrying à propos de anything PWA-specific. (Même fix as quelconque SPA.)
- SSR/prerender in placer → bon; déplacer to the service worker.
“How should my service worker cache pages?”
- HTML documents → network-first (or stale-while-revalidate, short TTL). Jamais cache-first pour HTML.
- Static assets (JS/CSS/images/fonts) → cache-first is fine and bon.
- Offline fallback page → assurez-vous it peut jamais be the version a fresh explorer indexes.
“My PWA lost rankings/traffic after launch. Where do I look?”
- Run Inspection d’URL (live tester) in Search Console — is Google seeing the réel page or a stale/offline/vide un?
- Si stale or vide → suspect the service-worker mise en cache strategy (cache-first HTML) or a manquant SSR step.
- Si le contenu’s là but rankings encore dropped → regarder at ce que sinon the rebuild modifié: lien internes, content, redirections, speed. The PWA étiquette is rarely the causer.
“Do I need to do anything special with the manifest for SEO?”
- Aucun. Garder it valid pour installability; it has aucun SEO role. Spend the effort on URLs, titles, meta, données structurées, and Core Web Vitals à la place.
PWA SEO checklist
Scannable réussir pour keeping a Progressive Web App crawlable and indexable:
- Contenu réel is server-rendered or prerendered — pas an vide app shell filled by JavaScript après charger.
- Every route has a réel, unique URL via the History API (aucun hash/
#!routing). - Chaque route renvoie its propre canonical, title, and meta description in the rendered DOM.
- Service worker sert HTML network-first (or stale-while-revalidate, short TTL) — jamais cache-first pour HTML documents.
- Static assets (JS/CSS/images/fonts) peut be cache-first; that’s fine.
- The offline-fallback page peut jamais be ce que a fresh explorer indexes.
- Inspection d’URL (live tester) montre Google the réel, current page — comparé contre the live page.
- The manifest is valid pour installability, but you’re pas treating it as an SEO lever.
- Installability is testé per navigateur/OS, pas assumed universal (iOS Safari has aucun
beforeinstallprompt; it’s manual Ajouter to Home Screen) — and none of que variance is treated as an SEO problème. - Served over HTTPS (requis pour service workers anyway).
- Core Web Vitals are sain — vérifier the JS bundle and hydration aren’t dragging LCP/INP bas.
- Ecommerce: product pages chaque retourner réel unique HTML; faceted-nav/client routing isn’t spawning shell-only or infinite parameter URLs.
PWA SEO — cheat sheet
Fait it affecter SEO?
| PWA component | Ce que it fait | SEO effect |
|---|---|---|
manifest.json | Install prompt, icons, start_url, display | None — pas lire by ranking systems |
| Service worker | Offline, background mise en cache, push | Risk seulement — peut serve Googlebot stale/offline HTML si misconfigured |
| HTTPS | Requis pour service workers (secure context) | Tiny ranking signal — every HTTPS site obtient it, PWA or pas |
| Add-to-home-screen / push / offline | App-like UX | None — engagement, pas ranking |
| Core Web Vitals | Charger/interactivity/stability | Réel (modest) ranking factor — it’s the engineering, pas the PWA étiquette |
| Underlying JS/SPA rendering | How lune page is construit | The réel battleground — SSR/prerender, réel URLs, per-route metadata |
Service-worker mise en cache by resource type
| Resource | Strategy | Pourquoi |
|---|---|---|
| HTML documents | Network-first / stale-while-revalidate | Google jamais runs votre SW; it doit voir live HTML |
| JS / CSS | Cache-first | Static, versioned, pas the indexable doc |
| Images / fonts | Cache-first | Static, safe to cache aggressively |
| Offline fallback | Serve seulement truly offline | Doit jamais be the indexé version |
Fast facts
- Google donne PWAs aucun ranking advantage (Mueller).
- Google’s renderer ne fait pas run service workers quand indexation.
- HTTPS ranking signal: “fewer than 1% of global queries” (Google, 2014).
- Bing: aucun PWA-specific guidance — treat as quelconque JS site.
Incident playbook: search trafic dropped après a PWA release
- Freeze the release chemin. Arrêter plus loin service-worker and routing deployments pendant que vous preserve the failing production state and release identifiers.
- Confirmer scope. Segment the drop by template, directory, device, and deployment temps. A PWA-wide échec ne doit pas be assumed from un broken route.
- Comparer three réponses. Enregistrer the raw HTTP réponse, a fresh rendered page with storage cleared, and a returning-user page controlled by the service worker. Vérifier the title, canonical, robots directives, principal copy, liens, and status behavior.
- Inspect registration and cache policy. In DevTools Application, identifier the active worker, its scope, waiting versions, cache noms, and navigation handler. Confirmer HTML navigations ne sont pas trapped behind an old cache-first réponse.
- Bypass the worker. Unregister it or utiliser DevTools’ bypass option, reload, and repeat the affected route. Si the defect disappears, the worker or its cache is the probable boundary; si it remains, continuer as an ordinary JavaScript SEO incident.
- Restore a safe navigation chemin. Roll back the worker or switch document requêtes to network-first with an explicit offline fallback. Ne faites pas delete tout caches blindly si utilisateurs depend on offline données.
- Validate and monitor. Tester a clean navigateur, an updating navigateur, and an offline navigateur. Alors inspect representative URLs and watch search performances via the normal recrawl window.
Treating the manifest as an SEO fichier
Stuffing keywords into name, short_name, or icon metadata ne fait pas faire pages plus
indexable. Utiliser the manifest pour installation behavior and put search-relevant content
in crawlable HTML with ordinary titles, liens, and canonicals.
Mise en cache HTML forever
A cache-first rule que treats navigations comme immutable assets peut garder old copy, canonicals, or robots directives alive après a release. Cache versioned JS, CSS, and images aggressively; give HTML a network-aware mettre à jour strategy.
Returning the offline shell as a successful page
Serving the même offline app shell pour every unavailable URL peut regarder comme nombreux différent URLs returning identical contenu pauvre. Garder the offline experience clearly separate from normal navigation and ne faites pas pretend a manquant document is la requêteed page.
Hiding navigation behind non-link contrôle
A button que changements client state may fonctionner in the app pendant que providing aucun crawlable
<a href> chemin to the destination. Utiliser réel liens pour routes moteur de recherches and utilisateurs
besoin to follow, alors enhance the transition with JavaScript.
Testing seulement as a warm returning utilisateur
A developer navigateur with an installed worker and populated cache peut mask a broken premier visit. Tester clean storage, an upgrade from the previous worker, and a returning visit. Ceux are distinct PWA states.
Exemple: asset mise en cache and document mise en cache besoin différent rules
The suivant simplified service-worker logic montre the boundary. Hashed assets peut be cache-first; document navigations devrait essayer the 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))
);
}
});The exact production policy dépend on mettre à jour and offline requirements, but the SEO lesson is stable: HTML n’est pas the même kind of immutable asset as a fingerprinted bundle.
Exemple: crawlable route versus app-only 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 the worker source and a route inventory. Ne faites pas inclure secrets or private 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 pour PWA SEO reviews
- S: Server réponse. A usable premier réponse, or a deliberate rendering strategy, doit expose lune page plutôt que seulement an vide app shell.
- H: Hrefs. Important routes utiliser crawlable liens with stable URLs, pas contrôle que exist seulement as client-side state.
- E: Attendu metadata. Titles, canonicals, robots directives, and données structurées remain correct in raw and rendered states.
- L: Live documents. Navigation requêtes have a freshness policy appropriate pour HTML; stale mis en cache documents ne faites pas silently outlive releases.
- L: Lifecycle tests. QA covers install, activate, mettre à jour, waiting-worker, offline, and bypass states au lieu de un warm developer session.
The framework garde PWA-specific examiner narrow. Si tout five réussir, la plupart remaining fonctionner is ordinary JavaScript, performances, and indexability QA.
DevTools Console: inspect the active worker and 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 in a cache; it ne fait pas prove qui récupérer handler va win pour every navigation. Confirmer routing in the worker source and the 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*\( Validate a PWA SEO release
| Tester to run | Attendu result | Échec interpretation | Monitoring window | Rollback trigger |
|---|---|---|---|---|
| Récupérer representative routes with an vide navigateur profile | Chaque route loads its intended content and metadata on the premier visit | The app dépend on a pre-existing worker or cache | Every release | Roll back si critical routes échouer pour nouveau utilisateurs |
| Upgrade from the previous production worker sans clearing storage | The nouveau worker activates predictably and documents refresh to the released version | Lifecycle or cache-version logic strands utilisateurs on old HTML | Release rehearsal and deployment day | Roll back si the prior version ne peut pas mettre à jour safely |
| Comparer raw HTML, rendered DOM, and worker-bypassed rendering | Titles, canonicals, robots directives, principal copy, and liens remain equivalent in meaning | Client rendering or worker interception changements search-critical output | Avant deployment and après deployment | Roll back si pages become non-indexable or lose principal content |
| Navigate online, alors repeat offline | Online requêtes recevoir live documents; offline behavior is explicit and limited to its designed scope | An offline shell or stale cache is masking réel routes | Every worker modifier | Roll back si online utilisateurs recevoir offline or obsolete content |
| Requête a nonexistent URL online | La réponse ne fait pas masquerade as a valid content page with the generic app shell | Catch-all routing creates soft-404 behavior | Every routing modifier | Roll back si arbitrary URLs retourner indexable shell content |
Testez vos connaissances: PWA SEO
Five rapide questions on how Progressive Web Apps interact with search. Pick an réponse pour chaque, alors vérifier.
Ressources utiles
My connexe writing
- JavaScript SEO Problèmes & Meilleur Practices — the rendering foundation every PWA sits on; app-shell, SSR, and ce que Google’s renderer fait and doesn’t do.
- The Beginner’s Guide to SEO technique — où rendering and crawlability fit in the bigger picture.
My speaking
- How Search Fonctionne (SlideShare) — my walkthrough of exploration, rendering, indexation, and ranking, the pipeline a PWA has to réussir via. (Standing disclaimer: “This is my understanding of systems… not going to be 100% complete or accurate.”)
From autour the industry
- Google: Progressive Web Apps Don’t Rank Meilleur Que Regular Sites (Moteur de recherche Journal) — the Mueller office-hours coverage que anchors the myth-bust.
- Google Dit Progressive Web Apps (PWAs) Have Aucun Advantage In Search (Moteur de recherche Roundtable) — independent write-up of the même session.
- Service Worker – Ce que SEOs Besoin to Know (SearchViu) — the Splitt/Mueller statements on pourquoi the renderer skips service workers.
- Comprendre JavaScript SEO Basics (Google) — the app-shell échec mode, documented at the source.
- Ce que rend a bon Progressive Web App? (PWA checklist) (web.dev) — installability and discoverability as separate categories.
- Twitter Lite cas study (web.dev) — the réel engagement numbers, and proof ils were jamais à propos de SEO.
Videos
- Recherche Google Central (YouTube) — Martin Splitt’s JavaScript SEO and rendering explainers cover the exact pipeline (explorer → render → index) a PWA dépend on, notamment how the 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.