From b59c457f5d55fa40d7bd7c9225dc62866bf62533 Mon Sep 17 00:00:00 2001 From: Divyansh Pratap Date: Fri, 13 Sep 2024 03:20:02 +0530 Subject: [PATCH] feat: organize detected tags --- src/metatags/handler.js | 1 + src/metatags/seo-checks.js | 21 +++++++++++++++++++++ test/audits/metatags.test.js | 24 ++++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/src/metatags/handler.js b/src/metatags/handler.js index 9dddebd3..dbc5b718 100644 --- a/src/metatags/handler.js +++ b/src/metatags/handler.js @@ -77,6 +77,7 @@ export default async function auditMetaTags(message, context) { for (const [pageUrl, pageTags] of Object.entries(extractedTags)) { seoChecks.performChecks(pageUrl, pageTags); } + seoChecks.organizeDetectedTags(); const detectedTags = seoChecks.getDetectedTags(); // Prepare Audit result const auditResult = { diff --git a/src/metatags/seo-checks.js b/src/metatags/seo-checks.js index c8e3788e..3718ee1a 100644 --- a/src/metatags/seo-checks.js +++ b/src/metatags/seo-checks.js @@ -34,6 +34,20 @@ class SeoChecks { }; } + /** + * Sorts Non Unique H1 tags in descending order of their occurrence count + */ + sortNonUniqueH1Tags() { + if (!this.detectedTags[H1][0] || !this.detectedTags[H1][0][NON_UNIQUE]) { + return; + } + // Convert the non-unique H1 tags object to an array of [key, value] entries + const sortedEntries = Object.entries(this.detectedTags[H1][0][NON_UNIQUE]) + .sort(([, a], [, b]) => b.count - a.count); // Sort by `count` in descending order + + this.detectedTags[H1][0][NON_UNIQUE] = Object.fromEntries(sortedEntries); + } + /** * Adds an entry to the detected tags array. * @param {string} pageUrl - The URL of the page. @@ -195,6 +209,13 @@ class SeoChecks { getDetectedTags() { return this.detectedTags; } + + /** + * Processes detected tags, including sorting non-unique H1 tags. + */ + organizeDetectedTags() { + this.sortNonUniqueH1Tags(); + } } export default SeoChecks; diff --git a/test/audits/metatags.test.js b/test/audits/metatags.test.js index 04883fc8..270cb22e 100644 --- a/test/audits/metatags.test.js +++ b/test/audits/metatags.test.js @@ -28,6 +28,7 @@ import { H1, HIGH, MODERATE, + NON_UNIQUE, } from '../../src/metatags/constants.js'; import SeoChecks from '../../src/metatags/seo-checks.js'; import auditMetaTags from '../../src/metatags/handler.js'; @@ -157,6 +158,29 @@ describe('Meta Tags', () => { }); }); }); + + describe('Organize Detected Tags', () => { + it('should sort non-unique H1 tags by count in descending order', () => { + seoChecks.detectedTags = { + h1: [ + { + [NON_UNIQUE]: { + 'Tag A': { count: 3, urls: ['/url1', '/url2'] }, + 'Tag B': { count: 5, urls: ['/url3'] }, + 'Tag C': { count: 1, urls: ['/url4'] }, + }, + }, + ], + }; + seoChecks.sortNonUniqueH1Tags(); + const expected = { + 'Tag B': { count: 5, urls: ['/url3'] }, + 'Tag A': { count: 3, urls: ['/url1', '/url2'] }, + 'Tag C': { count: 1, urls: ['/url4'] }, + }; + expect(seoChecks.detectedTags[H1][0][NON_UNIQUE]).to.deep.equal(expected); + }); + }); }); describe('handler method', () => {