lighthouse 9.5.0-dev.20220720 → 9.5.0-dev.20220723

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/lighthouse-cli/test/smokehouse/__snapshots__/report-assert-test.js.snap +2 -2
  2. package/lighthouse-core/audits/accessibility/accesskeys.js +1 -1
  3. package/lighthouse-core/audits/accessibility/aria-allowed-attr.js +1 -1
  4. package/lighthouse-core/audits/accessibility/aria-command-name.js +1 -1
  5. package/lighthouse-core/audits/accessibility/aria-hidden-body.js +1 -1
  6. package/lighthouse-core/audits/accessibility/aria-hidden-focus.js +1 -1
  7. package/lighthouse-core/audits/accessibility/aria-input-field-name.js +1 -1
  8. package/lighthouse-core/audits/accessibility/aria-meter-name.js +1 -1
  9. package/lighthouse-core/audits/accessibility/aria-progressbar-name.js +1 -1
  10. package/lighthouse-core/audits/accessibility/aria-required-attr.js +1 -1
  11. package/lighthouse-core/audits/accessibility/aria-required-children.js +1 -1
  12. package/lighthouse-core/audits/accessibility/aria-required-parent.js +1 -1
  13. package/lighthouse-core/audits/accessibility/aria-roles.js +1 -1
  14. package/lighthouse-core/audits/accessibility/aria-toggle-field-name.js +1 -1
  15. package/lighthouse-core/audits/accessibility/aria-tooltip-name.js +1 -1
  16. package/lighthouse-core/audits/accessibility/aria-treeitem-name.js +1 -1
  17. package/lighthouse-core/audits/accessibility/aria-valid-attr-value.js +1 -1
  18. package/lighthouse-core/audits/accessibility/aria-valid-attr.js +1 -1
  19. package/lighthouse-core/audits/accessibility/button-name.js +1 -1
  20. package/lighthouse-core/audits/accessibility/bypass.js +1 -1
  21. package/lighthouse-core/audits/accessibility/color-contrast.js +1 -1
  22. package/lighthouse-core/audits/accessibility/definition-list.js +1 -1
  23. package/lighthouse-core/audits/accessibility/dlitem.js +1 -1
  24. package/lighthouse-core/audits/accessibility/document-title.js +1 -1
  25. package/lighthouse-core/audits/accessibility/duplicate-id-active.js +1 -1
  26. package/lighthouse-core/audits/accessibility/duplicate-id-aria.js +1 -1
  27. package/lighthouse-core/audits/accessibility/form-field-multiple-labels.js +1 -1
  28. package/lighthouse-core/audits/accessibility/frame-title.js +1 -1
  29. package/lighthouse-core/audits/accessibility/heading-order.js +1 -1
  30. package/lighthouse-core/audits/accessibility/html-has-lang.js +2 -2
  31. package/lighthouse-core/audits/accessibility/html-lang-valid.js +1 -1
  32. package/lighthouse-core/audits/accessibility/image-alt.js +1 -1
  33. package/lighthouse-core/audits/accessibility/input-image-alt.js +1 -1
  34. package/lighthouse-core/audits/accessibility/label.js +1 -1
  35. package/lighthouse-core/audits/accessibility/link-name.js +1 -1
  36. package/lighthouse-core/audits/accessibility/list.js +1 -1
  37. package/lighthouse-core/audits/accessibility/listitem.js +1 -1
  38. package/lighthouse-core/audits/accessibility/manual/custom-controls-labels.js +1 -1
  39. package/lighthouse-core/audits/accessibility/manual/custom-controls-roles.js +1 -1
  40. package/lighthouse-core/audits/accessibility/manual/focus-traps.js +1 -1
  41. package/lighthouse-core/audits/accessibility/manual/focusable-controls.js +1 -1
  42. package/lighthouse-core/audits/accessibility/manual/interactive-element-affordance.js +1 -1
  43. package/lighthouse-core/audits/accessibility/manual/logical-tab-order.js +1 -1
  44. package/lighthouse-core/audits/accessibility/manual/managed-focus.js +1 -1
  45. package/lighthouse-core/audits/accessibility/manual/offscreen-content-hidden.js +1 -1
  46. package/lighthouse-core/audits/accessibility/manual/use-landmarks.js +1 -1
  47. package/lighthouse-core/audits/accessibility/manual/visual-order-follows-dom.js +1 -1
  48. package/lighthouse-core/audits/accessibility/meta-refresh.js +1 -1
  49. package/lighthouse-core/audits/accessibility/meta-viewport.js +1 -1
  50. package/lighthouse-core/audits/accessibility/object-alt.js +1 -1
  51. package/lighthouse-core/audits/accessibility/tabindex.js +1 -1
  52. package/lighthouse-core/audits/accessibility/td-headers-attr.js +1 -1
  53. package/lighthouse-core/audits/accessibility/th-has-data-cells.js +1 -1
  54. package/lighthouse-core/audits/accessibility/valid-lang.js +1 -1
  55. package/lighthouse-core/audits/accessibility/video-caption.js +1 -1
  56. package/lighthouse-core/audits/apple-touch-icon.js +1 -1
  57. package/lighthouse-core/audits/autocomplete.js +1 -1
  58. package/lighthouse-core/audits/bootup-time.js +2 -2
  59. package/lighthouse-core/audits/byte-efficiency/efficient-animated-content.js +1 -1
  60. package/lighthouse-core/audits/byte-efficiency/legacy-javascript.js +1 -1
  61. package/lighthouse-core/audits/byte-efficiency/modern-image-formats.js +1 -1
  62. package/lighthouse-core/audits/byte-efficiency/offscreen-images.js +1 -1
  63. package/lighthouse-core/audits/byte-efficiency/render-blocking-resources.js +1 -1
  64. package/lighthouse-core/audits/byte-efficiency/total-byte-weight.js +1 -2
  65. package/lighthouse-core/audits/byte-efficiency/unminified-css.js +1 -1
  66. package/lighthouse-core/audits/byte-efficiency/unminified-javascript.js +1 -1
  67. package/lighthouse-core/audits/byte-efficiency/unused-css-rules.js +1 -1
  68. package/lighthouse-core/audits/byte-efficiency/unused-javascript.js +1 -1
  69. package/lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js +1 -1
  70. package/lighthouse-core/audits/byte-efficiency/uses-optimized-images.js +1 -1
  71. package/lighthouse-core/audits/byte-efficiency/uses-responsive-images.js +1 -1
  72. package/lighthouse-core/audits/byte-efficiency/uses-text-compression.js +1 -1
  73. package/lighthouse-core/audits/content-width.js +1 -1
  74. package/lighthouse-core/audits/critical-request-chains.js +1 -1
  75. package/lighthouse-core/audits/csp-xss.js +1 -1
  76. package/lighthouse-core/audits/deprecations.js +27 -6
  77. package/lighthouse-core/audits/dobetterweb/charset.js +1 -1
  78. package/lighthouse-core/audits/dobetterweb/doctype.js +1 -1
  79. package/lighthouse-core/audits/dobetterweb/dom-size.js +1 -1
  80. package/lighthouse-core/audits/dobetterweb/geolocation-on-start.js +1 -1
  81. package/lighthouse-core/audits/dobetterweb/js-libraries.js +1 -1
  82. package/lighthouse-core/audits/dobetterweb/no-document-write.js +1 -1
  83. package/lighthouse-core/audits/dobetterweb/no-vulnerable-libraries.js +1 -1
  84. package/lighthouse-core/audits/dobetterweb/notification-on-start.js +1 -1
  85. package/lighthouse-core/audits/dobetterweb/password-inputs-can-be-pasted-into.js +1 -1
  86. package/lighthouse-core/audits/dobetterweb/uses-http2.js +1 -1
  87. package/lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js +1 -1
  88. package/lighthouse-core/audits/errors-in-console.js +1 -1
  89. package/lighthouse-core/audits/font-display.js +2 -2
  90. package/lighthouse-core/audits/image-aspect-ratio.js +1 -1
  91. package/lighthouse-core/audits/image-size-responsive.js +2 -1
  92. package/lighthouse-core/audits/installable-manifest.js +2 -1
  93. package/lighthouse-core/audits/is-on-https.js +1 -1
  94. package/lighthouse-core/audits/largest-contentful-paint-element.js +1 -1
  95. package/lighthouse-core/audits/lcp-lazy-loaded.js +1 -1
  96. package/lighthouse-core/audits/long-tasks.js +1 -1
  97. package/lighthouse-core/audits/mainthread-work-breakdown.js +1 -1
  98. package/lighthouse-core/audits/manual/pwa-cross-browser.js +1 -1
  99. package/lighthouse-core/audits/manual/pwa-each-page-has-url.js +1 -1
  100. package/lighthouse-core/audits/manual/pwa-page-transitions.js +1 -1
  101. package/lighthouse-core/audits/maskable-icon.js +1 -1
  102. package/lighthouse-core/audits/metrics/cumulative-layout-shift.js +2 -1
  103. package/lighthouse-core/audits/metrics/experimental-interaction-to-next-paint.js +2 -1
  104. package/lighthouse-core/audits/metrics/first-contentful-paint-3g.js +2 -1
  105. package/lighthouse-core/audits/metrics/first-contentful-paint.js +1 -1
  106. package/lighthouse-core/audits/metrics/first-meaningful-paint.js +1 -1
  107. package/lighthouse-core/audits/metrics/interactive.js +2 -2
  108. package/lighthouse-core/audits/metrics/largest-contentful-paint.js +1 -1
  109. package/lighthouse-core/audits/metrics/max-potential-fid.js +2 -1
  110. package/lighthouse-core/audits/metrics/speed-index.js +1 -1
  111. package/lighthouse-core/audits/metrics/total-blocking-time.js +2 -1
  112. package/lighthouse-core/audits/network-rtt.js +1 -1
  113. package/lighthouse-core/audits/network-server-latency.js +1 -1
  114. package/lighthouse-core/audits/no-unload-listeners.js +1 -1
  115. package/lighthouse-core/audits/non-composited-animations.js +1 -1
  116. package/lighthouse-core/audits/performance-budget.js +2 -1
  117. package/lighthouse-core/audits/preload-fonts.js +1 -1
  118. package/lighthouse-core/audits/preload-lcp-image.js +1 -1
  119. package/lighthouse-core/audits/redirects.js +1 -1
  120. package/lighthouse-core/audits/resource-summary.js +2 -1
  121. package/lighthouse-core/audits/seo/canonical.js +1 -1
  122. package/lighthouse-core/audits/seo/crawlable-anchors.js +1 -1
  123. package/lighthouse-core/audits/seo/font-size.js +1 -1
  124. package/lighthouse-core/audits/seo/hreflang.js +1 -1
  125. package/lighthouse-core/audits/seo/http-status-code.js +1 -1
  126. package/lighthouse-core/audits/seo/is-crawlable.js +1 -1
  127. package/lighthouse-core/audits/seo/link-text.js +1 -1
  128. package/lighthouse-core/audits/seo/manual/structured-data.js +1 -1
  129. package/lighthouse-core/audits/seo/meta-description.js +1 -1
  130. package/lighthouse-core/audits/seo/plugins.js +1 -1
  131. package/lighthouse-core/audits/seo/robots-txt.js +2 -1
  132. package/lighthouse-core/audits/seo/tap-targets.js +1 -1
  133. package/lighthouse-core/audits/server-response-time.js +1 -1
  134. package/lighthouse-core/audits/service-worker.js +1 -1
  135. package/lighthouse-core/audits/splash-screen.js +2 -2
  136. package/lighthouse-core/audits/themed-omnibox.js +1 -1
  137. package/lighthouse-core/audits/third-party-facades.js +2 -1
  138. package/lighthouse-core/audits/third-party-summary.js +2 -1
  139. package/lighthouse-core/audits/timing-budget.js +1 -1
  140. package/lighthouse-core/audits/unsized-images.js +1 -1
  141. package/lighthouse-core/audits/user-timings.js +1 -1
  142. package/lighthouse-core/audits/uses-rel-preconnect.js +1 -1
  143. package/lighthouse-core/audits/uses-rel-preload.js +2 -1
  144. package/lighthouse-core/audits/valid-source-maps.js +1 -1
  145. package/lighthouse-core/audits/viewport.js +1 -1
  146. package/lighthouse-core/audits/work-during-interaction.js +1 -1
  147. package/lighthouse-core/lib/deprecations-strings.js +509 -0
  148. package/package.json +4 -4
  149. package/report/test/generator/report-generator-test.js +4 -4
  150. package/shared/localization/locales/en-US.json +266 -134
  151. package/shared/localization/locales/en-XL.json +266 -134
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
23
23
  description: 'Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) ' +
24
24
  'on elements helps ensure that text is pronounced correctly by a screen reader. ' +
25
- '[Learn more](https://dequeuniversity.com/rules/axe/4.4/valid-lang).',
25
+ '[Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.4/valid-lang).',
26
26
  };
27
27
 
28
28
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -23,7 +23,7 @@ const UIStrings = {
23
23
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
24
24
  description: 'When a video provides a caption it is easier for deaf and hearing impaired ' +
25
25
  'users to access its information. ' +
26
- '[Learn more](https://dequeuniversity.com/rules/axe/4.4/video-caption).',
26
+ '[Learn more about video captions](https://dequeuniversity.com/rules/axe/4.4/video-caption).',
27
27
  };
28
28
 
29
29
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user that having an apple-touch-icon allows websites to include an app icon to their installed progressive web apps, similar to a native app. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. "apple-touch-icon" is an HTML attribute value and should not be translated. */
21
21
  description: 'For ideal appearance on iOS when users add a progressive web app to the home ' +
22
22
  'screen, define an `apple-touch-icon`. It must point to a non-transparent 192px (or 180px) ' +
23
- 'square PNG. [Learn More](https://web.dev/apple-touch-icon/).',
23
+ 'square PNG. [Learn more about `apple-touch-icon`](https://web.dev/apple-touch-icon/).',
24
24
  /** Warning that HTML attribute `apple-touch-icon-precomposed` should not be used in favor of `apple-touch-icon`. "apple-touch-icon-precomposed" and "apple-touch-icon" are HTML attribute values and should not be translated. */
25
25
  precomposedWarning: '`apple-touch-icon-precomposed` is out of date; ' +
26
26
  '`apple-touch-icon` is preferred.',
@@ -25,7 +25,7 @@ const UIStrings = {
25
25
  description: '`autocomplete` helps users submit forms quicker. To reduce user ' +
26
26
  'effort, consider enabling by setting the `autocomplete` ' +
27
27
  'attribute to a valid value.' +
28
- ' [Learn more](https://developers.google.com/web/fundamentals/design-and-ux/input/forms#use_metadata_to_enable_auto-complete)',
28
+ ' [Learn more about `autocomplete` in forms](https://developers.google.com/web/fundamentals/design-and-ux/input/forms#use_metadata_to_enable_auto-complete)',
29
29
  /** Label for a column in a data table; entries will be the autocomplete token suggestions based on heuristics. */
30
30
  columnSuggestions: 'Suggested Token',
31
31
  /** Label for a column in a data table; entries will be the incorrect optional autocomplete tokens or prompting user to review them. */
@@ -19,8 +19,8 @@ const UIStrings = {
19
19
  failureTitle: 'Reduce JavaScript execution time',
20
20
  /** Description of a Lighthouse audit that tells the user that they should reduce the amount of time spent executing javascript and one method of doing so. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
21
21
  description: 'Consider reducing the time spent parsing, compiling, and executing JS. ' +
22
- 'You may find delivering smaller JS payloads helps with this. [Learn ' +
23
- 'more](https://web.dev/bootup-time/).',
22
+ 'You may find delivering smaller JS payloads helps with this. ' +
23
+ '[Learn how to reduce Javascript execution time](https://web.dev/bootup-time/).',
24
24
  /** Label for the total time column in a data table; entries will be the number of milliseconds spent executing per resource loaded by the page. */
25
25
  columnTotal: 'Total CPU Time',
26
26
  /** Label for a time column in a data table; entries will be the number of milliseconds spent evaluating script for every script loaded by the page. */
@@ -18,7 +18,7 @@ const UIStrings = {
18
18
  /** Description of a Lighthouse audit that tells the user *why* they should use video instead of GIF format for delivering animated content. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
19
19
  description: 'Large GIFs are inefficient for delivering animated content. Consider using ' +
20
20
  'MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save ' +
21
- 'network bytes. [Learn more](https://web.dev/efficient-animated-content/)',
21
+ 'network bytes. [Learn more about efficient video formats](https://web.dev/efficient-animated-content/)',
22
22
  };
23
23
 
24
24
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -40,7 +40,7 @@ const UIStrings = {
40
40
  // eslint-disable-next-line max-len
41
41
  // TODO: web.dev article. this codelab is good starting place: https://web.dev/codelab-serve-modern-code/
42
42
  /** Description of a Lighthouse audit that tells the user about old JavaScript that is no longer needed. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
43
- description: 'Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren\'t necessary for modern browsers. For your bundled JavaScript, adopt a modern script deployment strategy using module/nomodule feature detection to reduce the amount of code shipped to modern browsers, while retaining support for legacy browsers. [Learn More](https://web.dev/publish-modern-javascript/)',
43
+ description: 'Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren\'t necessary for modern browsers. For your bundled JavaScript, adopt a modern script deployment strategy using module/nomodule feature detection to reduce the amount of code shipped to modern browsers, while retaining support for legacy browsers. [Learn how to use modern JavaScript](https://web.dev/publish-modern-javascript/)',
44
44
  };
45
45
 
46
46
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -18,7 +18,7 @@ const UIStrings = {
18
18
  /** Description of a Lighthouse audit that tells the user *why* they should use newer and more efficient image formats. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
19
19
  description: 'Image formats like WebP and AVIF often provide better ' +
20
20
  'compression than PNG or JPEG, which means faster downloads and less data consumption. ' +
21
- '[Learn more](https://web.dev/uses-webp-images/).',
21
+ '[Learn more about modern image formats](https://web.dev/uses-webp-images/).',
22
22
  };
23
23
 
24
24
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -24,7 +24,7 @@ const UIStrings = {
24
24
  description:
25
25
  'Consider lazy-loading offscreen and hidden images after all critical resources have ' +
26
26
  'finished loading to lower time to interactive. ' +
27
- '[Learn more](https://web.dev/offscreen-images/).',
27
+ '[Learn how to defer offscreen images](https://web.dev/offscreen-images/).',
28
28
  };
29
29
 
30
30
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -36,7 +36,7 @@ const UIStrings = {
36
36
  /** Description of a Lighthouse audit that tells the user *why* they should reduce or remove network resources that block the initial render of the page. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
37
37
  description: 'Resources are blocking the first paint of your page. Consider ' +
38
38
  'delivering critical JS/CSS inline and deferring all non-critical ' +
39
- 'JS/styles. [Learn more](https://web.dev/render-blocking-resources/).',
39
+ 'JS/styles. [Learn how to eliminate render-blocking resources](https://web.dev/render-blocking-resources/).',
40
40
  };
41
41
 
42
42
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -18,8 +18,7 @@ const UIStrings = {
18
18
  /** Description of a Lighthouse audit that tells the user *why* they should reduce the size of the network resources required by the page. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
19
19
  description:
20
20
  'Large network payloads cost users real money and are highly correlated with ' +
21
- 'long load times. [Learn ' +
22
- 'more](https://web.dev/total-byte-weight/).',
21
+ 'long load times. [Learn how to reduce payload sizes](https://web.dev/total-byte-weight/).',
23
22
  /** Used to summarize the total byte size of the page and all its network requests. The `{totalBytes}` placeholder will be replaced with the total byte sizes, shown in kibibytes (e.g. 142 KiB) */
24
23
  displayValue: 'Total size was {totalBytes, number, bytes}\xa0KiB',
25
24
  };
@@ -15,7 +15,7 @@ const UIStrings = {
15
15
  title: 'Minify CSS',
16
16
  /** Description of a Lighthouse audit that tells the user *why* they should minify (remove whitespace) the page's CSS code. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
17
17
  description: 'Minifying CSS files can reduce network payload sizes. ' +
18
- '[Learn more](https://web.dev/unminified-css/).',
18
+ '[Learn how to minify CSS](https://web.dev/unminified-css/).',
19
19
  };
20
20
 
21
21
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -15,7 +15,7 @@ const UIStrings = {
15
15
  title: 'Minify JavaScript',
16
16
  /** Description of a Lighthouse audit that tells the user *why* they should minify the page’s JS code to reduce file size. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
17
17
  description: 'Minifying JavaScript files can reduce payload sizes and script parse time. ' +
18
- '[Learn more](https://web.dev/unminified-javascript/).',
18
+ '[Learn how to minify JavaScript](https://web.dev/unminified-javascript/).',
19
19
  };
20
20
 
21
21
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -15,7 +15,7 @@ const UIStrings = {
15
15
  /** Description of a Lighthouse audit that tells the user *why* they should defer loading any content in CSS that isn’t needed at page load. This is displayed after a user expands the section to see more. No word length limits. 'Learn More' becomes link text to additional documentation. */
16
16
  description: 'Reduce unused rules from stylesheets and defer CSS not used for ' +
17
17
  'above-the-fold content to decrease bytes consumed by network activity. ' +
18
- '[Learn more](https://web.dev/unused-css-rules/).',
18
+ '[Learn how to reduce unused CSS](https://web.dev/unused-css-rules/).',
19
19
  };
20
20
 
21
21
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -16,7 +16,7 @@ const UIStrings = {
16
16
  title: 'Reduce unused JavaScript',
17
17
  /** Description of a Lighthouse audit that tells the user *why* they should reduce JavaScript that is never needed/evaluated by the browser. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
18
18
  description: 'Reduce unused JavaScript and defer loading scripts until they are required to ' +
19
- 'decrease bytes consumed by network activity. [Learn more](https://web.dev/unused-javascript/).',
19
+ 'decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://web.dev/unused-javascript/).',
20
20
  };
21
21
 
22
22
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -21,7 +21,7 @@ const UIStrings = {
21
21
  /** Description of a Lighthouse audit that tells the user *why* they need to adopt a long cache lifetime policy. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
22
22
  description:
23
23
  'A long cache lifetime can speed up repeat visits to your page. ' +
24
- '[Learn more](https://web.dev/uses-long-cache-ttl/).',
24
+ '[Learn more about efficient cache policies](https://web.dev/uses-long-cache-ttl/).',
25
25
  /** [ICU Syntax] Label for the audit identifying network resources with inefficient cache values. Clicking this will expand the audit to show the resources. */
26
26
  displayValue: `{itemCount, plural,
27
27
  =1 {1 resource found}
@@ -18,7 +18,7 @@ const UIStrings = {
18
18
  title: 'Efficiently encode images',
19
19
  /** Description of a Lighthouse audit that tells the user *why* they need to efficiently encode images. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
20
20
  description: 'Optimized images load faster and consume less cellular data. ' +
21
- '[Learn more](https://web.dev/uses-optimized-images/).',
21
+ '[Learn how to efficiently encode images](https://web.dev/uses-optimized-images/).',
22
22
  };
23
23
 
24
24
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -26,7 +26,7 @@ const UIStrings = {
26
26
  description:
27
27
  'Serve images that are appropriately-sized to save cellular data ' +
28
28
  'and improve load time. ' +
29
- '[Learn more](https://web.dev/uses-responsive-images/).',
29
+ '[Learn how to size images](https://web.dev/uses-responsive-images/).',
30
30
  };
31
31
 
32
32
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -19,7 +19,7 @@ const UIStrings = {
19
19
  /** Description of a Lighthouse audit that tells the user *why* their text-based resources should be served with compression (like gzip). This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
20
20
  description: 'Text-based resources should be served with compression (gzip, deflate or' +
21
21
  ' brotli) to minimize total network bytes.' +
22
- ' [Learn more](https://web.dev/uses-text-compression/).',
22
+ ' [Learn more about text compression](https://web.dev/uses-text-compression/).',
23
23
  };
24
24
 
25
25
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -16,7 +16,7 @@ const UIStrings = {
16
16
  /** Description of a Lighthouse audit that tells the user why they should care that a site's content size should match its viewport size, which is the size of the screen the site is displayed on. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
17
17
  description: 'If the width of your app\'s content doesn\'t match the width ' +
18
18
  'of the viewport, your app might not be optimized for mobile screens. ' +
19
- '[Learn more](https://web.dev/content-width/).',
19
+ '[Learn how to size content for the viewport](https://web.dev/content-width/).',
20
20
  /**
21
21
  * @description Explanatory message stating that the viewport size and window size differ.
22
22
  * @example {100} innerWidth
@@ -17,7 +17,7 @@ const UIStrings = {
17
17
  'loaded with a high priority. Consider reducing ' +
18
18
  'the length of chains, reducing the download size of resources, or ' +
19
19
  'deferring the download of unnecessary resources to improve page load. ' +
20
- '[Learn more](https://web.dev/critical-request-chains/).',
20
+ '[Learn how to avoid chaining critical requests](https://web.dev/critical-request-chains/).',
21
21
  /** [ICU Syntax] Label for an audit identifying the number of sequences of dependent network requests used to load the page. */
22
22
  displayValue: `{itemCount, plural,
23
23
  =1 {1 chain found}
@@ -18,7 +18,7 @@ const UIStrings = {
18
18
  /** Description of a Lighthouse audit that evaluates the security of a page's CSP. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. "CSP" stands for "Content Security Policy". "XSS" stands for "Cross Site Scripting". "CSP" and "XSS" do not need to be translated. */
19
19
  description: 'A strong Content Security Policy (CSP) significantly ' +
20
20
  'reduces the risk of cross-site scripting (XSS) attacks. ' +
21
- '[Learn more](https://web.dev/csp-xss/)',
21
+ '[Learn how to use a CSP to prevent XSS](https://web.dev/csp-xss/)',
22
22
  /** Summary text for the results of a Lighthouse audit that evaluates the security of a page's CSP. This is displayed if no CSP is being enforced. "CSP" stands for "Content Security Policy". "CSP" does not need to be translated. */
23
23
  noCsp: 'No CSP found in enforcement mode',
24
24
  /** Message shown when one or more CSPs are defined in a <meta> tag. Shown in a table with a list of other CSP bypasses and warnings. "CSP" stands for "Content Security Policy". "CSP" and "HTTP" do not need to be translated. */
@@ -13,7 +13,9 @@ import {Audit} from './audit.js';
13
13
 
14
14
  import JsBundles from '../computed/js-bundles.js';
15
15
  import * as i18n from '../lib/i18n/i18n.js';
16
+ import {getIssueDetailDescription} from '../lib/deprecations-strings.js';
16
17
 
18
+ /* eslint-disable max-len */
17
19
  const UIStrings = {
18
20
  /** Title of a Lighthouse audit that provides detail on the use of deprecated APIs. This descriptive title is shown to users when the page does not use deprecated APIs. */
19
21
  title: 'Avoids deprecated APIs',
@@ -21,7 +23,7 @@ const UIStrings = {
21
23
  failureTitle: 'Uses deprecated APIs',
22
24
  /** Description of a Lighthouse audit that tells the user why they should not use deprecated APIs on their page. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
23
25
  description: 'Deprecated APIs will eventually be removed from the browser. ' +
24
- '[Learn more](https://web.dev/deprecations/).',
26
+ '[Learn more about deprecated APIs](https://web.dev/deprecations/).',
25
27
  /** [ICU Syntax] Label for the audit identifying the number of warnings generated by using deprecated APIs. */
26
28
  displayValue: `{itemCount, plural,
27
29
  =1 {1 warning found}
@@ -32,6 +34,7 @@ const UIStrings = {
32
34
  /** Table column header for line of code (eg. 432) that is using a deprecated API. */
33
35
  columnLine: 'Line',
34
36
  };
37
+ /* eslint-enable max-len */
35
38
 
36
39
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
37
40
 
@@ -58,17 +61,35 @@ class Deprecations extends Audit {
58
61
  const bundles = await JsBundles.request(artifacts, context);
59
62
 
60
63
  const deprecations = artifacts.InspectorIssues.deprecationIssue
61
- // TODO: translate these strings.
62
- // see https://github.com/GoogleChrome/lighthouse/issues/13895
63
- .filter(deprecation => !deprecation.type || deprecation.type === 'Untranslated')
64
64
  .map(deprecation => {
65
65
  const {scriptId, url, lineNumber, columnNumber} = deprecation.sourceCodeLocation;
66
66
  const bundle = bundles.find(bundle => bundle.script.scriptId === scriptId);
67
- return {
68
- value: deprecation.message || '',
67
+ const deprecationMeta = getIssueDetailDescription(deprecation);
68
+
69
+ /** @type {LH.Audit.Details.TableSubItems=} */
70
+ let subItems = undefined;
71
+ if (deprecationMeta.links.length) {
72
+ subItems = {
73
+ type: 'subitems',
74
+ items: deprecationMeta.links.map(link => ({
75
+ type: 'link',
76
+ url: link.link,
77
+ text: link.linkTitle,
78
+ })),
79
+ };
80
+ }
81
+
82
+ // @ts-expect-error: The english string used to be included on the protocol, but no longer is.
83
+ const legacyMessage = deprecation.message;
84
+
85
+ /** @type {LH.Audit.Details.TableItem} */
86
+ const item = {
87
+ value: deprecationMeta.message || legacyMessage || deprecation.type,
69
88
  // Protocol.Audits.SourceCodeLocation.columnNumber is 1-indexed, but we use 0-indexed.
70
89
  source: Audit.makeSourceLocation(url, lineNumber, columnNumber - 1, bundle),
90
+ subItems,
71
91
  };
92
+ return item;
72
93
  });
73
94
 
74
95
  /** @type {LH.Audit.Details.Table['headings']} */
@@ -24,7 +24,7 @@ const UIStrings = {
24
24
  /** Description of a Lighthouse audit that tells the user why the charset needs to be defined early on. */
25
25
  description: 'A character encoding declaration is required. It can be done with a `<meta>` tag ' +
26
26
  'in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. ' +
27
- '[Learn more](https://web.dev/charset/).',
27
+ '[Learn more about declaring the character encoding](https://web.dev/charset/).',
28
28
  };
29
29
 
30
30
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -16,7 +16,7 @@ const UIStrings = {
16
16
  /** Description of a Lighthouse audit that tells the user why they should define an HTML doctype. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
17
17
  description: 'Specifying a doctype prevents the browser ' +
18
18
  'from switching to quirks-mode. ' +
19
- '[Learn more](https://web.dev/doctype/).',
19
+ '[Learn more about the doctype declaration](https://web.dev/doctype/).',
20
20
  /** Explanatory message stating that the document has no doctype. */
21
21
  explanationNoDoctype: 'Document must contain a doctype',
22
22
  /** Explanatory message stating that the document has wrong doctype */
@@ -23,7 +23,7 @@ const UIStrings = {
23
23
  /** Description of a Lighthouse audit that tells the user *why* they should reduce the size of the web page's DOM. The size of a DOM is characterized by the total number of DOM elements and greatest DOM depth. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
24
24
  description: 'A large DOM will increase memory usage, cause longer ' +
25
25
  '[style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), ' +
26
- 'and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://web.dev/dom-size/).',
26
+ 'and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://web.dev/dom-size/).',
27
27
  /** Table column header for the type of statistic. These statistics describe how big the DOM is (count of DOM elements, children, depth). */
28
28
  columnStatistic: 'Statistic',
29
29
  /** Table column header for the observed value of the DOM statistic. */
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  /** Description of a Lighthouse audit that tells the user why they should not ask for geolocation permissions on load. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
23
23
  description: 'Users are mistrustful of or confused by sites that request their ' +
24
24
  'location without context. Consider tying the request to a user action instead. ' +
25
- '[Learn more](https://web.dev/geolocation-on-start/).',
25
+ '[Learn more about the geolocation permission](https://web.dev/geolocation-on-start/).',
26
26
  };
27
27
 
28
28
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -17,7 +17,7 @@ const UIStrings = {
17
17
  /** Title of a Lighthouse audit that provides detail on the Javascript libraries that are used on the page. */
18
18
  title: 'Detected JavaScript libraries',
19
19
  /** Description of a Lighthouse audit that tells the user what this audit is detecting. This is displayed after a user expands the section to see more. No character length limits. */
20
- description: 'All front-end JavaScript libraries detected on the page. [Learn more](https://web.dev/js-libraries/).',
20
+ description: 'All front-end JavaScript libraries detected on the page. [Learn more about this JavaScript library detection diagnostic audit](https://web.dev/js-libraries/).',
21
21
  /** Label for a column in a data table; entries will be the version numbers of the detected Javascript libraries. */
22
22
  columnVersion: 'Version',
23
23
  };
@@ -39,7 +39,7 @@ const UIStrings = {
39
39
  /** Description of a Lighthouse audit that tells the user why they should avoid `document.write`. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
40
40
  description: 'For users on slow connections, external scripts dynamically injected via ' +
41
41
  '`document.write()` can delay page load by tens of seconds. ' +
42
- '[Learn more](https://web.dev/no-document-write/).',
42
+ '[Learn how to avoid document.write()](https://web.dev/no-document-write/).',
43
43
  };
44
44
 
45
45
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -32,7 +32,7 @@ const UIStrings = {
32
32
  /** Description of a Lighthouse audit that tells the user why they should be concerned about the third party Javascript libraries that they use. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
33
33
  description: 'Some third-party scripts may contain known security vulnerabilities ' +
34
34
  'that are easily identified and exploited by attackers. ' +
35
- '[Learn more](https://web.dev/no-vulnerable-libraries/).',
35
+ '[Learn more about vulnerable libraries](https://web.dev/no-vulnerable-libraries/).',
36
36
  /** [ICU Syntax] Label for the audit identifying the number of vulnerable Javascript libraries found. */
37
37
  displayValue: `{itemCount, plural,
38
38
  =1 {1 vulnerability detected}
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  /** Description of a Lighthouse audit that tells the user why they should not ask for notification permission on load. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
23
23
  description: 'Users are mistrustful of or confused by sites that request to send ' +
24
24
  'notifications without context. Consider tying the request to user gestures ' +
25
- 'instead. [Learn more](https://web.dev/notification-on-start/).',
25
+ 'instead. [Learn more about responsibly getting permission for notifications](https://web.dev/notification-on-start/).',
26
26
  };
27
27
 
28
28
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -15,7 +15,7 @@ const UIStrings = {
15
15
  failureTitle: 'Prevents users to paste into password fields',
16
16
  /** Description of a Lighthouse audit that tells the user why they should allow pasting of content into password fields. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
17
17
  description: 'Preventing password pasting undermines good security policy. ' +
18
- '[Learn more](https://web.dev/password-inputs-can-be-pasted-into/).',
18
+ '[Learn more about user-friendly password fields](https://web.dev/password-inputs-can-be-pasted-into/).',
19
19
  };
20
20
 
21
21
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -30,7 +30,7 @@ const UIStrings = {
30
30
  title: 'Use HTTP/2',
31
31
  /** Description of a Lighthouse audit that tells the user why they should use HTTP/2. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
32
32
  description: 'HTTP/2 offers many benefits over HTTP/1.1, including binary headers and ' +
33
- 'multiplexing. [Learn more](https://web.dev/uses-http2/).',
33
+ 'multiplexing. [Learn more about HTTP/2](https://web.dev/uses-http2/).',
34
34
  /** [ICU Syntax] Label identifying the number of network requests that were not served with HTTP/2. */
35
35
  displayValue: `{itemCount, plural,
36
36
  =1 {1 request not served via HTTP/2}
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  /** Description of a Lighthouse audit that tells the user why they should use passive event listeners on the page. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
23
23
  description: 'Consider marking your touch and wheel event listeners as `passive` ' +
24
24
  'to improve your page\'s scroll performance. ' +
25
- '[Learn more](https://web.dev/uses-passive-event-listeners/).',
25
+ '[Learn more about adopting passive event listeners](https://web.dev/uses-passive-event-listeners/).',
26
26
  };
27
27
 
28
28
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -24,7 +24,7 @@ const UIStrings = {
24
24
  /** Description of a Lighthouse audit that tells the user why errors being logged to the devtools console are a cause for concern and so should be fixed. This is displayed after a user expands the section to see more. No character length limits. */
25
25
  description: 'Errors logged to the console indicate unresolved problems. ' +
26
26
  'They can come from network request failures and other browser concerns. ' +
27
- '[Learn more](https://web.dev/errors-in-console/)',
27
+ '[Learn more about this errors in console diagnostic audit](https://web.dev/errors-in-console/)',
28
28
  };
29
29
 
30
30
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -21,9 +21,9 @@ const UIStrings = {
21
21
  failureTitle: 'Ensure text remains visible during webfont load',
22
22
  /** Description of a Lighthouse audit that tells the user *why* they should use the font-display CSS feature. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
23
23
  description:
24
- 'Leverage the font-display CSS feature to ensure text is user-visible while ' +
24
+ 'Leverage the `font-display` CSS feature to ensure text is user-visible while ' +
25
25
  'webfonts are loading. ' +
26
- '[Learn more](https://web.dev/font-display/).',
26
+ '[Learn more about `font-display`](https://web.dev/font-display/).',
27
27
  /**
28
28
  * @description [ICU Syntax] A warning message that is shown when Lighthouse couldn't automatically check some of the page's fonts, telling the user that they will need to manually check the fonts coming from a certain URL origin.
29
29
  * @example {https://font.cdn.com/} fontOrigin
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  failureTitle: 'Displays images with incorrect aspect ratio',
23
23
  /** Description of a Lighthouse audit that tells the user why they should maintain the correct aspect ratios for all images. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
24
24
  description: 'Image display dimensions should match natural aspect ratio. ' +
25
- '[Learn more](https://web.dev/image-aspect-ratio/).',
25
+ '[Learn more about image aspect ratio](https://web.dev/image-aspect-ratio/).',
26
26
  /** Label for a column in a data table; entries in the column will be the numeric aspect ratio of an image as displayed in a web page. */
27
27
  columnDisplayed: 'Aspect Ratio (Displayed)',
28
28
  /** Label for a column in a data table; entries in the column will be the numeric aspect ratio of the raw (actual) image. */
@@ -23,7 +23,8 @@ const UIStrings = {
23
23
  failureTitle: 'Serves images with low resolution',
24
24
  /** Description of a Lighthouse audit that tells the user why they should maintain an appropriate size for all images. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
25
25
  description: 'Image natural dimensions should be proportional to the display size and the ' +
26
- 'pixel ratio to maximize image clarity. [Learn more](https://web.dev/serve-responsive-images/).',
26
+ 'pixel ratio to maximize image clarity. ' +
27
+ '[Learn how to provide responsive images](https://web.dev/serve-responsive-images/).',
27
28
  /** Label for a column in a data table; entries in the column will be a string representing the displayed size of the image. */
28
29
  columnDisplayed: 'Displayed size',
29
30
  /** Label for a column in a data table; entries in the column will be a string representing the actual size of the image. */
@@ -16,7 +16,8 @@ const UIStrings = {
16
16
  /** Title of a Lighthouse audit that provides detail on if a website is installable as an application. This descriptive title is shown to users when a webapp is not installable. */
17
17
  'failureTitle': 'Web app manifest or service worker do not meet the installability requirements',
18
18
  /** Description of a Lighthouse audit that tells the user why installability is important for webapps. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
19
- 'description': `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. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. [Learn more](https://web.dev/installable-manifest/).`,
19
+ 'description': `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. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. ' +
20
+ '[Learn more about manifest installability requirements](https://web.dev/installable-manifest/).`,
20
21
  /** Description Table column header for the observed value of the Installability failure reason statistic. */
21
22
  'columnValue': 'Failure reason',
22
23
  /**
@@ -23,7 +23,7 @@ const UIStrings = {
23
23
  'over HTTPS. HTTPS prevents intruders from tampering with or passively listening ' +
24
24
  'in on the communications between your app and your users, and is a prerequisite for ' +
25
25
  'HTTP/2 and many new web platform APIs. ' +
26
- '[Learn more](https://web.dev/is-on-https/).',
26
+ '[Learn more about HTTPS](https://web.dev/is-on-https/).',
27
27
  /** [ICU Syntax] Label identifying the number of insecure network requests found by an audit of a web page. */
28
28
  displayValue: `{itemCount, plural,
29
29
  =1 {1 insecure request found}
@@ -13,7 +13,7 @@ const UIStrings = {
13
13
  title: 'Largest Contentful Paint element',
14
14
  /** Description of a Lighthouse audit that tells the user that the element shown was determined to be the Largest Contentful Paint. */
15
15
  description: 'This is the largest contentful element painted within the viewport. ' +
16
- '[Learn More](https://web.dev/lighthouse-largest-contentful-paint/)',
16
+ '[Learn more about the Largest Contentful Paint element](https://web.dev/lighthouse-largest-contentful-paint/)',
17
17
  };
18
18
 
19
19
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -14,7 +14,7 @@ const UIStrings = {
14
14
  /** Title of a Lighthouse audit that provides detail on whether the largest above-the-fold image was loaded with sufficient priority. This descriptive title is shown to users when the image was loaded inefficiently using the `loading=lazy` attribute. */
15
15
  failureTitle: 'Largest Contentful Paint image was lazily loaded',
16
16
  /** Description of a Lighthouse audit that tells the user why the advice is important. This is displayed after a user expands the section to see more. No character length limits. */
17
- description: 'Above-the-fold images that are lazily loaded render later in the page lifecycle, which can delay the largest contentful paint. [Learn more](https://web.dev/lcp-lazy-loading/).',
17
+ description: 'Above-the-fold images that are lazily loaded render later in the page lifecycle, which can delay the largest contentful paint. [Learn more about optimal lazy loading](https://web.dev/lcp-lazy-loading/).',
18
18
  };
19
19
 
20
20
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  /** Description of a diagnostic LH audit that shows the user the longest running tasks that occur when the page loads. */
23
23
  description: 'Lists the longest tasks on the main thread, ' +
24
24
  'useful for identifying worst contributors to input delay. ' +
25
- '[Learn more](https://web.dev/long-tasks-devtools/)',
25
+ '[Learn how to avoid long main-thread tasks](https://web.dev/long-tasks-devtools/)',
26
26
  /** [ICU Syntax] Label identifying the number of long-running CPU tasks that occurred while loading a web page. */
27
27
  displayValue: `{itemCount, plural,
28
28
  =1 {# long task found}
@@ -23,7 +23,7 @@ const UIStrings = {
23
23
  /** Description of a Lighthouse audit that tells the user *why* they should reduce JS execution times. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
24
24
  description: 'Consider reducing the time spent parsing, compiling and executing JS. ' +
25
25
  'You may find delivering smaller JS payloads helps with this. ' +
26
- '[Learn more](https://web.dev/mainthread-work-breakdown/)',
26
+ '[Learn how to minimize main-thread work](https://web.dev/mainthread-work-breakdown/)',
27
27
  /** Label for the Main Thread Category column in data tables, rows will have a main thread Category and main thread Task Name. */
28
28
  columnCategory: 'Category',
29
29
  };
@@ -14,7 +14,7 @@ const UIStrings = {
14
14
  title: 'Site works cross-browser',
15
15
  /** Description of a Lighthouse audit that tells the user why they should make sites work across different browsers. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
16
16
  description: 'To reach the most number of users, sites should work across ' +
17
- 'every major browser. [Learn more](https://web.dev/pwa-cross-browser/).',
17
+ 'every major browser. [Learn about cross-browser compatibility](https://web.dev/pwa-cross-browser/).',
18
18
  };
19
19
 
20
20
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -13,7 +13,7 @@ const UIStrings = {
13
13
  title: 'Each page has a URL',
14
14
  /** Description of a Lighthouse audit that tells the user why they should use unique URLs for each web page. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
15
15
  description: 'Ensure individual pages are deep linkable via URL and that URLs are ' +
16
- 'unique for the purpose of shareability on social media. [Learn more](https://web.dev/pwa-each-page-has-url/).',
16
+ 'unique for the purpose of shareability on social media. [Learn more about providing deep links](https://web.dev/pwa-each-page-has-url/).',
17
17
  };
18
18
 
19
19
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -13,7 +13,7 @@ const UIStrings = {
13
13
  title: 'Page transitions don\'t feel like they block on the network',
14
14
  /** Description of a Lighthouse audit that tells the user why they should make transitions in their web app feel fast. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
15
15
  description: 'Transitions should feel snappy as you tap around, even on a slow network. ' +
16
- 'This experience is key to a user\'s perception of performance. [Learn more](https://web.dev/pwa-page-transitions/).',
16
+ 'This experience is key to a user\'s perception of performance. [Learn more about page transitions](https://web.dev/pwa-page-transitions/).',
17
17
  };
18
18
 
19
19
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -17,7 +17,7 @@ const UIStrings = {
17
17
  /** Description of a Lighthouse audit that tells the user why they their manifest should have at least one maskable icon. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
18
18
  description: 'A maskable icon ensures that the image fills the entire ' +
19
19
  'shape without being letterboxed when installing ' +
20
- 'the app on a device. [Learn more](https://web.dev/maskable-icon-audit/).',
20
+ 'the app on a device. [Learn about maskable manifest icons](https://web.dev/maskable-icon-audit/).',
21
21
  };
22
22
 
23
23
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);
@@ -12,7 +12,8 @@ import * as i18n from '../../lib/i18n/i18n.js';
12
12
  const UIStrings = {
13
13
  /** Description of the Cumulative Layout Shift metric that indicates how much the page changes its layout while it loads. If big segments of the page shift their location during load, the Cumulative Layout Shift will be higher. This description is displayed within a tooltip when the user hovers on the metric name to see more. No character length limits. 'Learn More' becomes link text to additional documentation. */
14
14
  description: 'Cumulative Layout Shift measures the movement of visible ' +
15
- 'elements within the viewport. [Learn more](https://web.dev/cls/).',
15
+ 'elements within the viewport. ' +
16
+ '[Learn more about the Cumulative Layout Shift metric](https://web.dev/cls/).',
16
17
  };
17
18
 
18
19
  const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings);