Progressive Web App

These audits validate the aspects of a Progressive Web App.

25 / 100

App can load on offline/flaky connections

Ensuring your web app can respond when the network connection is unavailable or flaky is critical to providing your users a good experience. This is achieved through use of a Service Worker.

  • Has a registered Service Worker The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. Learn more.

    No active service worker found for this origin.
    Fail
  • URL responds with a 200 when offline If you're building a Progressive Web App, consider using a service worker so that your app can work offline. Learn more.

    Fail

Page load performance is fast

Users notice if sites and apps don't perform well. These top-level metrics capture the most important perceived performance concerns.

  • First meaningful paint First meaningful paint measures when the primary content of a page is visible. Learn more.

    Cannot read property 'ts' of undefined
    -1
  • Perceptual Speed Index: 157 (target: 1,250) Speed Index shows how quickly the contents of a page are visibly populated. Learn more.

    100
    • First Visual Change: 89ms
    • Last Visual Change: 186ms
  • Estimated Input Latency: 23.4ms (target: 50ms) The score above is an estimate of how long your app takes to respond to user input, in milliseconds. There is a 90% probability that a user encounters this amount of latency, or less. 10% of the time a user can expect additional latency. If your score is higher than Lighthouse's target score, users may perceive your app as laggy. Learn more.

    100
  • Time To Interactive (alpha) (target: 5,000ms) Time to Interactive identifies the time at which your app appears to be ready enough to interact with. Learn more.

    Cannot read property 'ts' of undefined
    -1
  • Content scrolls at 60fps (Coming soon)

    N/A
  • Touch input gets a response in < 150ms (Coming soon)

    N/A
  • App is interactive without jank after the first meaningful paint (Coming soon)

    N/A

Site is progressively enhanced

Progressive enhancement means that everyone can access the basic content and functionality of a page in any browser, and those without certain browser features may receive a reduced but still functional experience.

  • Page contains some content when its scripts are not available Your app should display some content when JavaScript is disabled, even if it's just a warning to the user that JavaScript is required to use the app. Learn more.

    The page body should render some content if its scripts are not available.
    Fail

Network connection is secure

Security is an important part of the web for both developers and users. Moving forward, Transport Layer Security (TLS) support will be required for many APIs.

  • Site is on HTTPS All sites should be protected with HTTPS, even ones that don't handle sensitive data. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. Learn more.

    Pass
  • Site redirects HTTP traffic to HTTPS If you've already set up HTTPS, make sure that you redirect all HTTP traffic to HTTPS. Learn more.

    Fail

User can be prompted to Add to Homescreen

While users can manually add your site to their homescreen in the browser menu, the prompt (aka app install banner) will proactively prompt the user to install the app if the below requirements are met and the user has visited your site at least twice (with at least five minutes between visits).

  • Has a registered Service Worker The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. Learn more.

    No active service worker found for this origin.
    Fail
  • Manifest exists

    No manifest found.
    Fail
  • Manifest contains start_url

    Fail
  • Manifest contains icons at least 144px

    WARNING: No icons found in the manifest
    Fail
  • Manifest contains short_name

    Fail

Installed web app will launch with custom splash screen

A default splash screen will be constructed, but meeting these requirements guarantee a high-quality and customizable splash screen the user sees between tapping the home screen icon and your app’s first paint.

  • Manifest exists

    No manifest found.
    Fail
  • Manifest contains name

    Fail
  • Manifest contains background_color

    Fail
  • Manifest contains theme_color

    Fail
  • Manifest contains icons at least 192px

    WARNING: No icons found in the manifest
    Fail

Address bar matches brand colors

The browser address bar can be themed to match your site. A theme-color meta tag will upgrade the address bar when a user browses the site, and the manifest theme-color will apply the same theme site-wide once it's been added to homescreen.

  • Manifest exists

    No manifest found.
    Fail
  • HTML has a theme-color <meta>

    No valid theme-color meta tag found.
    Fail
  • Manifest contains theme_color

    Fail

Design is mobile-friendly

Users increasingly experience your app on mobile devices, so it's important to ensure that the experience can adapt to smaller screens.

  • HTML has a viewport <meta> Add a viewport meta tag to optimize your app for mobile screens. Learn more.

    Pass
  • Content is sized correctly for the viewport If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. Learn more.

    Pass

Best Practices

We've compiled some recommendations for modernizing your web app and avoiding performance pitfalls. These audits do not affect your score but are worth a look.

Using modern offline features

  • Offline: Site does not use Application Cache Application Cache has been deprecated by Service Workers. Consider implementing an offline solution using the Cache Storage API.

    Pass
  • Offline: Site does not use WebSQL DB. Web SQL is deprecated. Consider using IndexedDB instead. Learn more.

    Pass

Using modern protocols

  • Security: Site is on HTTPS All sites should be protected with HTTPS, even ones that don't handle sensitive data. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. Learn more.

    Pass
  • Performance: Site uses HTTP/2 for its own resources HTTP/2 offers many benefits over HTTP/1.1, including binary headers, multiplexing, and server push. Learn more.

    Pass

Using modern CSS features

  • CSS: Site does not use the old CSS flexbox The 2009 spec of Flexbox is deprecated and is 2.3x slower than the latest spec. Learn more.

    TypeError: Cannot read property 'toString' of undefined
    -1

Using modern JavaScript features

  • JavaScript: Site uses passive listeners to improve scrolling performance Consider marking your touch and wheel event listeners as passive to improve your page's scroll performance. Learn more.

    Pass
  • JavaScript: Site does not use Mutation Events in its own scripts Mutation Events are deprecated and harm performance. Consider using Mutation Observers instead. Learn more.

    Pass

Avoiding APIs that harm the user experience

  • Performance: Site does not use document.write() For users on slow connections, external scripts dynamically injected via document.write() can delay page load by tens of seconds. Learn more.

    Pass
  • Performance: Site does not use <link> that delay first paint Link elements are blocking the first paint of your page. Consider inlining critical links and deferring non-critical ones. Learn more.

    Pass
  • Performance: Site does not use <script> in head that delays first paint Script elements are blocking the first paint of your page. Consider inlining critical scripts and deferring non-critical ones. Learn more.

    Pass
  • Performance: Site opens external anchors using rel="noopener" Open new tabs using rel="noopener" to improve performance and prevent security vulnerabilities. Learn more.

    Pass
  • UX: Page does not automatically request geolocation on page load Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to user gestures instead. Learn more.

    Unable to determine if this permission was requested on page load because it had already been set. Try resetting the permission and run Lighthouse again.
    -1
  • UX: Page does not automatically request notification permissions on page load Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. Learn more.

    Pass

Accessibility

  • Accessibility: Element aria-* roles are valid

    Pass
  • Accessibility: Elements with ARIA roles have the required aria-* attributes

    Pass
  • Accessibility: Element aria-* attributes are valid and not misspelled or non-existent.

    Pass
  • Accessibility: Element aria-* attributes have valid values

    Pass
  • Accessibility: Background and foreground colors have a sufficient contrast ratio

    Elements must have sufficient color contrast (Failed on 1 element)
    Fail
    1 element fails this test learn more
    • #reload-button
  • Accessibility: Every image element has an alt attribute

    Pass
  • Accessibility: Every form element has a label

    Pass
  • Accessibility: No element has a tabindex attribute greater than 0

    Pass

Other

  • Manifest: Manifest's short_name won't be truncated when displayed on homescreen

    Fail
  • Manifest: Manifest's display property is set

    Manifest display property should be set.
    Fail
  • UX: Service worker makes use of push notifications, if appropriate (Coming soon)

    N/A
  • UX: Tap targets are appropriately sized for touch (Coming soon)

    N/A
  • UX: Payment forms marked up with [autocomplete] attributes (Coming soon)

    N/A
  • UX: Login forms marked up with [autocomplete] attributes (Coming soon)

    N/A
  • UX: Input fields use appropriate [type] attributes for custom keyboards (Coming soon)

    N/A

Performance Metrics

These encapsulate your app's performance.

  • Performance: Critical Request Chains: 2 The Critical Request Chains below show you what resources are required for first render of this page. Improve page load by reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources. Learn more.

    Fail
    • Longest request chain (shorter is better): 1
    • Longest chain duration (shorter is better): 268.04ms
    • Longest chain transfer size (smaller is better): 0.00KB
    • Initial navigation
      / (googlg.com) - 24.43ms, 0.00KB
      / (googlg.com) - 268.04ms, 0.00KB
  • Performance: User Timing marks and measures: 0 Consider instrumenting your app with the User Timing API to create custom, real-world measurements of key user experiences. Learn more.

    Pass

Fancier stuff

A list of newer features that you could be using in your app. These audits do not affect your score and are just suggestions.

New JavaScript features

  • JavaScript: Site does not use Date.now() in its own scripts Consider using performance.now() from the User Timing API instead. It provides high-precision timestamps, independent of the system clock. Learn more.

    Pass
  • JavaScript: Site does not use console.time() in its own scripts Consider using performance.mark() and performance.measure() from the User Timing API instead. They provide high-precision timestamps, independent of the system clock, and are integrated in the Chrome DevTools Timeline. Learn more.

    Pass