For the complete documentation index, see llms.txt. Every page on this site is also served as Markdown: append `.md` to any URL, or send `Accept: text/markdown`.
Attensira Logo
Attensira
SEO Glossary

Progressive web apps (PWA)

Web apps built on a manifest and a service worker so they install and work offline — and the one architectural habit that makes them invisible to the agents writing AI answers.

Karl-Gustav KallasmaaKarl-Gustav Kallasmaa, Founder & CEOLast updated

A progressive web app is a website that declares application metadata in a manifest and installs a service worker, so a browser can install it to the home screen and run it offline. It is not a framework or a product category — it is two web platform features and a secure origin, added to a site that already exists.

The Web Application Manifest specification, a W3C Working Draft dated 13 August 2026, defines "a JSON-based file format that provides developers with a centralized place to put metadata associated with a web application": the name, links to icons, the preferred URL to open when a user launches it, a default screen orientation, a display mode, and a URL scope that bounds where the manifest applies.

The Service Workers specification, a Candidate Recommendation Draft dated 12 August 2026, supplies the runtime half. Its core is "a worker that wakes to receive events" — most importantly a fetch event, backed by a cache storage mechanism comparable to HTTP caching, which is how a page can be served when the network is not there. The interface is defined as a secure context, so a service worker will not register over plain HTTP.

What a browser demands before it offers to install

Chrome publishes explicit install criteria, and they are narrower than most teams assume:

  • Served over HTTPS.
  • A manifest containing short_name or name.
  • Icons including a 192px and a 512px asset.
  • A start_url.
  • A display value of fullscreen, standalone, minimal-ui or window-controls-overlay.
  • prefer_related_applications absent, or false.

Two of the criteria are about the person, not the code: the user must have clicked or tapped on the page at least once, at any time — including during a previous load — and must have spent at least 30 seconds viewing it. Installability is earned by engagement as well as configuration, which is why a correct manifest alone does not produce a prompt.

The part that matters for being cited

None of the above is read by an agent answering a question about you, and that is the point worth internalising.

A service worker is installed by a browser and controls pages within its scope on subsequent visits. An assistant fetching your URL to answer a live question has no installed worker, no cache and no second visit. It receives exactly what your origin server returns to a cold, one-shot request. If that response is an empty shell that assembles its content in JavaScript, the agent has retrieved a document with nothing in it — and a document with nothing in it cannot be quoted, cited or contradicted.

That is not a hypothetical risk of the PWA pattern; it is the pattern's default shape. The app shell exists precisely to return a minimal HTML skeleton fast and fill it client-side. It is an excellent architecture for a returning, installed user and a poor one for a first, scriptless fetch. See crawling and indexing.

The second structural risk is the URL. An app-like build tends to render views by client-side routing under one path. A retrieval system cites a URL; if the only URL is the front door, the only thing it can cite is the front door, and a specific question about one view has no specific target to land on. Every meaningful view needs a real, server-addressable URL, and each of those needs a correct canonical declaration so the variants a client router produces do not fragment.

Failure modes

  • Shipping an empty document to non-browser clients. The most common and the most expensive: perfect in Chrome, blank to a fetcher.
  • One URL for everything. Nothing to cite but the home page, and no passage-level landing target.
  • Assuming the service worker helps a crawler. It does not run for a one-shot fetch, so any freshness or offline benefit it provides is invisible outside an installed session.
  • Serving a stale cached page to a returning human. A cache-first worker without a revalidation path will happily hand back a version of a page you corrected weeks ago.
  • Treating installability as an SEO feature. A manifest is metadata for an operating system, not a ranking or retrieval signal. Judge the page by what it returns cold; Core Web Vitals still describe how well it does that.
  • Repeating the AMP mistake in reverse. AMP constrained the page to guarantee speed; the app shell abandons the server-rendered document to guarantee app-like transitions. Both trade away something a fetcher needs.

How to keep both properties

Render the substantive content server-side and let the service worker enhance the experience for repeat visitors, rather than being the thing that produces the content in the first place. Give every view its own URL that returns its own HTML to a cold request. Keep the manifest for what it is for — installation on a device — and verify the page the way an agent sees it: one request, no JavaScript, and check that the answer is still in the response.

Frequently Asked Questions about Progressive web apps (PWA)

Two web platform pieces plus a secure origin. The W3C Web Application Manifest specification defines "a JSON-based file format that provides developers with a centralized place to put metadata associated with a web application" — name, icons, start URL, display mode, scope. The Service Workers specification defines the worker that "wakes to receive events", which is what supplies offline behaviour through its fetch event and cache storage. Service workers require a secure context, so HTTPS is not optional.

Chrome's published install criteria are: served over HTTPS; a web app manifest including short_name or name, a 192px and a 512px icon, and start_url; a display value of fullscreen, standalone, minimal-ui or window-controls-overlay; prefer_related_applications absent or false. Chrome additionally requires that the user has clicked or tapped on the page at least once and spent at least 30 seconds viewing it.

Not by itself. There is no crawler bonus for a manifest. What helps is the work usually done alongside it — fast delivery and a real URL per view — and what hurts is the app-shell habit of returning an empty document and assembling content in JavaScript.

No. A service worker is installed and controlled by a browser on a repeat visit within its scope. An agent making a one-shot HTTP fetch has no installed worker and no cache, so it sees whatever your origin server returns to a cold request — which is the only version of the page that matters for citation.

It can be built that way, and that is the failure. If every view is rendered under one path, there is nothing for a retrieval system to cite except the front door, and no passage-level target for a specific question. Each meaningful view needs its own crawlable URL that returns its own content.
Share this term

Track how your brand shows up in ChatGPT, Claude, and Google AI

Attensira monitors your visibility across AI search platforms so you know exactly when and how you're being recommended.