SEO PWA
Progressive Web App SEO — why "going PWA" doesn't poprawić rankings, why the manifest.json jest SEO-irrelevant, how a misconfigured service worker może serve Googlebot a stale pamięć podręczna, i gdzie Core Web Vitals i HTTPS actually (i don't) overlap z SEO.
Języki
A PWA jest a website enhanced z a manifest i a service worker — it's nadal a normal (zwykle JavaScript/SPA) witryna to Google, z no inherent ranking advantage. The manifest.json jest SEO-irrelevant (it controls installability, nie indeksowanie). The one rzeczywisty PWA-specific risk jest the service worker: Google's renderer doesn't run service workers gdy indeksowanie, so a pamięć podręczna-pierwszy HTML strategy może hand Googlebot a stale lub offline strona. Fix że z network-pierwszy dla HTML, i the rest jest 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) jest a normal website z two extras bolted on: a manifest że lets people install it to ich home screen, i a service worker że może make it działać offline. To Google it’s nadal just a website — going PWA robi nie boost twój rankings. The one thing że może actually hurt you jest a badly ustawić-up service worker że pokazuje Google an old, cached strona zamiast twój live one.
co a PWA actually jest
A Progressive Web App jest a website że’s był enhanced to feel więcej like a native app. Two pieces make it a PWA:
- A web app manifest (
manifest.json) — a mały file że tells the przeglądarka twój app’s nazwa, icons, i colors, so a visitor może tap “Add to Home Screen” i get an app-style icon i splash screen. - A service worker — a bit of JavaScript że runs in the background i może pamięć podręczna files so the witryna loads fast on repeat visits i even działa offline.
że’s it. Underneath, a PWA jest almost zawsze a regular JavaScript website (React, Vue, Angular, i so on). It’s a normal witryna wearing an app costume.
The big myth to bust
The najbardziej common thing people believe jest: “If we turn nasz witryna do a PWA, we’ll rank better.” Google ma said plainly że ten isn’t prawdziwy. Google’s John Mueller put it directly: PWAs “currently don’t have any advantage in Google Search.” There jest no “PWA bonus” in the ranking systemy.
The manifest file doesn’t pomagać SEO either. It controls how the app installs — the icon, the nazwa, the splash screen — none of który Google reads gdy deciding how to rank you.
The one thing że może actually hurt
The service worker jest the part to być careful z. ponieważ it może serve a cached (saved) copy of twój strony, a bad setup może end up showing Google a stale lub even blank “you’re offline” version of a strona zamiast the rzeczywisty, up-to-date one. że’s how a PWA loses ruch po launch — nie ponieważ it “became a PWA,” ale ponieważ the buforowanie był pointed the błędny way.
co to actually robić
- upewnij się twój rzeczywisty strona treść loads dla wyszukiwarki, nie just an empty shell że fills in z JavaScript afterward.
- ustawić twój service worker so it fetches fresh HTML z the network pierwszy, i tylko falls back to the pamięć podręczna dla speed on things like images i stylesheets.
- zachowaj basics right: rzeczywisty, unique URLs; a good tytuł i opis meta on każdy strona; a fast, niezawodny experience.
będąc a PWA jest great dla twój użytkownicy — installable, fast, offline-friendly. Just don’t expect it to move you up in Google, i don’t let the service worker feed Google the błędny strona. The Advanced tab ma the mechanics, the buforowanie strategies, i the cytaty.
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 jest a manifest + a service worker layered on top of co jest almost zawsze a JS/SPA witryna — so the renderowanie reguły z JavaScript/SPA SEO apply unchanged, plus two PWA-specific concerns. Google gives PWAs no ranking advantage (Mueller). The
manifest.jsongoverns installability, nie indeksowanie, i there’s no dowód the ranking systemy read it. The service worker jest the rzeczywisty risk: Google’s renderer robi nie run service workers gdy indeksowanie, so a pamięć podręczna-pierwszy HTML strategy może index a stale lub offline shell — używać network-pierwszy dla HTML, pamięć podręczna-pierwszy dla statyczny assets. HTTPS jest a trudny requirement dla service workers i osobno a tiny ranking signal; don’t chain tamte do “PWAs rank better.” Core Web Vitals jest the tylko legitimate overlap, i it’s the engineering, nie the PWA label.
A PWA jest a website pierwszy
The single najbardziej użyteczny frame: a Progressive Web App jest a normal website z two things added on top. Per Google’s own definition, PWAs “są web apps built i enhanced z modern APIs to zapewniać enhanced capabilities podczas gdy nadal reaching dowolny web użytkownik on dowolny urządzenie z a single codebase.” The three pillars Google nazwy są Capable, niezawodny, i Installable — note że none of the three jest “rankable.”
Architecturally, że codebase jest almost zawsze a JavaScript framework running a
single-strona-application pattern. który means: everything że governs JS/SPA
indexability governs PWA indexability, z no modification. rzeczywisty <a href> links
i History-API routing (nie hash fragments) dla addressability; serwer-side renderowanie
lub prerendering dla treść dostępność; per-route canonical, tytuł, i meta in the
wyrenderowany DOM. If you’ve przeczytaj SEO JavaScript i SPA SEO material, you już know
90% of PWA SEO — the app-shell awaria mode, w szczególności, jest one Google explicitly
documents: “niektóre JavaScript witryny może użyj app shell model gdzie the initial HTML
robi nie contain the rzeczywisty treść i Google needs to execute JavaScript przed
będąc able to see the rzeczywisty strona treść że JavaScript generates.” A PWA że
ships an empty shell z no SSR/prerender inherits że problem directly.
So the honest scope of a PWA-specific SEO artykuł jest mały: the manifest, i the service worker. Everything else jest JS/SPA SEO wearing a manifest.
The core myth: “going PWA” robi nie poprawić rankings
ten jest the headline. Google ma był unusually bezpośredni o it. John Mueller, in a Search Central office-hours session, said PWAs “currently don’t mieć dowolny advantage in Google Search, i as far as I know, there są no plans to change ten,” i — asked whether converting to a PWA by pomagać — “By domyślny, saying going to a PWA będzie make twój rankings better — I don’t think że jest the case.”
He również pre-empted the usual counter-argument, że “nasz competitor went PWA i ich rankings jumped.” His answer: “So just the fakt że one of twój competitors ma moved z one framework to another, i ma seen an improvement in search, że framework change z my point of view wouldn’t być responsible dla że.” And on why: “te są essentially różny ways of making a website… dla the najbardziej part, we see te as normal HTML strony.”
gdzie PWA relaunches robić correlate z ranking lifts, it’s the confounds że come z dowolny big rebuild: modernized internal linking, refreshed i expanded treść, genuine speed improvements, i zwykle a marketing push tied to the relaunch. None of że wymaga the PWA label. If you rebuild a 10-to-15-year-old organically-grown witryna, you change a dozen things at once — attributing the wynik to “PWA” jest a correlation błąd.
Mueller’s office-hours statements above są relayed by wyszukiwarka Journal i independently by wyszukiwarka Roundtable covering the same Nov 2021 session; I mieć nie replayed the original video, so treat them as reported-official.Manifest.json: installability ≠ indexability
The manifest.json file exists to make twój app installable. jego pola —
name, short_name, icons, start_url, display, theme_color — drive the
install prompt, the home-screen icon, the splash screen, i whether the app opens
standalone lub in a przeglądarka tab. że’s the entire job.
There’s no dowód Google’s ranking lub indeksowanie systemy przeczytaj manifest as a signal. The cleanest external confirmation jest Google’s own PWA checklist, który listy “jest installable” and “Discoverable in search” as two oddzielny, independent checklist kategorie — gdzie discoverability jest defined as ordinary SEO fundamentals: “Enable wyszukiwarka discovery przez unique URLs, descriptive tytuły, meta opisy, i dane strukturalne.” Installability (manifest-driven) i discoverability (classic SEO) są treated as parallel concerns, nie one feeding the other. So: zachować a prawidłowy manifest ponieważ it’s co makes the app installable — just don’t file it poniżej SEO.
Google doesn’t publikować a strona stating in dokładny words że manifest.json jest excluded z ranking; ten jest a well-supported inference z the “no advantage” statement, the checklist’s separation of the two kategorie, i the manifest’s total absence z Google’s ranking-factor docs — phrase it as “no evidence it’s read,” nie “confirmed ignored.”Service workers: the one rzeczywisty PWA-specific SEO risk
Here’s the fakt że matters najbardziej, i it’s PWA-specific: Google’s renderowanie service robi nie run twój service worker gdy it renders a strona dla indeksowanie. The reasoning, z Martin Splitt: “As we mieć to assume że someone clicking on twój strona z a SERP jest a pierwszy-time visitor, running a service worker jest zwykle nie going to robić much good.” A service worker’s whole point jest speeding up repeat visits z a pamięć podręczna — i Googlebot jest, by design, zawsze treated as a pierwszy-time visitor, so there’s nothing dla it to speed up. Splitt again: “We’re nie supporting że ponieważ użytkownicy clicking onto twój strona z the wynik wyszukiwania może nigdy mieć był there beforehand.” Mueller ma confirmed ten jest stable polityka, nie a temporary state: “I wouldn’t expect it to change — it’s computationally expensive to run service-workers in the background like ten dla indeksowanie.”
te three rep statements są relayed by SearchViu (Splitt at Google I/O 2019/2020; Mueller reported July 2023); I’ve confirmed the Splitt i Mueller cytaty as dokładny substrings on że strona ale they’re a third-party relay, nie a Google-owned URL. Note również że “never runs” jest slightly too absolute — Google’s Splitt ma indicated web workers może czasami execute; the bezpieczny framing jest “the rendering service doesn’t run service workers by design,” nie “under no circumstance.”So why jest że a risk? ponieważ twój service worker robi run in rzeczywisty użytkownicy’ przeglądarki, i if you told it to serve HTML pamięć podręczna-pierwszy — zwracać the saved copy, skip the network — then a rzeczywisty repeat visitor sees a fast cached strona, ale że’s a strategy Googlebot nigdy executes. The danger jest the reverse case: a buforowanie pattern że, poniżej dowolny błąd lub fallback condition, hands back a stale document lub the offline-fallback strona. ponieważ renderowanie jest stateless i the WRS treats każdy fetch as fresh, a misconfigured buforowanie strategy jest how a PWA ends up z Googlebot indeksowanie an outdated lub empty offline shell zamiast live treść.
The buforowanie-strategy reguła of thumb:
- HTML documents → network-pierwszy (lub stale-podczas gdy-revalidate z a short TTL). Get the live strona; użyj pamięć podręczna tylko as an offline fallback, i upewnij się że fallback jest nigdy co a fresh crawl by index.
- statyczny assets (JS, CSS, images, fonts) → pamięć podręczna-pierwszy jest fine i desirable — they don’t change per żądanie i aren’t the indeksowalny document.
How to audit it: porównywać co Googlebot sees wobec co a repeat visitor’s przeglądarka serves z pamięć podręczna. używać URL Inspection in Search Console (live test) to see the wyrenderowany HTML Google actually gets, i sprawdzenie it wobec the live strona. If they diverge, twój service worker lub SSR setup jest the pierwszy suspect. i watch renderowanie timeouts on hybrid setups — as Hamlet Batista noted z the dynamiczny-renderowanie era, “renderowanie services won’t wait forever dla a strona to finish ładowanie.” (że specific artykuł jest o dynamiczny renderowanie, który Google now discourages in favor of SSR — cite the timeout principle, nie the pattern.)
HTTPS: a service-worker requirement, i osobno a tiny ranking signal
You’ll see PWA SEO posts imply “PWAs need HTTPS, i HTTPS boosts rankings, therefore PWAs są więcej SEO-friendly.” Two prawdziwy fakty, wrongly chained.
fakt one: service workers tylko run in a secure context. Per MDN: “Service workers są tylko available in secure contexts: ten means że ich document jest served ponad HTTPS, although przeglądarki również treat http://localhost as a secure context, to facilitate local development.” że’s a przeglądarka platforma reguła, nie an SEO tactic — no HTTPS, no service worker, pełny stop.
fakt two: HTTPS jest a rzeczywisty Google ranking signal, ale a minuscule one. Google’s own 2014 announcement: “we’re starting to używać HTTPS as a ranking signal. dla now it’s tylko a bardzo lightweight signal — affecting fewer than 1% of global zapytania, i carrying mniej weight than other signals such as wysoki-quality treść.”
The point: dowolny HTTPS witryna gets że same tiny signal — PWA lub nie. A PWA doesn’t get extra SEO credit dla HTTPS; it just może’t function bez it. Don’t sprzedawać HTTPS as a PWA SEO benefit.
Core Web Vitals: the one legitimate overlap
If there’s a rzeczywisty place gdzie “good PWA” i “good SEO” meet, it’s wydajność. Google’s PWA guidance leads z reliability — “A niezawodny Progressive Web App feels fast i dependable regardless of the network” — i Core Web Vitals są a confirmed (if modest) czynnik rankingowy. A well-engineered PWA że loads fast i stays responsive będzie tend to score well on Vitals.
ale przeczytaj causation carefully: it’s the engineering, nie the PWA-ness. A bloated PWA — huge JS bundle, blokujący renderowanie hydration, an ponad-eager service worker — może easily post worse Core Web Vitals than a plain serwer-wyrenderowany strona. The Vitals win comes z doing the wydajność działać well, który you mógł robić z lub bez a manifest. będąc a PWA neither guarantees good Vitals nor grants a shortcut to them.
App-like funkcje są UX, nie czynniki rankingowe
dodawać-to-home-screen, offline mode, push notifications, app-like navigation — wszystkie genuine, valuable PWA benefits, i wszystkie engagement/retention funkcje, nie indeksowanie lub ranking inputs. Google’s PWA checklist makes the split explicit by putting “installable” i “discoverable in search” in oddzielny buckets.
Don’t treat “installable” as a single, universal capability either — it varies by
przeglądarka i OS, który jest one więcej powód it może’t być an SEO signal (Google by mieć
no spójny, cross-przeglądarka behavior to reward). The beforeinstallprompt event że
lets a PWA pokazywać jego own custom install UI jest a Chromium-tylko mechanism; per MDN’s PWA
installability poradnik, it’s “not supported on iOS.” On iOS Safari, installation happens
tylko przez the manual Share → dodawać to Home Screen flow (extended to Chrome, Edge,
Firefox, i Orion on iOS 16,4+, wszystkie of który używać Apple’s required WebKit engine on iOS
i so share że limitation), nie an automatic prompt. None of że changes the SEO
picture — it just means “is my PWA installable” isn’t a yes/no fakt independent of który
przeglądarka i OS a visitor jest on.
Twitter Lite jest the case study everyone reaches dla as “proof PWAs help SEO” — i jego udokumentowany wyniki są rzeczywisty (a 65% increase in strony per session, 75% increase in Tweets sent, 20% decrease in bounce rate) — ale każdy one of tamte jest an engagement metric. Google’s own case study of it nigdy mentions SEO, organic search, lub rankings at wszystkie. Great wynik; błędny column.
Ecommerce PWA storefronts: a short callout
PWA storefronts dodawać a kilka wrinkles worth naming, ponieważ they compound the SPA risks. Client-side routing plus nawigacja fasetowa może generate crawlable-looking URLs że wszystkie resolve to the same shell, lub an explosion of parametr URLs. Cart i realizacja zakupu state lives client-side i powinien nigdy gate the indeksowalny produkt treść. i każdy produkt strona musi independently zwracać rzeczywisty, unique HTML — the app-shell trap jest najbardziej expensive exactly gdzie you mieć the najbardziej strony. The fixes są the same ones z ecommerce i faceted-navigation SEO; the PWA warstwa doesn’t change them, it just makes the SSR/prerender discipline więcej ważny.
Bing i PWAs
Worth a wiersz: Bing ma opublikowany no PWA-specific ranking lub indeksowanie guidance. jego webmaster guidelines są PWA-agnostic (general możliwość indeksowania, sitemaps, robots.txt, IndexNow), i Microsoft’s extensive PWA docs są entirely o Edge install prompts, PWABuilder, i Microsoft sklep packaging — distribution i installation, a oddzielny track z web-search indeksowanie. So dla Bing, domyślny to ordinary JS-renderowanie możliwość indeksowania guidance; there’s no PWA exception to learn.
The bottom wiersz
PWA SEO jest JavaScript/SPA SEO plus exactly two additions: ignore the manifest as an SEO input (it’s dla installability), i configure the service worker so it nigdy traps Googlebot in a stale lub offline pamięć podręczna. Get tamte right i a PWA indexes exactly like dowolny other well-built witryna — no bonus, no penalty, just the same reguły.
AI summary
A condensed take on the Advanced version:
- A PWA jest a website pierwszy. It’s a
manifest.json(installability) + a service worker (offline/buforowanie) layered on co’s almost zawsze a JS/SPA witryna. wszystkie the JavaScript/SPA SEO reguły apply unchanged. - No ranking advantage. Google’s John Mueller: PWAs “currently don’t mieć dowolny advantage in Google Search.” “Going PWA” robi nie poprawić rankings.
- Manifest.json jest SEO-irrelevant. It controls install prompts, icons,
start_url,display— there’s no dowód the ranking systemy read it. Google’s PWA checklist listy “installable” i “discoverable in search” as oddzielny kategorie. - The one rzeczywisty risk jest the service worker. Google’s renderer doesn’t run service workers gdy indeksowanie (it treats każdy crawl as a pierwszy-time visit), so a pamięć podręczna-pierwszy HTML strategy może index a stale lub offline shell. używać network-pierwszy dla HTML, pamięć podręczna-pierwszy dla statyczny assets.
- HTTPS ≠ a PWA SEO perk. It’s a trudny requirement dla service workers (secure context) i osobno a “very lightweight” ranking signal każdy HTTPS witryna gets. Don’t chain the two.
- Core Web Vitals jest the tylko legit overlap — i it’s the wydajność engineering, nie the PWA label. A bloated PWA może score worse.
- App-like funkcje (install, offline, push) są engagement, nie ranking. Twitter
Lite’s famous gains są engagement metrics; że case study nigdy mentions SEO.
Installability itself varies by przeglądarka/OS (iOS Safari ma no
beforeinstallprompt, tylko manual dodawać to Home Screen) — one więcej powód it może’t być a ranking signal. - Bing ma no PWA-specific guidance; domyślny to ordinary JS możliwość indeksowania.
Official documentation
Primary-źródło material on PWAs, renderowanie, i the fakty ten artykuł rests on.
Google / web.dev
- co są Progressive Web Apps? — Google’s definition i the three pillars (Capable, niezawodny, Installable).
- co makes a good Progressive Web App? (PWA checklist) — separates “Is installable” z “Discoverable in search” as distinct kategorie.
- Service workers (Learn PWA) — buforowanie strategies i the service-worker lifecycle.
- Understand SEO JavaScript Basics — the app-shell awaria mode Google documents.
- Building indeksowalny Progressive Web Apps (2016) — Google’s original PWA-indexability post.
- Twitter Lite case study — the engagement metrics (note: no SEO/organic twierdzenia anywhere in it).
- HTTPS as a ranking signal (2014) — the “very lightweight signal” statement.
MDN / platforma
- Service Worker API — the secure-context (HTTPS) requirement.
- Making PWAs installable — przeglądarka/OS installability differences, w tym why
beforeinstallpromptisn’t supported on iOS.
Bing / Microsoft (no PWA-specific ranking guidance exists — te są install/distribution docs)
- Bing Webmaster Guidelines — general możliwość indeksowania; PWA-agnostic.
- Overview of Progressive Web Apps (PWAs) — Edge install i distribution focus.
cytaty z the źródło
On-the-record statements. gdzie a cytat jest relayed by a third party zamiast a Google-owned URL, the caveat says so.
Google — no 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). przeczytaj coverage
- “By default, saying going to a PWA will make your rankings better — I don’t think that is the case.” — John Mueller, same session. przeczytaj 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, same session. przeczytaj coverage
Google — co a PWA jest, i 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 cytat
- “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 cytat
- “Enable search engine discovery through unique URLs, descriptive titles, meta descriptions, and structured data.” — web.dev PWA checklist, “Discoverable in search.” Jump to cytat
Google — service workers i indeksowanie (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. przeczytaj 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). przeczytaj 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). przeczytaj coverage
HTTPS: platforma 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 cytat
- “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 cytat
Installability varies by przeglądarka/OS
- “This is not supported on iOS.”
— MDN, on the
beforeinstallpromptcustom-install-prompt event. Jump to cytat
beforeinstallprompt dla a custom install UI.On renderowanie timeouts (dated context)
- “Rendering services won’t wait forever for a page to finish loading.” — Hamlet Batista, wyszukiwarka Land. przeczytaj artykuł
powinien I go PWA — i co będzie it robić dla SEO?
A quick walk przez the questions people actually bring to ten topic.
“We’re considering a PWA. Will it help our SEO?”
- No inherent ranking benefit — Google says PWAs get no advantage in Search. → Build a PWA dla the użytkownik benefits (installable, offline, fast repeat loads), nie dla rankings. → It won’t hurt SEO either, as long as twój renderowanie i service worker są ustawić up correctly (continue below).
“We’re building/have a PWA. Is my content actually indexable?”
- robi the initial HTML contain the rzeczywisty treść (SSR/prerender), lub jest it an empty
app shell filled by JS?
- Empty shell, no SSR → ten jest the app-shell trap. dodawać SSR lub prerendering przed worrying o anything PWA-specific. (Same fix as dowolny SPA.)
- SSR/prerender in place → good; move to the service worker.
“How should my service worker cache pages?”
- HTML documents → network-pierwszy (lub stale-podczas gdy-revalidate, short TTL). nigdy pamięć podręczna-pierwszy dla HTML.
- statyczny assets (JS/CSS/images/fonts) → pamięć podręczna-pierwszy jest fine i good.
- Offline fallback strona → upewnij się it może nigdy być the version a fresh crawl indexes.
“My PWA lost rankings/traffic after launch. Where do I look?”
- Run URL Inspection (live test) in Search Console — jest Google seeing the rzeczywisty strona lub a stale/offline/empty one?
- If stale lub empty → suspect the service-worker buforowanie strategy (pamięć podręczna-pierwszy HTML) lub a missing SSR krok.
- If the treść’s there ale rankings nadal dropped → look at co else the rebuild changed: linki wewnętrzne, treść, redirects, speed. The PWA label jest rarely the cause.
“Do I need to do anything special with the manifest for SEO?”
- No. zachować it prawidłowy dla installability; it ma no SEO role. Spend the effort on URLs, tytuły, meta, dane strukturalne, i Core Web Vitals instead.
PWA SEO checklist
Scannable pass dla keeping a Progressive Web App crawlable i indeksowalny:
- rzeczywisty treść jest serwer-wyrenderowany lub prerendered — nie an empty app shell filled by JavaScript po load.
- każdy route ma a rzeczywisty, unique URL via the History API (no hash/
#!routing). - każdy route zwroty jego own canonical, tytuł, i opis meta in the wyrenderowany DOM.
- Service worker serves HTML network-pierwszy (lub stale-podczas gdy-revalidate, short TTL) — nigdy pamięć podręczna-pierwszy dla HTML documents.
- statyczny assets (JS/CSS/images/fonts) może być pamięć podręczna-pierwszy; że’s fine.
- The offline-fallback strona może nigdy być co a fresh crawl indexes.
- URL Inspection (live test) pokazuje Google the rzeczywisty, current strona — porównany wobec the live strona.
- The manifest jest prawidłowy dla installability, ale you’re nie treating it as an SEO lever.
- Installability jest tested per przeglądarka/OS, nie assumed universal (iOS Safari ma no
beforeinstallprompt; it’s manual dodawać to Home Screen) — i none of że variance jest treated as an SEO problem. - Served ponad HTTPS (required dla service workers anyway).
- Core Web Vitals są healthy — verify the JS bundle i hydration aren’t dragging LCP/INP down.
- Ecommerce: strony produktów każdy zwracać rzeczywisty unique HTML; faceted-nav/client routing isn’t spawning shell-tylko lub infinite parametr URLs.
PWA SEO — cheat sheet
robi it affect SEO?
| PWA component | co it robi | SEO effect |
|---|---|---|
manifest.json | Install prompt, icons, start_url, display | None — nie read by ranking systemy |
| Service worker | Offline, background buforowanie, push | Risk tylko — może serve Googlebot stale/offline HTML if misconfigured |
| HTTPS | Required dla service workers (secure context) | Tiny ranking signal — każdy HTTPS witryna gets it, PWA lub nie |
| dodawać-to-home-screen / push / offline | App-like UX | None — engagement, nie ranking |
| Core Web Vitals | Load/interactivity/stability | rzeczywisty (modest) czynnik rankingowy — it’s the engineering, nie the PWA label |
| Underlying JS/SPA renderowanie | How the strona jest built | The rzeczywisty battleground — SSR/prerender, rzeczywisty URLs, per-route metadata |
Service-worker buforowanie by zasób type
| zasób | Strategy | Why |
|---|---|---|
| HTML documents | Network-pierwszy / stale-podczas gdy-revalidate | Google nigdy runs twój SW; it musi see live HTML |
| JS / CSS | pamięć podręczna-pierwszy | statyczny, versioned, nie the indeksowalny doc |
| Images / fonts | pamięć podręczna-pierwszy | statyczny, bezpieczny to pamięć podręczna aggressively |
| Offline fallback | Serve tylko truly offline | musi nigdy być the zindeksowany version |
Fast fakty
- Google gives PWAs no ranking advantage (Mueller).
- Google’s renderer robi nie run service workers gdy indeksowanie.
- HTTPS ranking signal: “fewer than 1% of global queries” (Google, 2014).
- Bing: no PWA-specific guidance — treat as dowolny JS witryna.
Incident playbook: ruch z wyszukiwania dropped po a PWA release
- Freeze the release path. Stop further service-worker i routing deployments podczas gdy you preserve the failing production state i release identyfikatory.
- Confirm scope. Segment the drop by template, directory, urządzenie, i deployment time. A PWA-wide awaria powinien nie być assumed z one broken route.
- porównywać three odpowiedzi. Save the raw HTTP odpowiedź, a fresh wyrenderowany strona z storage cleared, i a returning-użytkownik strona controlled by the service worker. sprawdzenie the tytuł, canonical, robots directives, primary copy, links, i status behavior.
- Inspect registration i pamięć podręczna polityka. In DevTools Application, zidentyfikuj active worker, jego scope, waiting versions, pamięć podręczna nazwy, i navigation handler. Confirm HTML navigations są nie trapped behind an old pamięć podręczna-pierwszy odpowiedź.
- Bypass the worker. Unregister it lub używać DevTools’ bypass option, reload, i repeat the affected route. If the defect disappears, the worker lub jego pamięć podręczna jest the prawdopodobny granica; if it pozostaje, continue as an ordinary SEO JavaScript incident.
- Restore a bezpieczny navigation path. Roll back the worker lub switch document żądania to network-pierwszy z an explicit offline fallback. robić nie delete wszystkie caches blindly if użytkownicy depend on offline data.
- walidować i monitorować. Test a clean przeglądarka, an updating przeglądarka, i an offline przeglądarka. Then inspect representative URLs i watch search wydajność przez the normal recrawl window.
Treating the manifest as an SEO file
Stuffing słowa kluczowe do name, short_name, lub icon metadata robi nie make strony więcej
indeksowalny. użyj manifest dla installation behavior i put search-relevant treść
in crawlable HTML z ordinary tytuły, links, i canonicals.
buforowanie HTML forever
A pamięć podręczna-pierwszy reguła że treats navigations like immutable assets może zachować old copy, canonicals, lub robots directives alive po a release. pamięć podręczna versioned JS, CSS, i images aggressively; give HTML a network-aware update strategy.
Returning the offline shell as a udany strona
Serving the same offline app shell dla każdy unavailable URL może look like wiele różny URLs returning identical thin treść. zachowaj offline experience clearly oddzielny z normal navigation i robić nie pretend a missing document jest the requested strona.
Hiding navigation behind non-link controls
A button że changes client state może działać in the app podczas gdy providing no crawlable
<a href> path to the destination. używać rzeczywisty links dla routes wyszukiwarki i użytkownicy
need to follow, then enhance the transition z JavaScript.
Testing tylko as a warm returning użytkownik
A programista przeglądarka z an installed worker i populated pamięć podręczna może mask a broken pierwszy visit. Test clean storage, an upgrade z the poprzedni worker, i a returning visit. tamte są distinct PWA states.
przykład: asset buforowanie i document buforowanie need różny reguły
The following simplified service-worker logic pokazuje the granica. Hashed assets może być pamięć podręczna-pierwszy; document navigations powinien try the network przed 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 dokładny production polityka depends on update i offline requirements, ale the SEO lesson jest stable: HTML jest nie the same kind of immutable asset as a fingerprinted bundle.
przykład: crawlable route versus app-tylko 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 może intercept the link dla an app-like transition bez removing jego crawlable URL.
Prompt: sprawdzenie a service-worker buforowanie strategy
Paste the worker źródło i a route stan magazynowy. robić nie obejmować secrets lub private API odpowiedzi.
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: build 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 dla PWA SEO reviews
- S: serwer odpowiedź. A usable pierwszy odpowiedź, lub a deliberate renderowanie strategy, musi expose the strona zamiast tylko an empty app shell.
- H: Hrefs. ważny routes używać crawlable links z stable URLs, nie controls że exist tylko as client-side state.
- E: Expected metadata. tytuły, canonicals, robots directives, i dane strukturalne pozostawać poprawny in raw i wyrenderowany states.
- L: Live documents. Navigation żądania mieć a freshness polityka appropriate dla HTML; stale cached documents robić nie silently outlive releases.
- L: Lifecycle tests. QA covers install, activate, update, waiting-worker, offline, i bypass states zamiast one warm programista session.
The framework zachowuje PWA-specific sprawdzenie narrow. If wszystkie five pass, najbardziej remaining działać jest ordinary JavaScript, wydajność, i indexability QA.
DevTools Console: inspect the active worker i caches
Run ten in the przeglądarka DevTools Console on the PWA. It raporty registrations i pamięć podręczna nazwy bez changing either one.
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: porównywać a network fetch z a cached odpowiedź
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 ?? '' }
});The wynik proves że a odpowiedź exists in a pamięć podręczna; it robi nie prove który fetch handler będzie win dla każdy navigation. Confirm routing in the worker źródło i the Network panel.
Regex: find risky pamięć podręczna-pierwszy navigation handlers
używać ten as a sprawdzenie aid, nie a parser. It looks dla a navigation condition followed nearby by a pamięć podręczna lookup.
request\.mode\s*===?\s*['"]navigate['"][\s\S]{0,500}caches\.(?:match|open)\s*\( walidować a PWA SEO release
| Test to run | Expected wynik | awaria interpretation | monitorowanie window | Rollback trigger |
|---|---|---|---|---|
| Fetch representative routes z an empty przeglądarka profile | każdy route loads jego intended treść i metadata on the pierwszy visit | The app depends on a pre-existing worker lub pamięć podręczna | każdy release | Roll back if critical routes fail dla new użytkownicy |
| Upgrade z the poprzedni production worker bez clearing storage | The new worker activates predictably i documents refresh to the released version | Lifecycle lub pamięć podręczna-version logic strands użytkownicy on old HTML | Release rehearsal i deployment day | Roll back if the prior version cannot update safely |
| porównywać raw HTML, wyrenderowany DOM, i worker-bypassed renderowanie | tytuły, canonicals, robots directives, primary copy, i links pozostawać equivalent in meaning | Client renderowanie lub worker interception changes search-critical output | przed deployment i po deployment | Roll back if strony become non-indeksowalny lub lose primary treść |
| Navigate online, then repeat offline | Online żądania receive live documents; offline behavior jest explicit i limited to jego designed scope | An offline shell lub stale pamięć podręczna jest masking rzeczywisty routes | każdy worker change | Roll back if online użytkownicy receive offline lub obsolete treść |
| żądanie a nonexistent URL online | The odpowiedź robi nie masquerade as a prawidłowy treść strona z the generic app shell | Catch-wszystkie routing creates soft-404 behavior | każdy routing change | Roll back if arbitrary URLs zwracać indeksowalny shell treść |
Test yourself: PWA SEO
Five quick questions on how Progressive Web Apps interact z search. Pick an answer dla każdy, then sprawdzenie.
zasoby worth twój time
My powiązany writing
- SEO JavaScript problemy & dobre praktyki — the renderowanie foundation każdy PWA sits on; app-shell, SSR, i co Google’s renderer robi i doesn’t robić.
- The Beginner’s poradnik to techniczne SEO — gdzie renderowanie i możliwość indeksowania fit in the bigger picture.
My speaking
- How Search działa (SlideShare) — my walkthrough of crawling, renderowanie, indeksowanie, i ranking, the pipeline a PWA ma to pass przez. (Standing disclaimer: “This is my understanding of systems… not going to be 100% complete or accurate.”)
z around the industry
- Google: Progressive Web Apps Don’t Rank Better Than Regular witryny (wyszukiwarka Journal) — the Mueller office-hours coverage że anchors the myth-bust.
- Google Says Progressive Web Apps (PWAs) mieć No Advantage In Search (wyszukiwarka Roundtable) — independent write-up of the same session.
- Service Worker – co SEOs Need to Know (SearchViu) — the Splitt/Mueller statements on why the renderer skips service workers.
- Understand SEO JavaScript Basics (Google) — the app-shell awaria mode, udokumentowany at the źródło.
- co makes a good Progressive Web App? (PWA checklist) (web.dev) — installability i discoverability as oddzielny kategorie.
- Twitter Lite case study (web.dev) — the rzeczywisty engagement liczby, i proof they były nigdy o SEO.
Videos
- Google Search Central (YouTube) — Martin Splitt’s SEO JavaScript i renderowanie explainers cover the dokładny pipeline (crawl → render → index) a PWA depends on, w tym how the stateless renderer handles JS. Channel
Dziennik zmian
Zaktualizowano 18 lip 2026.
Podsumowanie redakcyjne i zapisane szczegóły zmian.Szczegóły zmian
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
Pełne porównanie jest niedostępne — dla tej wersji nie zarchiwizowano wcześniejszej migawki.