Repository: GoogleChrome/lighthouse
Pull request #8823 (2019-05-03 00:20:32)

core(a11y): update scoring weights based on severity
<!-- Thank you for submitting a pull request! -->

**Summary**
<!-- What kind of change does this PR introduce? -->
<!-- Is this a bugfix, feature, refactoring, build related change, etc? -->
Re-weight a11y audits using the same severity scale that axe uses for their docs.

<!-- Describe the need for this change -->
Items which really should be critical failures were weighted too low.

<!-- Link any documentation or information that would help understand this change -->
https://dequeuniversity.com/rules/axe/3.2/

**Related Issues/PRs**
<!-- Provide any additional information we might need to understand the pull request -->
#3444

paulirish: can you leave a comment somewhere that indicates where we can pull these severity weights from? i feel like it is in the axe response somewhere..
robdodson: Yeah so I'm not 100% happy with this scoring, though it is based on how axe
ranks items from minor, serious, critical.

Downranking something because it is uncommon in hindsight feels wrong
because it means getting an Aria role wrong--which is critically bad--is
considered low impact in current lighthouse.

Another option would be to boost the Aria scores. That's actually what got
me started on this idea.

*From: *Patrick Hulce <notifications@github.com>
*Date: *Thu, May 2, 2019, 6:48 PM
*To: *GoogleChrome/lighthouse
*Cc: *Rob Dodson, Author

*@patrickhulce* commented on this pull request.
>
> seems like there's not a ton of differentiation anymore, should the gap
> between critical and minor issues be wider?
>
> originally it was also supposed to include how common it was, is that not
> much of a concern anymore?
>
> —
> You are receiving this because you authored the thread.
> Reply to this email directly, view it on GitHub
> <https://github.com/GoogleChrome/lighthouse/pull/8823#pullrequestreview-233303485>,
> or mute the thread
> <https://github.com/notifications/unsubscribe-auth/AAIEKDIQL6YNRX36KWJNVKDPTOKXXANCNFSM4HKNW2YQ>
> .
>

robdodson: OK I staggered things a bit more so minor is 1, serious is 3, and critical is 10. In testing this seems to produce a result that feels about right.

This change is tricky because I think a lot of sites will see their scores go up but that's because we were penalizing them for issues that were common but not necessarily critical failures. On the flip side, there were critical failures that we were severely undercounting because they were uncommon.

For example, having a button without a label—if it's the only failure on the page—is currently worth ~21 points. But misspelling the `button` role on a `div` is only worth about 8 points. Without a proper role the div is not announced as a button to the user, so it feels like it's just as bad of a failure, but it's undercounted.

In the new scheme they are both worth something like 10 or 11 points.

Things which are common, but not necessarily show stoppers, like color contrast are downranked from critical to serious. A _lot_ of sites will benefit from this, but it really didn't make sense to say it was "more severe" than having uncaptioned video or audio. Those are legitimate barriers to access, even if they are less common.

One thing that does make me feel better is the [W3C bad accessibility example pages](https://www.w3.org/WAI/demos/bad/) all score lower in the new scheme than in current Lighthouse. That's because they have more legitimate barriers to access so they get penalized more.

> can you leave a comment somewhere that indicates where we can pull these severity weights from?

@paulirish in the json or here on github?
The ranking comes from deque's scoring system. If you click on an audit listed here: https://dequeuniversity.com/rules/axe/3.2/ there is a column on the right hand side that shows severity. Everything falls into either minor, serious, or critical.
brendankenny: > proto/sample_v2_round_trip.json

sorry, I changed some stuff. You may need to `git checkout master -- proto/sample_v2_round_trip.json` and then run `yarn update:sample-json` again
robdodson: @brendankenny I have done the thing.

Patch:
diff --git a/lighthouse-core/config/default-config.js b/lighthouse-core/config/default-config.js
index 5f5beb393..f896cd423 100644
--- a/lighthouse-core/config/default-config.js
+++ b/lighthouse-core/config/default-config.js
@@ -395,42 +395,46 @@ const defaultConfig = {
       title: str_(UIStrings.a11yCategoryTitle),
       description: str_(UIStrings.a11yCategoryDescription),
       manualDescription: str_(UIStrings.a11yCategoryManualDescription),
+      // Audit weights are meant to match the aXe scoring system of
+      // minor, serious, and critical.
+      // See the audits listed at dequeuniversity.com/rules/axe/3.2.
+      // Click on an audit and check the right hand column to see its severity.
       auditRefs: [
         {id: 'accesskeys', weight: 3, group: 'a11y-navigation'},
-        {id: 'aria-allowed-attr', weight: 3, group: 'a11y-aria'},
-        {id: 'aria-required-attr', weight: 2, group: 'a11y-aria'},
-        {id: 'aria-required-children', weight: 5, group: 'a11y-aria'},
-        {id: 'aria-required-parent', weight: 2, group: 'a11y-aria'},
-        {id: 'aria-roles', weight: 3, group: 'a11y-aria'},
-        {id: 'aria-valid-attr-value', weight: 2, group: 'a11y-aria'},
-        {id: 'aria-valid-attr', weight: 5, group: 'a11y-aria'},
-        {id: 'audio-caption', weight: 4, group: 'a11y-audio-video'},
+        {id: 'aria-allowed-attr', weight: 10, group: 'a11y-aria'},
+        {id: 'aria-required-attr', weight: 10, group: 'a11y-aria'},
+        {id: 'aria-required-children', weight: 10, group: 'a11y-aria'},
+        {id: 'aria-required-parent', weight: 10, group: 'a11y-aria'},
+        {id: 'aria-roles', weight: 10, group: 'a11y-aria'},
+        {id: 'aria-valid-attr-value', weight: 10, group: 'a11y-aria'},
+        {id: 'aria-valid-attr', weight: 10, group: 'a11y-aria'},
+        {id: 'audio-caption', weight: 10, group: 'a11y-audio-video'},
         {id: 'button-name', weight: 10, group: 'a11y-names-labels'},
-        {id: 'bypass', weight: 10, group: 'a11y-navigation'},
-        {id: 'color-contrast', weight: 6, group: 'a11y-color-contrast'},
-        {id: 'definition-list', weight: 1, group: 'a11y-tables-lists'},
-        {id: 'dlitem', weight: 1, group: 'a11y-tables-lists'},
-        {id: 'document-title', weight: 2, group: 'a11y-names-labels'},
-        {id: 'duplicate-id', weight: 5, group: 'a11y-best-practices'},
-        {id: 'frame-title', weight: 5, group: 'a11y-names-labels'},
-        {id: 'html-has-lang', weight: 4, group: 'a11y-language'},
-        {id: 'html-lang-valid', weight: 1, group: 'a11y-language'},
-        {id: 'image-alt', weight: 8, group: 'a11y-names-labels'},
-        {id: 'input-image-alt', weight: 1, group: 'a11y-names-labels'},
+        {id: 'bypass', weight: 3, group: 'a11y-navigation'},
+        {id: 'color-contrast', weight: 3, group: 'a11y-color-contrast'},
+        {id: 'definition-list', weight: 3, group: 'a11y-tables-lists'},
+        {id: 'dlitem', weight: 3, group: 'a11y-tables-lists'},
+        {id: 'document-title', weight: 3, group: 'a11y-names-labels'},
+        {id: 'duplicate-id', weight: 1, group: 'a11y-best-practices'},
+        {id: 'frame-title', weight: 3, group: 'a11y-names-labels'},
+        {id: 'html-has-lang', weight: 3, group: 'a11y-language'},
+        {id: 'html-lang-valid', weight: 3, group: 'a11y-language'},
+        {id: 'image-alt', weight: 10, group: 'a11y-names-labels'},
+        {id: 'input-image-alt', weight: 10, group: 'a11y-names-labels'},
         {id: 'label', weight: 10, group: 'a11y-names-labels'},
-        {id: 'layout-table', weight: 1, group: 'a11y-tables-lists'},
-        {id: 'link-name', weight: 9, group: 'a11y-names-labels'},
-        {id: 'list', weight: 5, group: 'a11y-tables-lists'},
-        {id: 'listitem', weight: 4, group: 'a11y-tables-lists'},
-        {id: 'meta-refresh', weight: 1, group: 'a11y-best-practices'},
-        {id: 'meta-viewport', weight: 3, group: 'a11y-best-practices'},
-        {id: 'object-alt', weight: 4, group: 'a11y-names-labels'},
-        {id: 'tabindex', weight: 4, group: 'a11y-navigation'},
-        {id: 'td-headers-attr', weight: 1, group: 'a11y-tables-lists'},
-        {id: 'th-has-data-cells', weight: 1, group: 'a11y-tables-lists'},
-        {id: 'valid-lang', weight: 1, group: 'a11y-language'},
-        {id: 'video-caption', weight: 4, group: 'a11y-audio-video'},
-        {id: 'video-description', weight: 3, group: 'a11y-audio-video'},
+        {id: 'layout-table', weight: 3, group: 'a11y-tables-lists'},
+        {id: 'link-name', weight: 3, group: 'a11y-names-labels'},
+        {id: 'list', weight: 3, group: 'a11y-tables-lists'},
+        {id: 'listitem', weight: 3, group: 'a11y-tables-lists'},
+        {id: 'meta-refresh', weight: 10, group: 'a11y-best-practices'},
+        {id: 'meta-viewport', weight: 10, group: 'a11y-best-practices'},
+        {id: 'object-alt', weight: 3, group: 'a11y-names-labels'},
+        {id: 'tabindex', weight: 3, group: 'a11y-navigation'},
+        {id: 'td-headers-attr', weight: 3, group: 'a11y-tables-lists'},
+        {id: 'th-has-data-cells', weight: 3, group: 'a11y-tables-lists'},
+        {id: 'valid-lang', weight: 3, group: 'a11y-language'},
+        {id: 'video-caption', weight: 10, group: 'a11y-audio-video'},
+        {id: 'video-description', weight: 10, group: 'a11y-audio-video'},
         // Manual audits
         {id: 'logical-tab-order', weight: 0},
         {id: 'focusable-controls', weight: 0},
diff --git a/lighthouse-core/report/html/renderer/psi.js b/lighthouse-core/report/html/renderer/psi.js
index 35c4d104e..718581ea7 100644
--- a/lighthouse-core/report/html/renderer/psi.js
+++ b/lighthouse-core/report/html/renderer/psi.js
@@ -31,7 +31,7 @@
  *
  * @param {LH.Result | string} LHResult The stringified version of {LH.Result}
  * @param {Document} document The host page's window.document
- * @return {{scoreGaugeEl: Element, perfCategoryEl: Element, finalScreenshotDataUri: string|null}}
+ * @return {{scoreGaugeEl: Element, perfCategoryEl: Element, finalScreenshotDataUri: string|null, scoreScaleEl: Element}}
  */
 function prepareLabData(LHResult, document) {
   const lhResult = (typeof LHResult === 'string') ?
@@ -64,7 +64,11 @@ function prepareLabData(LHResult, document) {
   scoreGaugeWrapperEl.removeAttribute('href');
 
   const finalScreenshotDataUri = _getFinalScreenshot(perfCategory);
-  return {scoreGaugeEl, perfCategoryEl, finalScreenshotDataUri};
+
+  const clonedScoreTemplate = dom.cloneTemplate('#tmpl-lh-scorescale', dom.document());
+  const scoreScaleEl = dom.find('.lh-scorescale', clonedScoreTemplate);
+
+  return {scoreGaugeEl, perfCategoryEl, finalScreenshotDataUri, scoreScaleEl};
 }
 
 /**
diff --git a/lighthouse-core/report/html/renderer/report-renderer.js b/lighthouse-core/report/html/renderer/report-renderer.js
index 8b5dedf66..813ae2024 100644
--- a/lighthouse-core/report/html/renderer/report-renderer.js
+++ b/lighthouse-core/report/html/renderer/report-renderer.js
@@ -242,18 +242,16 @@ class ReportRenderer {
       wrapper.appendChild(renderer.render(category, report.categoryGroups));
     }
 
-    // TODO(hoten) - fireworks show will commence later.
     // Fireworks
-    // const scoresAll100 = report.reportCategories.every(cat => cat.score === 1);
-    // if (!this._dom.isDevTools() && scoresAll100) {
-    //   if (scoresAll100) {
-    //     const scoresContainer = this._dom.find('.lh-scores-container', headerContainer);
-    //     scoresContainer.classList.add('score100');
-    //     scoresContainer.addEventListener('click', _ => {
-    //       scoresContainer.classList.toggle('fireworks-paused');
-    //     });
-    //   }
-    // }
+    const scoresAll100 = report.reportCategories.every(cat => cat.score === 1);
+    if (!this._dom.isDevTools() && scoresAll100) {
+      const scoresContainer = this._dom.find('.lh-scores-container', headerContainer);
+      scoresContainer.classList.add('score100');
+      this._dom._document.body.classList.add('dark');
+      scoresContainer.addEventListener('click', _ => {
+        scoresContainer.classList.toggle('fireworks-paused');
+      });
+    }
 
     if (scoreHeader) {
       const scoreGauges =
diff --git a/lighthouse-core/report/html/templates.html b/lighthouse-core/report/html/templates.html
index 09ca0479d..06160ed05 100644
--- a/lighthouse-core/report/html/templates.html
+++ b/lighthouse-core/report/html/templates.html
@@ -206,7 +206,12 @@ limitations under the License.
     }
   </style>
   <div class="lh-scores-wrapper">
-    <div class="lh-scores-container"></div>
+    <div class="lh-scores-container">
+      <div class="pyro">
+        <div class="before"></div>
+        <div class="after"></div>
+      </div>
+    </div>
   </div>
 </template>
 
@@ -382,6 +387,8 @@ limitations under the License.
     */
     .pyro {
       display: none;
+      z-index: 1;
+      pointer-events: none;
     }
     .score100 .pyro {
       display: block;
diff --git a/proto/sample_v2_round_trip.json b/proto/sample_v2_round_trip.json
index 876a2dd98..1af6af0d7 100644
--- a/proto/sample_v2_round_trip.json
+++ b/proto/sample_v2_round_trip.json
@@ -3050,12 +3050,12 @@
                 {
                     "group": "a11y-navigation",
                     "id": "bypass",
-                    "weight": 10.0
+                    "weight": 3.0
                 },
                 {
                     "group": "a11y-color-contrast",
                     "id": "color-contrast",
-                    "weight": 6.0
+                    "weight": 3.0
                 },
                 {
                     "group": "a11y-tables-lists",
@@ -3070,12 +3070,12 @@
                 {
                     "group": "a11y-names-labels",
                     "id": "document-title",
-                    "weight": 2.0
+                    "weight": 3.0
                 },
                 {
                     "group": "a11y-best-practices",
                     "id": "duplicate-id",
-                    "weight": 5.0
+                    "weight": 1.0
                 },
                 {
                     "group": "a11y-names-labels",
@@ -3085,7 +3085,7 @@
                 {
                     "group": "a11y-language",
                     "id": "html-has-lang",
-                    "weight": 4.0
+                    "weight": 3.0
                 },
                 {
                     "group": "a11y-language",
@@ -3095,7 +3095,7 @@
                 {
                     "group": "a11y-names-labels",
                     "id": "image-alt",
-                    "weight": 8.0
+                    "weight": 10.0
                 },
                 {
                     "group": "a11y-names-labels",
@@ -3115,7 +3115,7 @@
                 {
                     "group": "a11y-names-labels",
                     "id": "link-name",
-                    "weight": 9.0
+                    "weight": 3.0
                 },
                 {
                     "group": "a11y-tables-lists",
@@ -3135,12 +3135,12 @@
                 {
                     "group": "a11y-best-practices",
                     "id": "meta-viewport",
-                    "weight": 3.0
+                    "weight": 10.0
                 },
                 {
                     "group": "a11y-names-labels",
                     "id": "object-alt",
-                    "weight": 4.0
+                    "weight": 3.0
                 },
                 {
                     "group": "a11y-navigation",
@@ -3220,7 +3220,7 @@
             "description": "These checks highlight opportunities to [improve the accessibility of your web app](https://developers.google.com/web/fundamentals/accessibility). Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged.",
             "id": "accessibility",
             "manualDescription": "These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://developers.google.com/web/fundamentals/accessibility/how-to-review).",
-            "score": 0.36,
+            "score": 0.38,
             "title": "Accessibility"
         },
         "best-practices": {


Test patch:
diff --git a/lighthouse-cli/test/cli/__snapshots__/index-test.js.snap b/lighthouse-cli/test/cli/__snapshots__/index-test.js.snap
index 23fece289..e6033bb2d 100644
--- a/lighthouse-cli/test/cli/__snapshots__/index-test.js.snap
+++ b/lighthouse-cli/test/cli/__snapshots__/index-test.js.snap
@@ -387,42 +387,42 @@ Object {
         Object {
           "group": "a11y-aria",
           "id": "aria-allowed-attr",
-          "weight": 3,
+          "weight": 10,
         },
         Object {
           "group": "a11y-aria",
           "id": "aria-required-attr",
-          "weight": 2,
+          "weight": 10,
         },
         Object {
           "group": "a11y-aria",
           "id": "aria-required-children",
-          "weight": 5,
+          "weight": 10,
         },
         Object {
           "group": "a11y-aria",
           "id": "aria-required-parent",
-          "weight": 2,
+          "weight": 10,
         },
         Object {
           "group": "a11y-aria",
           "id": "aria-roles",
-          "weight": 3,
+          "weight": 10,
         },
         Object {
           "group": "a11y-aria",
           "id": "aria-valid-attr-value",
-          "weight": 2,
+          "weight": 10,
         },
         Object {
           "group": "a11y-aria",
           "id": "aria-valid-attr",
-          "weight": 5,
+          "weight": 10,
         },
         Object {
           "group": "a11y-audio-video",
           "id": "audio-caption",
-          "weight": 4,
+          "weight": 10,
         },
         Object {
           "group": "a11y-names-labels",
@@ -432,57 +432,57 @@ Object {
         Object {
           "group": "a11y-navigation",
           "id": "bypass",
-          "weight": 10,
+          "weight": 3,
         },
         Object {
           "group": "a11y-color-contrast",
           "id": "color-contrast",
-          "weight": 6,
+          "weight": 3,
         },
         Object {
           "group": "a11y-tables-lists",
           "id": "definition-list",
-          "weight": 1,
+          "weight": 3,
         },
         Object {
           "group": "a11y-tables-lists",
           "id": "dlitem",
-          "weight": 1,
+          "weight": 3,
         },
         Object {
           "group": "a11y-names-labels",
           "id": "document-title",
-          "weight": 2,
+          "weight": 3,
         },
         Object {
           "group": "a11y-best-practices",
           "id": "duplicate-id",
-          "weight": 5,
+          "weight": 1,
         },
         Object {
           "group": "a11y-names-labels",
           "id": "frame-title",
-          "weight": 5,
+          "weight": 3,
         },
         Object {
           "group": "a11y-language",
           "id": "html-has-lang",
-          "weight": 4,
+          "weight": 3,
         },
         Object {
           "group": "a11y-language",
           "id": "html-lang-valid",
-          "weight": 1,
+          "weight": 3,
         },
         Object {
           "group": "a11y-names-labels",
           "id": "image-alt",
-          "weight": 8,
+          "weight": 10,
         },
         Object {
           "group": "a11y-names-labels",
           "id": "input-image-alt",
-          "weight": 1,
+          "weight": 10,
         },
         Object {
           "group": "a11y-names-labels",
@@ -492,67 +492,67 @@ Object {
         Object {
           "group": "a11y-tables-lists",
           "id": "layout-table",
-          "weight": 1,
+          "weight": 3,
         },
         Object {
           "group": "a11y-names-labels",
           "id": "link-name",
-          "weight": 9,
+          "weight": 3,
         },
         Object {
           "group": "a11y-tables-lists",
           "id": "list",
-          "weight": 5,
+          "weight": 3,
         },
         Object {
           "group": "a11y-tables-lists",
           "id": "listitem",
-          "weight": 4,
+          "weight": 3,
         },
         Object {
           "group": "a11y-best-practices",
           "id": "meta-refresh",
-          "weight": 1,
+          "weight": 10,
         },
         Object {
           "group": "a11y-best-practices",
           "id": "meta-viewport",
-          "weight": 3,
+          "weight": 10,
         },
         Object {
           "group": "a11y-names-labels",
           "id": "object-alt",
-          "weight": 4,
+          "weight": 3,
         },
         Object {
           "group": "a11y-navigation",
           "id": "tabindex",
-          "weight": 4,
+          "weight": 3,
         },
         Object {
           "group": "a11y-tables-lists",
           "id": "td-headers-attr",
-          "weight": 1,
+          "weight": 3,
         },
         Object {
           "group": "a11y-tables-lists",
           "id": "th-has-data-cells",
-          "weight": 1,
+          "weight": 3,
         },
         Object {
           "group": "a11y-language",
           "id": "valid-lang",
-          "weight": 1,
+          "weight": 3,
         },
         Object {
           "group": "a11y-audio-video",
           "id": "video-caption",
-          "weight": 4,
+          "weight": 10,
         },
         Object {
           "group": "a11y-audio-video",
           "id": "video-description",
-          "weight": 3,
+          "weight": 10,
         },
         Object {
           "id": "logical-tab-order",
diff --git a/lighthouse-core/test/report/html/renderer/category-renderer-test.js b/lighthouse-core/test/report/html/renderer/category-renderer-test.js
index 6ac2722b5..8e691f5a5 100644
--- a/lighthouse-core/test/report/html/renderer/category-renderer-test.js
+++ b/lighthouse-core/test/report/html/renderer/category-renderer-test.js
@@ -243,7 +243,7 @@ describe('CategoryRenderer', () => {
       const categoryDOM = renderer.render(category, sampleResults.categoryGroups);
 
       const gauge = categoryDOM.querySelector('.lh-gauge__percentage');
-      assert.equal(gauge.textContent.trim(), '36', 'score is 0-100');
+      assert.equal(gauge.textContent.trim(), '38', 'score is 0-100');
 
       const score = categoryDOM.querySelector('.lh-category-header');
       const value = categoryDOM.querySelector('.lh-gauge__percentage');
diff --git a/lighthouse-core/test/report/html/renderer/report-renderer-test.js b/lighthouse-core/test/report/html/renderer/report-renderer-test.js
index 155fd19d3..d6d8e6a98 100644
--- a/lighthouse-core/test/report/html/renderer/report-renderer-test.js
+++ b/lighthouse-core/test/report/html/renderer/report-renderer-test.js
@@ -214,8 +214,7 @@ describe('ReportRenderer', () => {
     assert.equal(renderer._templateContext, otherDocument);
   });
 
-  // Fireworks temporarily canceled. See #8185
-  test.skip('should render an all 100 report with fireworks', () => {
+  it('should render an all 100 report with fireworks', () => {
     const container = renderer._dom._document.body;
 
     sampleResults.reportCategories.forEach(element => {
@@ -227,7 +226,7 @@ describe('ReportRenderer', () => {
     assert.ok(output.querySelector('.lh-header-sticky'), 'has a header');
     assert.ok(output.querySelector('.lh-report'), 'has report body');
     assert.equal(output.querySelectorAll('.lh-gauge__wrapper, .lh-gauge--pwa__wrapper').length,
-        sampleResults.reportCategories.length * 2, 'renders category gauges');
+        sampleResults.reportCategories.length * 3, 'renders category gauges');
     // fireworks!
     assert.ok(output.querySelector('.score100'), 'has fireworks treatment');
   });
diff --git a/lighthouse-core/test/results/sample_v2.json b/lighthouse-core/test/results/sample_v2.json
index 97d3bf034..ada4c2fae 100644
--- a/lighthouse-core/test/results/sample_v2.json
+++ b/lighthouse-core/test/results/sample_v2.json
@@ -3298,12 +3298,12 @@
         },
         {
           "id": "bypass",
-          "weight": 10,
+          "weight": 3,
           "group": "a11y-navigation"
         },
         {
           "id": "color-contrast",
-          "weight": 6,
+          "weight": 3,
           "group": "a11y-color-contrast"
         },
         {
@@ -3318,12 +3318,12 @@
         },
         {
           "id": "document-title",
-          "weight": 2,
+          "weight": 3,
           "group": "a11y-names-labels"
         },
         {
           "id": "duplicate-id",
-          "weight": 5,
+          "weight": 1,
           "group": "a11y-best-practices"
         },
         {
@@ -3333,7 +3333,7 @@
         },
         {
           "id": "html-has-lang",
-          "weight": 4,
+          "weight": 3,
           "group": "a11y-language"
         },
         {
@@ -3343,7 +3343,7 @@
         },
         {
           "id": "image-alt",
-          "weight": 8,
+          "weight": 10,
           "group": "a11y-names-labels"
         },
         {
@@ -3363,7 +3363,7 @@
         },
         {
           "id": "link-name",
-          "weight": 9,
+          "weight": 3,
           "group": "a11y-names-labels"
         },
         {
@@ -3383,12 +3383,12 @@
         },
         {
           "id": "meta-viewport",
-          "weight": 3,
+          "weight": 10,
           "group": "a11y-best-practices"
         },
         {
           "id": "object-alt",
-          "weight": 4,
+          "weight": 3,
           "group": "a11y-names-labels"
         },
         {
@@ -3467,7 +3467,7 @@
         }
       ],
       "id": "accessibility",
-      "score": 0.36
+      "score": 0.38
     },
     "best-practices": {
       "title": "Best Practices",