Lighthouse is an open-source, automated tool for improving the quality of your web apps. Lighthouse analyzes web apps & sites, collecting modern performance metrics and insights on best practices.

Lighthouse can be run as a Chrome Extension, from the command line, or used programmatically as a Node module. You give Lighthouse a URL that you want to audit, it runs a barrage of tests against the page, and then it generates a report on how well the page did. From here you can use the failing tests as indicators on what you can do to improve your app.
Here are the audit references it runs:

  1. Background and Foreground Colors Have Sufficient Contrast Ratio
  2. Cache Contains start_url From Manifest
  3. Content Sized Correctly for Viewport
  4. Critical Request Chains
  5. Element ARIA Attributes Are Allowed For This Role
  6. Element ARIA Attributes Are Valid
  7. Element ARIA Attributes Have Valid Values
  8. Elements With ARIA Roles Have Required Attributes
  9. Estimated Input Latency
  10. Every Form Element Has A Label
  11. Every Image Has An Alt Attribute
  12. First Meaningful Paint
  13. Has a Registered Service Worker
  14. HTML Has Viewport Meta Tag
  15. Manifest Contains Icons at Least 192px
  16. Manifest Contains Background Color
  17. Manifest Contains Name
  18. Manifest Contains Short Name
  19. Manifest Contains Start URL
  20. Manifest Contains Theme Color
  21. Manifest Exists
  22. Manifest’s Display Property Is Set
  23. Manifest’s Short Name Won’t Be Truncated
  24. No Element Has A Tabindex Attribute Greater Than Zero
  25. Page Contains Some Content When Its Scripts Are Not Available
  26. Page Does Not Automatically Request Geolocation On Page Load
  27. Page Does Not Automatically Request Notfication Permissions On Page Load
  28. Site Does Not Use Application Cache
  29. Site Does Not Use console.time()
  30. Site Does Not Use Resources That Delay First Paint
  31. Site Does Not Use
  32. Site Does Not Use document.write()
  33. Site Does Not Use Mutation Events
  34. Site Does Not Use The Old CSS Flexbox
  35. Site Does Not Use Web SQL
  36. Site Is On HTTPS
  37. Site Opens External Anchors Using rel=”noopener”
  38. Site Redirects HTTP Traffic to HTTPS
  39. Site Uses HTTP/2
  40. Site Uses Passive Event Listeners
  41. Speed Index
  42. Time to Interactive
  43. URL Responds with a 200 When Offline
  44. User Timing Marks and Measures
“Practice without improvement is meaningless.”
-Chuck Knox