PWA SEO

Progressive Web App SEO — why "going PWA" doesn't improve rankings, why the manifest.json is SEO-irrelevant, how a misconfigured service worker can serve Googlebot a stale cache, and where Core Web Vitals and HTTPS actually (and don't) overlap with SEO.

First published: Jul 3, 2026 · Last updated: Jul 18, 2026 · Advanced

A PWA is a website enhanced with a manifest and a service worker — it's still a normal (usually JavaScript/SPA) site to Google, with no inherent ranking advantage. The manifest.json is SEO-irrelevant (it controls installability, not indexing). The one real PWA-specific risk is the service worker: Google's renderer doesn't run service workers when indexing, so a cache-first HTML strategy can hand Googlebot a stale or offline page. Fix that with network-first for HTML, and the rest is ordinary JS/SPA SEO.

TL;DR — A PWA is a manifest + a service worker layered on top of what is almost always a JS/SPA site — so the renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. rules from JavaScript/SPA SEOSPA SEO is the practice of making a client-side-routed single-page application — one that loads a single HTML document and then swaps views with JavaScript (React Router, Vue Router, Angular Router) — crawlable and indexable, so every route resolves to real, unique HTML with its own URL, canonical, and metadata. apply unchanged, plus two PWA-specific concerns. Google gives PWAs no ranking advantage (Mueller). The manifest.json governs installability, not indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed., and there’s no evidence the ranking systems read it. The service worker is the real risk: Google’s renderer does not run service workers when indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed., so a cache-first HTML strategy can index a stale or offline shell — use network-first for HTML, cache-first for static assets. HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' is a hard requirement for service workers and separately a tiny ranking signal; don’t chain those into “PWAs rank better.” Core Web Vitals is the only legitimate overlap, and it’s the engineering, not the PWA label.

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 basics

A PWA is a website first

The single most useful frame: a Progressive Web App is a normal website with two things added on top. Per Google’s own definition, PWAs “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.” The three pillars Google names are Capable, Reliable, and Installable — note that none of the three is “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 renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. or prerendering for content availability; per-route canonical, title, and meta in the rendered DOM. If you’ve read the JavaScript SEOMaking sure search engines can crawl, render, and index content that depends on JavaScript. and SPA SEO material, you already know 90% of PWA SEOPWA SEO is making sure a Progressive Web App's content is server-rendered or prerendered, its service worker never traps Googlebot in a stale cache, and its URLs are real, unique, and crawlable — since the manifest and offline features that make it a 'PWA' carry no ranking weight of their own. — 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/prerenderThe Speculation Rules API is a Chromium browser API (Chrome/Edge 109+) that lets a site tell the browser which same-site pages to prefetch (download the HTML document) or prerender (fully load and render in an invisible tab) before a visitor clicks — so the next navigation can be near-instant. It's a browser-side performance feature for real users, not a crawling, indexing, or ranking signal. inherits that problem directly.

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.

The core myth: “going PWA” does not improve rankings

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.”

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.”

Where PWA relaunches do correlate with ranking lifts, it’s the confounds that come with any big rebuild: modernized internal linkingAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them., 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.

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.

Manifest.json: installability ≠ indexability

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.

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 dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding..” 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.

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.”

Service workers: the one real PWA-specific SEO risk

Here’s the fact that matters most, and it’s PWA-specific: Google’s rendering service does not run your service worker when it renders a page for indexing. The reasoning, from Martin Splitt: “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.” A service worker’s whole point is speeding up repeat visits from a cache — and GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. is, by design, always treated as a first-time visitor, so there’s nothing for it to speed up. Splitt again: “We’re not supporting that because users clicking onto your page from the search result might never have been there beforehand.” Mueller has confirmed this is stable policy, not a temporary state: “I wouldn’t expect it to change — it’s computationally expensive to run service-workers in the background like this for indexing.”

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.”

So why is that a risk? Because your service worker does run in real users’ browsers, and if you told it to serve HTML cache-first — return the saved copy, skip the network — then a real repeat visitor sees a fast cached page, but that’s a strategy GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. never executes. The danger is the reverse case: a cachingCaching stores a copy of a page or resource — in a browser, a CDN edge node, or a search crawler's own cache — so it can be served again without regenerating or re-downloading it. It isn't a direct ranking factor, but it feeds page speed and crawl efficiency. pattern that, under any error or fallback condition, hands back a stale document or the offline-fallback page. Because rendering is stateless and the WRS treats every fetch as fresh, a misconfigured caching strategy is how a PWA ends up with Googlebot indexing an outdated or empty offline shell instead of live content.

The caching-strategy rule of thumb:

  • HTML documents → network-first (or stale-while-revalidate with a short TTL). Get the live page; use the cache only as an offline fallback, and make sure that fallback is never what a fresh crawl would index.
  • Static assets (JS, CSS, images, fonts) → cache-first is fine and desirable — they don’t change per request and aren’t the indexable document.

How to audit it: compare what Googlebot sees against what a repeat visitor’s browser serves from cache. Use URL Inspection in Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. (live test) to see the rendered HTML Google actually gets, and check it against the live page. If they diverge, your service worker or SSR setup is the first suspect. And watch rendering timeouts on hybrid setups — as Hamlet Batista noted from the dynamic-rendering era, “Rendering services won’t wait forever for a page to finish loading.” (That specific article is about dynamic rendering, which Google now discourages in favor of SSR — cite the timeout principle, not the pattern.)

HTTPS: a service-worker requirement, and separately a tiny ranking signal

You’ll see PWA SEO posts imply “PWAs need HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.', and HTTPS boosts rankings, therefore PWAs are more SEO-friendly.” Two true 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.

Fact two: HTTPS is a real Google ranking signal, but a minuscule one. Google’s own 2014 announcement: “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.”

The point: any HTTPS site gets that same tiny signal — PWA or not. A PWA doesn’t get extra SEO credit for HTTPS; it just can’t function without it. Don’t sell HTTPS as a PWA SEO benefit.

Core Web Vitals: the one legitimate overlap

If there’s a real place where “good PWA” and “good SEO” meet, it’s performance. Google’s PWA guidance leads with reliability — “A reliable Progressive Web App feels fast and dependable regardless of the network” — and Core Web VitalsGoogle's three real-user UX metrics — LCP (loading), INP (responsiveness), and CLS (visual stability) — used by Google's ranking systems, with no official weight attached, measured on field data. are a confirmed (if modest) ranking factor. A well-engineered PWA that loads fast and stays responsive will tend to score well on Vitals.

But read the causation carefully: it’s the engineering, not the PWA-ness. A bloated PWA — huge JS bundle, render-blocking hydrationActivating server-rendered HTML in the browser by attaching JavaScript handlers., an over-eager service worker — can easily post worse Core Web VitalsWeb Vitals is Google's initiative (launched May 2020) for unified page-experience quality signals. Core Web Vitals — LCP, INP, and CLS — are the subset used in ranking; the rest (TTFB, FCP, TBT, Speed Index) are diagnostic, not ranking factors. 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.

App-like features are UX, not ranking factors

Add-to-home-screen, offline mode, push notifications, app-like navigation — all genuine, valuable PWA benefits, and all engagement/retention features, not indexing or ranking inputs. Google’s PWA checklist makes the split explicit by putting “installable” and “discoverable in search” in separate buckets.

Don’t treat “installable” as a single, universal capability either — it varies by browser and OS, which is one more reason it can’t be an SEO signal (Google would have no consistent, cross-browser behavior to reward). The beforeinstallprompt event that lets a PWA show its own custom install UI is a Chromium-only mechanism; per MDN’s PWA installability guide, it’s “not supported on iOS.” On iOS Safari, installation happens only through the manual Share → Add to Home Screen flow (extended to Chrome, Edge, Firefox, and Orion on iOS 16.4+, all of which use Apple’s required WebKit engine on iOS and so share that limitation), not an automatic prompt. None of that changes the SEO picture — it just means “is my PWA installable” isn’t a yes/no fact independent of which browser and OS a visitor is on.

Twitter Lite is the case study everyone reaches for as “proof PWAs help SEO” — and its documented results are real (a 65% increase in pages per session, 75% increase in Tweets sent, 20% decrease in bounce rate) — but every one of those is an engagement metric. Google’s own case study of it never mentions SEO, organic search, or rankings at all. Great result; wrong column.

Ecommerce PWA storefronts: a short callout

PWA storefronts add a few wrinkles worth naming, because they compound the SPA risks. Client-side routing plus faceted navigationFaceted navigation (faceted search, product filtering) lets visitors refine a list of products or content by attribute — price, color, size, brand, rating. The SEO problem: each filter combination can spawn a distinct crawlable URL, turning a small catalog into millions of near-duplicate pages that waste crawl budget and dilute ranking signals. 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.

Bing and PWAs

Worth a line: Bing has published no PWA-specific ranking or indexing guidance. Its webmaster guidelines are PWA-agnostic (general crawlabilityCrawlability is how well search engine crawlers can discover, access, and fetch a site's pages. A crawlability issue is any technical condition — blocked access, broken links, server failures, or bloated URL inventory — that stops pages from reaching the index., sitemapsA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing., robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere., IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it.), 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.

The bottom line

PWA SEO is JavaScript/SPA SEO plus exactly two additions: ignore the manifest as an SEO input (it’s for installability), and configure the service worker so it never traps Googlebot in a stale or offline cache. Get those right and a PWA indexes exactly like any other well-built site — no bonus, no penalty, just the same rules.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.