Skip to content

Auditing a PWA with Lighthouse

Lighthouse is Chrome’s built-in quality tool. It runs automated checks against your page and produces a categorised, scored report. As of Lighthouse 12 (2024, shipped in Chrome DevTools around Chrome 126) the report has four categories: Performance, Accessibility, Best Practices, and SEO. The old Progressive Web App category — which listed a pass/fail for each installability criterion — was removed. Lighthouse no longer scores a PWA category at all. Installability and other PWA-specific checks now live in the DevTools Application panel instead.

Getting into the habit of checking your app early — before you wire up caching strategies or push notifications — means you catch missing pieces while the codebase is still small. Lighthouse covers performance and best practices; the Application panel covers installability.

  1. Open Chrome and navigate to your app (it must be served over HTTPS or localhost).
  2. Open DevTools with F12 or Cmd+Option+I.
  3. Click the Lighthouse tab (you may need to click the » overflow arrow to find it).
  4. Under Categories, pick the categories you want — Performance, Accessibility, Best Practices, SEO.
  5. Click Analyze page load.

Lighthouse reloads the page, collects data, and renders a scored report per category. Note there is no Progressive Web App category to tick — it was removed in Lighthouse 12. To verify that your app is installable, use the Application panel described next.

The Application tab in DevTools is where installability now lives. It lets you inspect the live state of your PWA at any time without reloading.

PanelWhat it shows
ManifestThe parsed manifest.webmanifest — name, icons (with previews), start_url, display, colours. A warning banner appears if required fields are missing.
Service WorkersEvery registered SW for this origin: its script URL, status (activated and is running, waiting to activate, stopped), and a skipWaiting button to force-activate a waiting SW.
StorageCache Storage entries created by your SW; useful for verifying pre-cache lists.
Background ServicesLogs for Background Fetch, Background Sync, Push Messaging — useful once you add those APIs.

Open the Manifest panel first on any unfamiliar PWA. It instantly tells you whether the browser has parsed a valid manifest and which icons it found.

Installability criteria (checked in the Application panel)

Section titled “Installability criteria (checked in the Application panel)”

Chrome’s install criteria are what the browser requires before it will offer to install your app. The Application → Manifest panel flags any that are unmet with an installability warning:

CriterionWhat must be true
Web app manifestA <link rel="manifest"> tag exists and the file is reachable.
name or short_nameAt least one is present in the manifest.
start_urlPresent and responds with a 200 when fetched.
displaySet to standalone, fullscreen, or minimal-ui.
IconsAt least one icon at 192 × 192 and one at 512 × 512 (or larger). Icons must declare a src, sizes, and type.
Service workerA SW is registered and controls the page.
HTTPSThe page is on a secure origin (https:// or localhost).
Failure messageRoot causeFix
No manifest detectedMissing <link rel="manifest"> or the file returns a 404.Add <link rel="manifest" href="/manifest.webmanifest"> to <head> and make sure the file is served.
Manifest does not contain a 192px iconIcons array is empty or all icons are smaller than 192 px.Add an entry with "sizes": "192x192" and another with "sizes": "512x512".
Page controlled by a service worker failsNo SW registered, SW threw during install, or SW scope does not cover the page.Register the SW from the root (/sw.js) and confirm the console shows no registration errors.
Does not redirect HTTP to HTTPSProduction server is not enforcing HTTPS.Configure your host or CDN to issue a 301 redirect from http:// to https://.
start_url does not respond with a 200start_url points to a path that returns 404, or the SW does not handle that request.Make sure start_url is a real route and the SW’s fetch handler returns something for it.
display is not one of standalone, fullscreen, minimal-ui"display": "browser" or field is missing.Change to "display": "standalone".

The demo below is a minimal PWA that meets every installability criterion. Open it in StackBlitz, then open Application → Manifest inside the preview to confirm it reports no installability warnings. Run Lighthouse if you also want its Performance and Best Practices scores.

Runs a real service worker + manifest in your browser.
Lighthouse removed its Progressive Web App category in v12. Where do you now verify a PWA's installability in Chrome DevTools?
Which two icon sizes must a manifest declare to pass the Lighthouse installability check?
A Lighthouse audit reports "Page controlled by a service worker" fails even though sw.js exists. What is the most likely cause?
What does the Application tab > Service Workers panel let you do during development?