axyseo 2025.1.0-blog.11 → 2025.1.0-blog.13

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.
@@ -72,15 +72,9 @@ class SingleH1Assessment extends _assessment.default {
72
72
  const htmlString = paper.getText();
73
73
  const desHasH1Tag = htmlString.includes('<h1>');
74
74
  let status = '';
75
- if (this._h1Count === 1) {
76
- status = 'good';
77
- }
78
- if (this._h1Count === 0 && !desHasH1Tag) {
79
- status = 'good';
80
- }
81
- if (this._h1Count > 1) {
82
- status = 'bad';
83
- }
75
+ if (this._h1Count === 1) status = 'good';
76
+ if (this._h1Count === 0 && !desHasH1Tag) status = 'good';
77
+ if (this._h1Count > 1) status = 'bad';
84
78
  const score = this.getScore(_analysis.TECHNICAL_SEO_POINTS, status);
85
79
  return {
86
80
  score,
@@ -1 +1 @@
1
- {"version":3,"file":"SingleH1Assessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","e","__esModule","default","SingleH1Assessment","Assessment","constructor","config","defaultConfig","id","SINGLE_H1_ID","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","merge","getResult","paper","researcher","_h1Count","getResearch","assessmentResult","AssessmentResult","calculatedResult","calculateResult","isUndefined","setScore","score","setStatus","status","htmlString","getText","desHasH1Tag","includes","getScore","TECHNICAL_SEO_POINTS","isApplicable","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/SingleH1Assessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_H1_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleH1Assessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_H1_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n fixPosition: 'description',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'H1 tag',\n content: {\n good: 'H1 tag is optimized.',\n improve: 'You should use only one H1 tag',\n bad: 'Missing H1 tag. Add one H1 to clearly define your page`s topic.'\n }\n };\n\n this.identifier = SINGLE_H1_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n this._h1Count = researcher.getResearch('h1s');\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const htmlString = paper.getText();\n const desHasH1Tag = htmlString.includes('<h1>');\n\n let status = '';\n if (this._h1Count === 1) {\n status = 'good';\n }\n\n if (this._h1Count === 0 && !desHasH1Tag) {\n status = 'good';\n }\n\n if (this._h1Count > 1) {\n status = 'bad';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true\n }\n}\n\nexport default SingleH1Assessment;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAA0E,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE1E;AACA;AACA;AACA;AACA,MAAMG,kBAAkB,SAASC,mBAAU,CAAC;EAC1C;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEC,sBAAY;MAChBC,MAAM,EAAE,yCAAyC;MACjDC,WAAW,EAAE,aAAa;MAC1BC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,QAAQ;MACfC,OAAO,EAAE;QACPC,IAAI,EAAE,sBAAsB;QAC5BC,OAAO,EAAE,gCAAgC;QACzCC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,sBAAY;IAC9B,IAAI,CAACW,OAAO,GAAG,IAAAC,aAAK,EAACd,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEgB,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,QAAQ,GAAGD,UAAU,CAACE,WAAW,CAAC,KAAK,CAAC;IAC7C,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAACtB,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErE,MAAMS,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACP,KAAK,CAAC;IAEpD,IAAI,CAAC,IAAAQ,mBAAW,EAACF,gBAAgB,CAAC,EAAE;MAClCF,gBAAgB,CAACK,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;MACjDN,gBAAgB,CAACO,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACrD;IAEA,OAAOR,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEG,eAAeA,CAACP,KAAK,EAAE;IACrB,MAAMa,UAAU,GAAGb,KAAK,CAACc,OAAO,CAAC,CAAC;IAClC,MAAMC,WAAW,GAAGF,UAAU,CAACG,QAAQ,CAAC,MAAM,CAAC;IAE/C,IAAIJ,MAAM,GAAG,EAAE;IACf,IAAI,IAAI,CAACV,QAAQ,KAAK,CAAC,EAAE;MACvBU,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACV,QAAQ,KAAK,CAAC,IAAI,CAACa,WAAW,EAAE;MACvCH,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACV,QAAQ,GAAG,CAAC,EAAE;MACrBU,MAAM,GAAG,KAAK;IAChB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACO,QAAQ,CAACC,8BAAoB,EAAEN,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,YAAYA,CAACnB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAAC,IAAAoB,QAAA,GAAAC,OAAA,CAAA1C,OAAA,GAEcC,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"SingleH1Assessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","e","__esModule","default","SingleH1Assessment","Assessment","constructor","config","defaultConfig","id","SINGLE_H1_ID","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","merge","getResult","paper","researcher","_h1Count","getResearch","assessmentResult","AssessmentResult","calculatedResult","calculateResult","isUndefined","setScore","score","setStatus","status","htmlString","getText","desHasH1Tag","includes","getScore","TECHNICAL_SEO_POINTS","isApplicable","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/SingleH1Assessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_H1_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleH1Assessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_H1_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n fixPosition: 'description',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'H1 tag',\n content: {\n good: 'H1 tag is optimized.',\n improve: 'You should use only one H1 tag',\n bad: 'Missing H1 tag. Add one H1 to clearly define your page`s topic.'\n }\n };\n\n this.identifier = SINGLE_H1_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n this._h1Count = researcher.getResearch('h1s');\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const htmlString = paper.getText();\n const desHasH1Tag = htmlString.includes('<h1>');\n\n let status = '';\n if (this._h1Count === 1) status = 'good';\n if (this._h1Count === 0 && !desHasH1Tag) status = 'good';\n if (this._h1Count > 1) status = 'bad';\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n}\n\nexport default SingleH1Assessment;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAA0E,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE1E;AACA;AACA;AACA;AACA,MAAMG,kBAAkB,SAASC,mBAAU,CAAC;EAC1C;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEC,sBAAY;MAChBC,MAAM,EAAE,yCAAyC;MACjDC,WAAW,EAAE,aAAa;MAC1BC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,QAAQ;MACfC,OAAO,EAAE;QACPC,IAAI,EAAE,sBAAsB;QAC5BC,OAAO,EAAE,gCAAgC;QACzCC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,sBAAY;IAC9B,IAAI,CAACW,OAAO,GAAG,IAAAC,aAAK,EAACd,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEgB,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,QAAQ,GAAGD,UAAU,CAACE,WAAW,CAAC,KAAK,CAAC;IAC7C,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAACtB,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErE,MAAMS,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACP,KAAK,CAAC;IAEpD,IAAI,CAAC,IAAAQ,mBAAW,EAACF,gBAAgB,CAAC,EAAE;MAClCF,gBAAgB,CAACK,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;MACjDN,gBAAgB,CAACO,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACrD;IAEA,OAAOR,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEG,eAAeA,CAACP,KAAK,EAAE;IACrB,MAAMa,UAAU,GAAGb,KAAK,CAACc,OAAO,CAAC,CAAC;IAClC,MAAMC,WAAW,GAAGF,UAAU,CAACG,QAAQ,CAAC,MAAM,CAAC;IAE/C,IAAIJ,MAAM,GAAG,EAAE;IACf,IAAI,IAAI,CAACV,QAAQ,KAAK,CAAC,EAAEU,MAAM,GAAG,MAAM;IACxC,IAAI,IAAI,CAACV,QAAQ,KAAK,CAAC,IAAI,CAACa,WAAW,EAAEH,MAAM,GAAG,MAAM;IACxD,IAAI,IAAI,CAACV,QAAQ,GAAG,CAAC,EAAEU,MAAM,GAAG,KAAK;IAErC,MAAMF,KAAK,GAAG,IAAI,CAACO,QAAQ,CAACC,8BAAoB,EAAEN,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,YAAYA,CAACnB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAAC,IAAAoB,QAAA,GAAAC,OAAA,CAAA1C,OAAA,GAEcC,kBAAkB","ignoreList":[]}
@@ -67,10 +67,12 @@ class SingleTitleAssessment extends _assessment.default {
67
67
  * @returns {{score: number, status: string}}
68
68
  */
69
69
  calculateResult(paper) {
70
- const count = paper.getTitleCount();
71
- let status = 'bad';
72
- if (count === 1) {
73
- status = 'good';
70
+ const title = paper.getTitle();
71
+ const bodyText = paper.getText();
72
+ let status = 'good';
73
+ if (title && bodyText) {
74
+ const titleLower = title.toLowerCase().trim();
75
+ if (titleLower && bodyText.toLowerCase().includes(titleLower)) status = 'bad';
74
76
  }
75
77
  const score = this.getScore(_analysis.TECHNICAL_SEO_POINTS, status);
76
78
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"SingleTitleAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","e","__esModule","default","SingleTitleAssessment","Assessment","constructor","config","defaultConfig","id","SINGLE_TITLE_ID","docUrl","ctaType","priority","title","content","improve","bad","good","identifier","_config","merge","getResult","paper","researcher","assessmentResult","AssessmentResult","calculatedResult","calculateResult","isUndefined","setScore","score","setStatus","status","count","getTitleCount","getScore","TECHNICAL_SEO_POINTS","isApplicable","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/SingleTitleAssessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_TITLE_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleTitleAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_TITLE_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'Duplicate title',\n content: {\n improve: '',\n bad: 'Found duplicate titles. Check your content and create unique titles.',\n good: 'No duplicate titles found.'\n }\n };\n\n this.identifier = SINGLE_TITLE_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const count = paper.getTitleCount();\n\n let status = 'bad';\n if (count === 1) {\n status = 'good';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n}\n\nexport default SingleTitleAssessment;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAA6E,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7E;AACA;AACA;AACA;AACA,MAAMG,qBAAqB,SAASC,mBAAU,CAAC;EAC7C;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEC,yBAAe;MACnBC,MAAM,EAAE,yCAAyC;MACjDC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,iBAAiB;MACxBC,OAAO,EAAE;QACPC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE,sEAAsE;QAC3EC,IAAI,EAAE;MACR;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGT,yBAAe;IACjC,IAAI,CAACU,OAAO,GAAG,IAAAC,aAAK,EAACb,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEe,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAACnB,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IAErE,MAAMO,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACL,KAAK,CAAC;IAEpD,IAAI,CAAC,IAAAM,mBAAW,EAACF,gBAAgB,CAAC,EAAE;MAClCF,gBAAgB,CAACK,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;MACjDN,gBAAgB,CAACO,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACrD;IAEA,OAAOR,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEG,eAAeA,CAACL,KAAK,EAAE;IACrB,MAAMW,KAAK,GAAGX,KAAK,CAACY,aAAa,CAAC,CAAC;IAEnC,IAAIF,MAAM,GAAG,KAAK;IAClB,IAAIC,KAAK,KAAK,CAAC,EAAE;MACfD,MAAM,GAAG,MAAM;IACjB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACK,QAAQ,CAACC,8BAAoB,EAAEJ,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,YAAYA,CAACf,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAAC,IAAAgB,QAAA,GAAAC,OAAA,CAAArC,OAAA,GAEcC,qBAAqB","ignoreList":[]}
1
+ {"version":3,"file":"SingleTitleAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","e","__esModule","default","SingleTitleAssessment","Assessment","constructor","config","defaultConfig","id","SINGLE_TITLE_ID","docUrl","ctaType","priority","title","content","improve","bad","good","identifier","_config","merge","getResult","paper","researcher","assessmentResult","AssessmentResult","calculatedResult","calculateResult","isUndefined","setScore","score","setStatus","status","getTitle","bodyText","getText","titleLower","toLowerCase","trim","includes","getScore","TECHNICAL_SEO_POINTS","isApplicable","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/SingleTitleAssessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_TITLE_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleTitleAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_TITLE_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'Duplicate title',\n content: {\n improve: '',\n bad: 'Found duplicate titles. Check your content and create unique titles.',\n good: 'No duplicate titles found.'\n }\n };\n\n this.identifier = SINGLE_TITLE_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const title = paper.getTitle();\n const bodyText = paper.getText();\n\n let status = 'good';\n if (title && bodyText) {\n const titleLower = title.toLowerCase().trim();\n if (titleLower && bodyText.toLowerCase().includes(titleLower)) status = 'bad';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n}\n\nexport default SingleTitleAssessment;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAA6E,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7E;AACA;AACA;AACA;AACA,MAAMG,qBAAqB,SAASC,mBAAU,CAAC;EAC7C;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEC,yBAAe;MACnBC,MAAM,EAAE,yCAAyC;MACjDC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,iBAAiB;MACxBC,OAAO,EAAE;QACPC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE,sEAAsE;QAC3EC,IAAI,EAAE;MACR;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGT,yBAAe;IACjC,IAAI,CAACU,OAAO,GAAG,IAAAC,aAAK,EAACb,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEe,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAACnB,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IAErE,MAAMO,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACL,KAAK,CAAC;IAEpD,IAAI,CAAC,IAAAM,mBAAW,EAACF,gBAAgB,CAAC,EAAE;MAClCF,gBAAgB,CAACK,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;MACjDN,gBAAgB,CAACO,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACrD;IAEA,OAAOR,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEG,eAAeA,CAACL,KAAK,EAAE;IACrB,MAAMT,KAAK,GAAGS,KAAK,CAACW,QAAQ,CAAC,CAAC;IAC9B,MAAMC,QAAQ,GAAGZ,KAAK,CAACa,OAAO,CAAC,CAAC;IAEhC,IAAIH,MAAM,GAAG,MAAM;IACnB,IAAInB,KAAK,IAAIqB,QAAQ,EAAE;MACrB,MAAME,UAAU,GAAGvB,KAAK,CAACwB,WAAW,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC;MAC7C,IAAIF,UAAU,IAAIF,QAAQ,CAACG,WAAW,CAAC,CAAC,CAACE,QAAQ,CAACH,UAAU,CAAC,EAAEJ,MAAM,GAAG,KAAK;IAC/E;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACU,QAAQ,CAACC,8BAAoB,EAAET,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEU,YAAYA,CAACpB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAAC,IAAAqB,QAAA,GAAAC,OAAA,CAAA1C,OAAA,GAEcC,qBAAqB","ignoreList":[]}
@@ -114,14 +114,14 @@ class TextImagesAssessment extends _assessment.default {
114
114
  }
115
115
 
116
116
  /**
117
- * Checks whether the paper has a text.
117
+ * Checks whether the paper has images.
118
118
  *
119
119
  * @param {Paper} paper The paper to use for the assessment.
120
- * @param researcher
121
- * @returns {boolean} True when there is text.
120
+ * @param {Researcher} researcher The researcher to use for analysis.
121
+ * @returns {boolean} True when there are images in the content.
122
122
  */
123
123
  isApplicable(paper, researcher) {
124
- return true;
124
+ return researcher.getResearch('imageCount') > 0;
125
125
  }
126
126
  }
127
127
  exports.default = TextImagesAssessment;
@@ -1 +1 @@
1
- {"version":3,"file":"TextImagesAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_helpers","_polarisIcons","_analysis","e","__esModule","default","TextImagesAssessment","Assessment","constructor","config","defaultConfig","id","TEXT_IMAGES_ID","ctaType","docUrl","fixPosition","icon","ExternalIcon","priority","title","content","good","improve","bad","identifier","_config","merge","getResult","paper","researcher","assessmentResult","AssessmentResult","altTagsProperties","getResearch","imageCount","calculatedResult","calculateResult","setScore","score","setStatus","status","imagesNoAlt","noAlt","getScore","TECHNICAL_SEO_POINTS","fix","shop","data","console","log","body","altText","name","parser","DOMParser","doc","parseFromString","imgTags","querySelectorAll","forEach","img","hasAttribute","getAttribute","setAttribute","innerHTML","isApplicable","exports"],"sources":["../../../../../src/scoring/assessments/seo/TextImagesAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {checkMissingAlt} from '../../../helpers';\nimport {ExternalIcon} from '@shopify/polaris-icons';\nimport {TECHNICAL_SEO_POINTS, TEXT_IMAGES_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that assesses the SEO title width and gives the feedback accordingly.\n */\nexport default class TextImagesAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} [config] The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_IMAGES_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#alt-text',\n fixPosition: 'description',\n icon: ExternalIcon,\n priority: 'high',\n title: 'Alt text',\n content: {\n good: 'All images have descriptive and relevant alt text.',\n improve: '',\n bad: 'Missing alt text. Add descriptive alt text for accessibility and SEO.'\n }\n };\n\n this.identifier = TEXT_IMAGES_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n const assessmentResult = new AssessmentResult({config: this._config});\n this.altTagsProperties = researcher.getResearch('altTagCount');\n this.imageCount = researcher.getResearch('imageCount');\n\n const calculatedResult = this.calculateResult(paper);\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n *\n * @returns {{score: number, status: string}}\n */\n calculateResult() {\n const imagesNoAlt = this.altTagsProperties.noAlt;\n\n let status = '';\n if (imagesNoAlt === this.imageCount || imagesNoAlt > 0) {\n status = 'bad';\n } else {\n status = 'good';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n *\n * @param shop\n * @param data\n * @returns {string}\n */\n fix({shop, data}) {\n if (!shop) {\n console.log('Shop is missing');\n return data.body || '';\n }\n\n if (!data.body) {\n console.log('body is missing');\n return '';\n }\n\n const altText = shop?.name || 'Shop' + ' | ' + data?.title || 'Title';\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(data.body, 'text/html');\n\n const imgTags = doc.querySelectorAll('img');\n\n imgTags.forEach(img => {\n if (!img.hasAttribute('alt') || img.getAttribute('alt') === '') {\n img.setAttribute('alt', altText);\n }\n });\n\n return doc.body.innerHTML;\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param researcher\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"TextImagesAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_helpers","_polarisIcons","_analysis","e","__esModule","default","TextImagesAssessment","Assessment","constructor","config","defaultConfig","id","TEXT_IMAGES_ID","ctaType","docUrl","fixPosition","icon","ExternalIcon","priority","title","content","good","improve","bad","identifier","_config","merge","getResult","paper","researcher","assessmentResult","AssessmentResult","altTagsProperties","getResearch","imageCount","calculatedResult","calculateResult","setScore","score","setStatus","status","imagesNoAlt","noAlt","getScore","TECHNICAL_SEO_POINTS","fix","shop","data","console","log","body","altText","name","parser","DOMParser","doc","parseFromString","imgTags","querySelectorAll","forEach","img","hasAttribute","getAttribute","setAttribute","innerHTML","isApplicable","exports"],"sources":["../../../../../src/scoring/assessments/seo/TextImagesAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {checkMissingAlt} from '../../../helpers';\nimport {ExternalIcon} from '@shopify/polaris-icons';\nimport {TECHNICAL_SEO_POINTS, TEXT_IMAGES_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that assesses the SEO title width and gives the feedback accordingly.\n */\nexport default class TextImagesAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} [config] The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_IMAGES_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#alt-text',\n fixPosition: 'description',\n icon: ExternalIcon,\n priority: 'high',\n title: 'Alt text',\n content: {\n good: 'All images have descriptive and relevant alt text.',\n improve: '',\n bad: 'Missing alt text. Add descriptive alt text for accessibility and SEO.'\n }\n };\n\n this.identifier = TEXT_IMAGES_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n const assessmentResult = new AssessmentResult({config: this._config});\n this.altTagsProperties = researcher.getResearch('altTagCount');\n this.imageCount = researcher.getResearch('imageCount');\n\n const calculatedResult = this.calculateResult(paper);\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n *\n * @returns {{score: number, status: string}}\n */\n calculateResult() {\n const imagesNoAlt = this.altTagsProperties.noAlt;\n\n let status = '';\n if (imagesNoAlt === this.imageCount || imagesNoAlt > 0) {\n status = 'bad';\n } else {\n status = 'good';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n *\n * @param shop\n * @param data\n * @returns {string}\n */\n fix({shop, data}) {\n if (!shop) {\n console.log('Shop is missing');\n return data.body || '';\n }\n\n if (!data.body) {\n console.log('body is missing');\n return '';\n }\n\n const altText = shop?.name || 'Shop' + ' | ' + data?.title || 'Title';\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(data.body, 'text/html');\n\n const imgTags = doc.querySelectorAll('img');\n\n imgTags.forEach(img => {\n if (!img.hasAttribute('alt') || img.getAttribute('alt') === '') {\n img.setAttribute('alt', altText);\n }\n });\n\n return doc.body.innerHTML;\n }\n\n /**\n * Checks whether the paper has images.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher to use for analysis.\n * @returns {boolean} True when there are images in the content.\n */\n isApplicable(paper, researcher) {\n return researcher.getResearch('imageCount') > 0;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -66,15 +66,9 @@ class SingleH1Assessment extends Assessment {
66
66
  const htmlString = paper.getText();
67
67
  const desHasH1Tag = htmlString.includes('<h1>');
68
68
  let status = '';
69
- if (this._h1Count === 1) {
70
- status = 'good';
71
- }
72
- if (this._h1Count === 0 && !desHasH1Tag) {
73
- status = 'good';
74
- }
75
- if (this._h1Count > 1) {
76
- status = 'bad';
77
- }
69
+ if (this._h1Count === 1) status = 'good';
70
+ if (this._h1Count === 0 && !desHasH1Tag) status = 'good';
71
+ if (this._h1Count > 1) status = 'bad';
78
72
  const score = this.getScore(TECHNICAL_SEO_POINTS, status);
79
73
  return {
80
74
  score,
@@ -1 +1 @@
1
- {"version":3,"file":"SingleH1Assessment.js","names":["isUndefined","merge","Assessment","AssessmentResult","SINGLE_H1_ID","TECHNICAL_SEO_POINTS","SingleH1Assessment","constructor","config","defaultConfig","id","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","_h1Count","getResearch","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","htmlString","getText","desHasH1Tag","includes","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/SingleH1Assessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_H1_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleH1Assessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_H1_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n fixPosition: 'description',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'H1 tag',\n content: {\n good: 'H1 tag is optimized.',\n improve: 'You should use only one H1 tag',\n bad: 'Missing H1 tag. Add one H1 to clearly define your page`s topic.'\n }\n };\n\n this.identifier = SINGLE_H1_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n this._h1Count = researcher.getResearch('h1s');\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const htmlString = paper.getText();\n const desHasH1Tag = htmlString.includes('<h1>');\n\n let status = '';\n if (this._h1Count === 1) {\n status = 'good';\n }\n\n if (this._h1Count === 0 && !desHasH1Tag) {\n status = 'good';\n }\n\n if (this._h1Count > 1) {\n status = 'bad';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true\n }\n}\n\nexport default SingleH1Assessment;\n"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,KAAK,QAAO,QAAQ;AACzC,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,YAAY,EAAEC,oBAAoB;;AAE1C;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,SAASJ,UAAU,CAAC;EAC1C;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEN,YAAY;MAChBO,MAAM,EAAE,yCAAyC;MACjDC,WAAW,EAAE,aAAa;MAC1BC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,QAAQ;MACfC,OAAO,EAAE;QACPC,IAAI,EAAE,sBAAsB;QAC5BC,OAAO,EAAE,gCAAgC;QACzCC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGhB,YAAY;IAC9B,IAAI,CAACiB,OAAO,GAAGpB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEc,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,QAAQ,GAAGD,UAAU,CAACE,WAAW,CAAC,KAAK,CAAC;IAC7C,MAAMC,gBAAgB,GAAG,IAAIxB,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IAErE,MAAMO,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACN,KAAK,CAAC;IAEpD,IAAI,CAACvB,WAAW,CAAC4B,gBAAgB,CAAC,EAAE;MAClCD,gBAAgB,CAACG,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;MACjDJ,gBAAgB,CAACK,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IACrD;IAEA,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEE,eAAeA,CAACN,KAAK,EAAE;IACrB,MAAMW,UAAU,GAAGX,KAAK,CAACY,OAAO,CAAC,CAAC;IAClC,MAAMC,WAAW,GAAGF,UAAU,CAACG,QAAQ,CAAC,MAAM,CAAC;IAE/C,IAAIJ,MAAM,GAAG,EAAE;IACf,IAAI,IAAI,CAACR,QAAQ,KAAK,CAAC,EAAE;MACvBQ,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACR,QAAQ,KAAK,CAAC,IAAI,CAACW,WAAW,EAAE;MACvCH,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACR,QAAQ,GAAG,CAAC,EAAE;MACrBQ,MAAM,GAAG,KAAK;IAChB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACO,QAAQ,CAACjC,oBAAoB,EAAE4B,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEM,YAAYA,CAAChB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAEA,eAAejB,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"SingleH1Assessment.js","names":["isUndefined","merge","Assessment","AssessmentResult","SINGLE_H1_ID","TECHNICAL_SEO_POINTS","SingleH1Assessment","constructor","config","defaultConfig","id","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","_h1Count","getResearch","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","htmlString","getText","desHasH1Tag","includes","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/SingleH1Assessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_H1_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleH1Assessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_H1_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n fixPosition: 'description',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'H1 tag',\n content: {\n good: 'H1 tag is optimized.',\n improve: 'You should use only one H1 tag',\n bad: 'Missing H1 tag. Add one H1 to clearly define your page`s topic.'\n }\n };\n\n this.identifier = SINGLE_H1_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n this._h1Count = researcher.getResearch('h1s');\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const htmlString = paper.getText();\n const desHasH1Tag = htmlString.includes('<h1>');\n\n let status = '';\n if (this._h1Count === 1) status = 'good';\n if (this._h1Count === 0 && !desHasH1Tag) status = 'good';\n if (this._h1Count > 1) status = 'bad';\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n}\n\nexport default SingleH1Assessment;\n"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,KAAK,QAAO,QAAQ;AACzC,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,YAAY,EAAEC,oBAAoB;;AAE1C;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,SAASJ,UAAU,CAAC;EAC1C;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEN,YAAY;MAChBO,MAAM,EAAE,yCAAyC;MACjDC,WAAW,EAAE,aAAa;MAC1BC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,QAAQ;MACfC,OAAO,EAAE;QACPC,IAAI,EAAE,sBAAsB;QAC5BC,OAAO,EAAE,gCAAgC;QACzCC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGhB,YAAY;IAC9B,IAAI,CAACiB,OAAO,GAAGpB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEc,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,QAAQ,GAAGD,UAAU,CAACE,WAAW,CAAC,KAAK,CAAC;IAC7C,MAAMC,gBAAgB,GAAG,IAAIxB,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IAErE,MAAMO,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACN,KAAK,CAAC;IAEpD,IAAI,CAACvB,WAAW,CAAC4B,gBAAgB,CAAC,EAAE;MAClCD,gBAAgB,CAACG,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;MACjDJ,gBAAgB,CAACK,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IACrD;IAEA,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEE,eAAeA,CAACN,KAAK,EAAE;IACrB,MAAMW,UAAU,GAAGX,KAAK,CAACY,OAAO,CAAC,CAAC;IAClC,MAAMC,WAAW,GAAGF,UAAU,CAACG,QAAQ,CAAC,MAAM,CAAC;IAE/C,IAAIJ,MAAM,GAAG,EAAE;IACf,IAAI,IAAI,CAACR,QAAQ,KAAK,CAAC,EAAEQ,MAAM,GAAG,MAAM;IACxC,IAAI,IAAI,CAACR,QAAQ,KAAK,CAAC,IAAI,CAACW,WAAW,EAAEH,MAAM,GAAG,MAAM;IACxD,IAAI,IAAI,CAACR,QAAQ,GAAG,CAAC,EAAEQ,MAAM,GAAG,KAAK;IAErC,MAAMF,KAAK,GAAG,IAAI,CAACO,QAAQ,CAACjC,oBAAoB,EAAE4B,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEM,YAAYA,CAAChB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAEA,eAAejB,kBAAkB","ignoreList":[]}
@@ -61,10 +61,12 @@ class SingleTitleAssessment extends Assessment {
61
61
  * @returns {{score: number, status: string}}
62
62
  */
63
63
  calculateResult(paper) {
64
- const count = paper.getTitleCount();
65
- let status = 'bad';
66
- if (count === 1) {
67
- status = 'good';
64
+ const title = paper.getTitle();
65
+ const bodyText = paper.getText();
66
+ let status = 'good';
67
+ if (title && bodyText) {
68
+ const titleLower = title.toLowerCase().trim();
69
+ if (titleLower && bodyText.toLowerCase().includes(titleLower)) status = 'bad';
68
70
  }
69
71
  const score = this.getScore(TECHNICAL_SEO_POINTS, status);
70
72
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"SingleTitleAssessment.js","names":["isUndefined","merge","Assessment","AssessmentResult","SINGLE_TITLE_ID","TECHNICAL_SEO_POINTS","SingleTitleAssessment","constructor","config","defaultConfig","id","docUrl","ctaType","priority","title","content","improve","bad","good","identifier","_config","getResult","paper","researcher","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","count","getTitleCount","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/SingleTitleAssessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_TITLE_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleTitleAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_TITLE_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'Duplicate title',\n content: {\n improve: '',\n bad: 'Found duplicate titles. Check your content and create unique titles.',\n good: 'No duplicate titles found.'\n }\n };\n\n this.identifier = SINGLE_TITLE_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const count = paper.getTitleCount();\n\n let status = 'bad';\n if (count === 1) {\n status = 'good';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n}\n\nexport default SingleTitleAssessment;\n"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,KAAK,QAAO,QAAQ;AACzC,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,eAAe,EAAEC,oBAAoB;;AAE7C;AACA;AACA;AACA;AACA,MAAMC,qBAAqB,SAASJ,UAAU,CAAC;EAC7C;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEN,eAAe;MACnBO,MAAM,EAAE,yCAAyC;MACjDC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,iBAAiB;MACxBC,OAAO,EAAE;QACPC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE,sEAAsE;QAC3EC,IAAI,EAAE;MACR;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGf,eAAe;IACjC,IAAI,CAACgB,OAAO,GAAGnB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEa,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAIrB,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACY;IAAO,CAAC,CAAC;IAErE,MAAMK,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACJ,KAAK,CAAC;IAEpD,IAAI,CAACtB,WAAW,CAACyB,gBAAgB,CAAC,EAAE;MAClCD,gBAAgB,CAACG,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;MACjDJ,gBAAgB,CAACK,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IACrD;IAEA,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEE,eAAeA,CAACJ,KAAK,EAAE;IACrB,MAAMS,KAAK,GAAGT,KAAK,CAACU,aAAa,CAAC,CAAC;IAEnC,IAAIF,MAAM,GAAG,KAAK;IAClB,IAAIC,KAAK,KAAK,CAAC,EAAE;MACfD,MAAM,GAAG,MAAM;IACjB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACK,QAAQ,CAAC5B,oBAAoB,EAAEyB,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEI,YAAYA,CAACZ,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAEA,eAAehB,qBAAqB","ignoreList":[]}
1
+ {"version":3,"file":"SingleTitleAssessment.js","names":["isUndefined","merge","Assessment","AssessmentResult","SINGLE_TITLE_ID","TECHNICAL_SEO_POINTS","SingleTitleAssessment","constructor","config","defaultConfig","id","docUrl","ctaType","priority","title","content","improve","bad","good","identifier","_config","getResult","paper","researcher","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","getTitle","bodyText","getText","titleLower","toLowerCase","trim","includes","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/SingleTitleAssessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_TITLE_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleTitleAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_TITLE_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'Duplicate title',\n content: {\n improve: '',\n bad: 'Found duplicate titles. Check your content and create unique titles.',\n good: 'No duplicate titles found.'\n }\n };\n\n this.identifier = SINGLE_TITLE_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const title = paper.getTitle();\n const bodyText = paper.getText();\n\n let status = 'good';\n if (title && bodyText) {\n const titleLower = title.toLowerCase().trim();\n if (titleLower && bodyText.toLowerCase().includes(titleLower)) status = 'bad';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n}\n\nexport default SingleTitleAssessment;\n"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,KAAK,QAAO,QAAQ;AACzC,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,eAAe,EAAEC,oBAAoB;;AAE7C;AACA;AACA;AACA;AACA,MAAMC,qBAAqB,SAASJ,UAAU,CAAC;EAC7C;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEN,eAAe;MACnBO,MAAM,EAAE,yCAAyC;MACjDC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,iBAAiB;MACxBC,OAAO,EAAE;QACPC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE,sEAAsE;QAC3EC,IAAI,EAAE;MACR;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGf,eAAe;IACjC,IAAI,CAACgB,OAAO,GAAGnB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEa,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAIrB,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACY;IAAO,CAAC,CAAC;IAErE,MAAMK,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACJ,KAAK,CAAC;IAEpD,IAAI,CAACtB,WAAW,CAACyB,gBAAgB,CAAC,EAAE;MAClCD,gBAAgB,CAACG,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;MACjDJ,gBAAgB,CAACK,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IACrD;IAEA,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEE,eAAeA,CAACJ,KAAK,EAAE;IACrB,MAAMR,KAAK,GAAGQ,KAAK,CAACS,QAAQ,CAAC,CAAC;IAC9B,MAAMC,QAAQ,GAAGV,KAAK,CAACW,OAAO,CAAC,CAAC;IAEhC,IAAIH,MAAM,GAAG,MAAM;IACnB,IAAIhB,KAAK,IAAIkB,QAAQ,EAAE;MACrB,MAAME,UAAU,GAAGpB,KAAK,CAACqB,WAAW,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC;MAC7C,IAAIF,UAAU,IAAIF,QAAQ,CAACG,WAAW,CAAC,CAAC,CAACE,QAAQ,CAACH,UAAU,CAAC,EAAEJ,MAAM,GAAG,KAAK;IAC/E;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACU,QAAQ,CAACjC,oBAAoB,EAAEyB,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACES,YAAYA,CAACjB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAEA,eAAehB,qBAAqB","ignoreList":[]}
@@ -108,14 +108,14 @@ export default class TextImagesAssessment extends Assessment {
108
108
  }
109
109
 
110
110
  /**
111
- * Checks whether the paper has a text.
111
+ * Checks whether the paper has images.
112
112
  *
113
113
  * @param {Paper} paper The paper to use for the assessment.
114
- * @param researcher
115
- * @returns {boolean} True when there is text.
114
+ * @param {Researcher} researcher The researcher to use for analysis.
115
+ * @returns {boolean} True when there are images in the content.
116
116
  */
117
117
  isApplicable(paper, researcher) {
118
- return true;
118
+ return researcher.getResearch('imageCount') > 0;
119
119
  }
120
120
  }
121
121
  //# sourceMappingURL=TextImagesAssessment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextImagesAssessment.js","names":["merge","Assessment","AssessmentResult","checkMissingAlt","ExternalIcon","TECHNICAL_SEO_POINTS","TEXT_IMAGES_ID","TextImagesAssessment","constructor","config","defaultConfig","id","ctaType","docUrl","fixPosition","icon","priority","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","assessmentResult","altTagsProperties","getResearch","imageCount","calculatedResult","calculateResult","setScore","score","setStatus","status","imagesNoAlt","noAlt","getScore","fix","shop","data","console","log","body","altText","name","parser","DOMParser","doc","parseFromString","imgTags","querySelectorAll","forEach","img","hasAttribute","getAttribute","setAttribute","innerHTML","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/TextImagesAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {checkMissingAlt} from '../../../helpers';\nimport {ExternalIcon} from '@shopify/polaris-icons';\nimport {TECHNICAL_SEO_POINTS, TEXT_IMAGES_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that assesses the SEO title width and gives the feedback accordingly.\n */\nexport default class TextImagesAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} [config] The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_IMAGES_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#alt-text',\n fixPosition: 'description',\n icon: ExternalIcon,\n priority: 'high',\n title: 'Alt text',\n content: {\n good: 'All images have descriptive and relevant alt text.',\n improve: '',\n bad: 'Missing alt text. Add descriptive alt text for accessibility and SEO.'\n }\n };\n\n this.identifier = TEXT_IMAGES_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n const assessmentResult = new AssessmentResult({config: this._config});\n this.altTagsProperties = researcher.getResearch('altTagCount');\n this.imageCount = researcher.getResearch('imageCount');\n\n const calculatedResult = this.calculateResult(paper);\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n *\n * @returns {{score: number, status: string}}\n */\n calculateResult() {\n const imagesNoAlt = this.altTagsProperties.noAlt;\n\n let status = '';\n if (imagesNoAlt === this.imageCount || imagesNoAlt > 0) {\n status = 'bad';\n } else {\n status = 'good';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n *\n * @param shop\n * @param data\n * @returns {string}\n */\n fix({shop, data}) {\n if (!shop) {\n console.log('Shop is missing');\n return data.body || '';\n }\n\n if (!data.body) {\n console.log('body is missing');\n return '';\n }\n\n const altText = shop?.name || 'Shop' + ' | ' + data?.title || 'Title';\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(data.body, 'text/html');\n\n const imgTags = doc.querySelectorAll('img');\n\n imgTags.forEach(img => {\n if (!img.hasAttribute('alt') || img.getAttribute('alt') === '') {\n img.setAttribute('alt', altText);\n }\n });\n\n return doc.body.innerHTML;\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param researcher\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"TextImagesAssessment.js","names":["merge","Assessment","AssessmentResult","checkMissingAlt","ExternalIcon","TECHNICAL_SEO_POINTS","TEXT_IMAGES_ID","TextImagesAssessment","constructor","config","defaultConfig","id","ctaType","docUrl","fixPosition","icon","priority","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","assessmentResult","altTagsProperties","getResearch","imageCount","calculatedResult","calculateResult","setScore","score","setStatus","status","imagesNoAlt","noAlt","getScore","fix","shop","data","console","log","body","altText","name","parser","DOMParser","doc","parseFromString","imgTags","querySelectorAll","forEach","img","hasAttribute","getAttribute","setAttribute","innerHTML","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/TextImagesAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {checkMissingAlt} from '../../../helpers';\nimport {ExternalIcon} from '@shopify/polaris-icons';\nimport {TECHNICAL_SEO_POINTS, TEXT_IMAGES_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that assesses the SEO title width and gives the feedback accordingly.\n */\nexport default class TextImagesAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} [config] The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_IMAGES_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#alt-text',\n fixPosition: 'description',\n icon: ExternalIcon,\n priority: 'high',\n title: 'Alt text',\n content: {\n good: 'All images have descriptive and relevant alt text.',\n improve: '',\n bad: 'Missing alt text. Add descriptive alt text for accessibility and SEO.'\n }\n };\n\n this.identifier = TEXT_IMAGES_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n const assessmentResult = new AssessmentResult({config: this._config});\n this.altTagsProperties = researcher.getResearch('altTagCount');\n this.imageCount = researcher.getResearch('imageCount');\n\n const calculatedResult = this.calculateResult(paper);\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n *\n * @returns {{score: number, status: string}}\n */\n calculateResult() {\n const imagesNoAlt = this.altTagsProperties.noAlt;\n\n let status = '';\n if (imagesNoAlt === this.imageCount || imagesNoAlt > 0) {\n status = 'bad';\n } else {\n status = 'good';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n *\n * @param shop\n * @param data\n * @returns {string}\n */\n fix({shop, data}) {\n if (!shop) {\n console.log('Shop is missing');\n return data.body || '';\n }\n\n if (!data.body) {\n console.log('body is missing');\n return '';\n }\n\n const altText = shop?.name || 'Shop' + ' | ' + data?.title || 'Title';\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(data.body, 'text/html');\n\n const imgTags = doc.querySelectorAll('img');\n\n imgTags.forEach(img => {\n if (!img.hasAttribute('alt') || img.getAttribute('alt') === '') {\n img.setAttribute('alt', altText);\n }\n });\n\n return doc.body.innerHTML;\n }\n\n /**\n * Checks whether the paper has images.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher to use for analysis.\n * @returns {boolean} True when there are images in the content.\n */\n isApplicable(paper, researcher) {\n return researcher.getResearch('imageCount') > 0;\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axyseo",
3
- "version": "2025.1.0-blog.11",
3
+ "version": "2025.1.0-blog.13",
4
4
  "main": "build/cjs/index.js",
5
5
  "module": "build/esm/index.js",
6
6
  "exports": {