axyseo 2.1.33 → 2.1.35

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 (77) hide show
  1. package/build/cjs/scoring/assessments/assessment.js +3 -2
  2. package/build/cjs/scoring/assessments/assessment.js.map +1 -1
  3. package/build/cjs/scoring/assessments/readability/SentenceLengthInTextAssessment.js +1 -2
  4. package/build/cjs/scoring/assessments/readability/SentenceLengthInTextAssessment.js.map +1 -1
  5. package/build/cjs/scoring/assessments/seo/FAQsAssessment.js +1 -1
  6. package/build/cjs/scoring/assessments/seo/FAQsAssessment.js.map +1 -1
  7. package/build/cjs/scoring/assessments/seo/FAQsStructureDataAssessment.js +5 -4
  8. package/build/cjs/scoring/assessments/seo/FAQsStructureDataAssessment.js.map +1 -1
  9. package/build/cjs/scoring/assessments/seo/ImageCountAssessment.js +1 -3
  10. package/build/cjs/scoring/assessments/seo/ImageCountAssessment.js.map +1 -1
  11. package/build/cjs/scoring/assessments/seo/InvalidCharactersInUrl.js +1 -1
  12. package/build/cjs/scoring/assessments/seo/InvalidCharactersInUrl.js.map +1 -1
  13. package/build/cjs/scoring/assessments/seo/KeyphraseAssessment.js +5 -1
  14. package/build/cjs/scoring/assessments/seo/KeyphraseAssessment.js.map +1 -1
  15. package/build/cjs/scoring/assessments/seo/KeyphraseLengthAssessment.js +1 -1
  16. package/build/cjs/scoring/assessments/seo/KeyphraseLengthAssessment.js.map +1 -1
  17. package/build/cjs/scoring/assessments/seo/KeywordDensityAssessment.js +1 -1
  18. package/build/cjs/scoring/assessments/seo/KeywordDensityAssessment.js.map +1 -1
  19. package/build/cjs/scoring/assessments/seo/KeywordFAQsAssessment.js +4 -1
  20. package/build/cjs/scoring/assessments/seo/KeywordFAQsAssessment.js.map +1 -1
  21. package/build/cjs/scoring/assessments/seo/NumberInMetaTitleAssessment.js +1 -1
  22. package/build/cjs/scoring/assessments/seo/NumberInMetaTitleAssessment.js.map +1 -1
  23. package/build/cjs/scoring/assessments/seo/SchemaAssessment.js +1 -1
  24. package/build/cjs/scoring/assessments/seo/SchemaAssessment.js.map +1 -1
  25. package/build/cjs/scoring/assessments/seo/SingleH1Assessment.js +1 -1
  26. package/build/cjs/scoring/assessments/seo/SingleH1Assessment.js.map +1 -1
  27. package/build/cjs/scoring/assessments/seo/SubHeadingsKeywordAssessment.js +1 -2
  28. package/build/cjs/scoring/assessments/seo/SubHeadingsKeywordAssessment.js.map +1 -1
  29. package/build/cjs/scoring/assessments/seo/TextImagesAssessment.js +2 -5
  30. package/build/cjs/scoring/assessments/seo/TextImagesAssessment.js.map +1 -1
  31. package/build/cjs/scoring/assessments/seo/TextLengthAssessment.js +1 -1
  32. package/build/cjs/scoring/assessments/seo/TextLengthAssessment.js.map +1 -1
  33. package/build/cjs/scoring/assessments/seo/UrlKeywordAssessment.js +1 -2
  34. package/build/cjs/scoring/assessments/seo/UrlKeywordAssessment.js.map +1 -1
  35. package/build/cjs/scoring/assessments/seo/UrlLengthAssessment.js +1 -2
  36. package/build/cjs/scoring/assessments/seo/UrlLengthAssessment.js.map +1 -1
  37. package/build/cjs/scoring/assessors/avadaAssessor.js +2 -2
  38. package/build/cjs/scoring/assessors/avadaAssessor.js.map +1 -1
  39. package/build/esm/scoring/assessments/assessment.js +3 -2
  40. package/build/esm/scoring/assessments/assessment.js.map +1 -1
  41. package/build/esm/scoring/assessments/readability/SentenceLengthInTextAssessment.js +1 -2
  42. package/build/esm/scoring/assessments/readability/SentenceLengthInTextAssessment.js.map +1 -1
  43. package/build/esm/scoring/assessments/seo/FAQsAssessment.js +1 -1
  44. package/build/esm/scoring/assessments/seo/FAQsAssessment.js.map +1 -1
  45. package/build/esm/scoring/assessments/seo/FAQsStructureDataAssessment.js +5 -4
  46. package/build/esm/scoring/assessments/seo/FAQsStructureDataAssessment.js.map +1 -1
  47. package/build/esm/scoring/assessments/seo/ImageCountAssessment.js +1 -3
  48. package/build/esm/scoring/assessments/seo/ImageCountAssessment.js.map +1 -1
  49. package/build/esm/scoring/assessments/seo/InvalidCharactersInUrl.js +1 -1
  50. package/build/esm/scoring/assessments/seo/InvalidCharactersInUrl.js.map +1 -1
  51. package/build/esm/scoring/assessments/seo/KeyphraseAssessment.js +5 -1
  52. package/build/esm/scoring/assessments/seo/KeyphraseAssessment.js.map +1 -1
  53. package/build/esm/scoring/assessments/seo/KeyphraseLengthAssessment.js +1 -1
  54. package/build/esm/scoring/assessments/seo/KeyphraseLengthAssessment.js.map +1 -1
  55. package/build/esm/scoring/assessments/seo/KeywordDensityAssessment.js +1 -1
  56. package/build/esm/scoring/assessments/seo/KeywordDensityAssessment.js.map +1 -1
  57. package/build/esm/scoring/assessments/seo/KeywordFAQsAssessment.js +4 -1
  58. package/build/esm/scoring/assessments/seo/KeywordFAQsAssessment.js.map +1 -1
  59. package/build/esm/scoring/assessments/seo/NumberInMetaTitleAssessment.js +1 -1
  60. package/build/esm/scoring/assessments/seo/NumberInMetaTitleAssessment.js.map +1 -1
  61. package/build/esm/scoring/assessments/seo/SchemaAssessment.js +1 -1
  62. package/build/esm/scoring/assessments/seo/SchemaAssessment.js.map +1 -1
  63. package/build/esm/scoring/assessments/seo/SingleH1Assessment.js +1 -1
  64. package/build/esm/scoring/assessments/seo/SingleH1Assessment.js.map +1 -1
  65. package/build/esm/scoring/assessments/seo/SubHeadingsKeywordAssessment.js +1 -2
  66. package/build/esm/scoring/assessments/seo/SubHeadingsKeywordAssessment.js.map +1 -1
  67. package/build/esm/scoring/assessments/seo/TextImagesAssessment.js +2 -5
  68. package/build/esm/scoring/assessments/seo/TextImagesAssessment.js.map +1 -1
  69. package/build/esm/scoring/assessments/seo/TextLengthAssessment.js +1 -1
  70. package/build/esm/scoring/assessments/seo/TextLengthAssessment.js.map +1 -1
  71. package/build/esm/scoring/assessments/seo/UrlKeywordAssessment.js +1 -2
  72. package/build/esm/scoring/assessments/seo/UrlKeywordAssessment.js.map +1 -1
  73. package/build/esm/scoring/assessments/seo/UrlLengthAssessment.js +1 -2
  74. package/build/esm/scoring/assessments/seo/UrlLengthAssessment.js.map +1 -1
  75. package/build/esm/scoring/assessors/avadaAssessor.js +2 -2
  76. package/build/esm/scoring/assessors/avadaAssessor.js.map +1 -1
  77. package/package.json +1 -1
@@ -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 = 'bad';\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,KAAK;IAClB,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":[]}
@@ -69,9 +69,8 @@ class SubHeadingsKeywordAssessment extends _assessment.default {
69
69
  if (this._subHeadings.matches > 0) {
70
70
  status = 'good';
71
71
  }
72
- const score = this.getScore(_analysis.MAIN_CONTENT_POINTS, status);
73
72
  return {
74
- score,
73
+ score: this.getScore(_analysis.MAIN_CONTENT_POINTS, status) || 0,
75
74
  status
76
75
  };
77
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SubHeadingsKeywordAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","e","__esModule","default","SubHeadingsKeywordAssessment","Assessment","constructor","config","defaultConfig","id","SUBHEADINGS_KEYWORD_ID","ctaType","docUrl","priority","fixPosition","title","content","good","bad","improve","identifier","_config","merge","getResult","paper","researcher","_subHeadings","getResearch","assessmentResult","AssessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","matches","getScore","MAIN_CONTENT_POINTS","isApplicable","exports"],"sources":["../../../../../src/scoring/assessments/seo/SubHeadingsKeywordAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {MAIN_CONTENT_POINTS, SUBHEADINGS_KEYWORD_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that checks if the keyword is present in one of the subheadings.\n */\nexport default class SubHeadingsKeywordAssessment 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: SUBHEADINGS_KEYWORD_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#keyword-in-subheading',\n priority: 'medium',\n fixPosition: 'subheading',\n title: 'Keyword in Subheading',\n content: {\n good: 'Keywords are included in subheadings.',\n bad:\n 'Keyword not found in any subheadings. Include it in at least one subheading (H2, H3, etc.).',\n improve: ''\n }\n };\n\n this.identifier = SUBHEADINGS_KEYWORD_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\n this._subHeadings = researcher.getResearch('matchKeywordInSubheadings');\n\n const assessmentResult = new AssessmentResult({config: this._config});\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 let status = 'bad';\n if (this._subHeadings.matches > 0) {\n status = 'good';\n }\n\n const score = this.getScore(MAIN_CONTENT_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"],"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;AAAmF,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnF;AACA;AACA;AACe,MAAMG,4BAA4B,SAASC,mBAAU,CAAC;EACnE;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,gCAAsB;MAC1BC,OAAO,EAAE,KAAK;MACdC,MAAM,EACJ,mGAAmG;MACrGC,QAAQ,EAAE,QAAQ;MAClBC,WAAW,EAAE,YAAY;MACzBC,KAAK,EAAE,uBAAuB;MAC9BC,OAAO,EAAE;QACPC,IAAI,EAAE,uCAAuC;QAC7CC,GAAG,EACD,6FAA6F;QAC/FC,OAAO,EAAE;MACX;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,gCAAsB;IACxC,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;IAE7B,IAAI,CAACC,YAAY,GAAGD,UAAU,CAACE,WAAW,CAAC,2BAA2B,CAAC;IAEvE,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAACtB,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErE,MAAMS,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACP,KAAK,CAAC;IAEpDI,gBAAgB,CAACI,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;IACjDL,gBAAgB,CAACM,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IAEnD,OAAOP,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;EACEG,eAAeA,CAAA,EAAG;IAChB,IAAII,MAAM,GAAG,KAAK;IAClB,IAAI,IAAI,CAACT,YAAY,CAACU,OAAO,GAAG,CAAC,EAAE;MACjCD,MAAM,GAAG,MAAM;IACjB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACI,QAAQ,CAACC,6BAAmB,EAAEH,MAAM,CAAC;IAExD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEI,YAAYA,CAACf,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAACgB,OAAA,CAAArC,OAAA,GAAAC,4BAAA","ignoreList":[]}
1
+ {"version":3,"file":"SubHeadingsKeywordAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","e","__esModule","default","SubHeadingsKeywordAssessment","Assessment","constructor","config","defaultConfig","id","SUBHEADINGS_KEYWORD_ID","ctaType","docUrl","priority","fixPosition","title","content","good","bad","improve","identifier","_config","merge","getResult","paper","researcher","_subHeadings","getResearch","assessmentResult","AssessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","matches","getScore","MAIN_CONTENT_POINTS","isApplicable","exports"],"sources":["../../../../../src/scoring/assessments/seo/SubHeadingsKeywordAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {MAIN_CONTENT_POINTS, SUBHEADINGS_KEYWORD_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that checks if the keyword is present in one of the subheadings.\n */\nexport default class SubHeadingsKeywordAssessment 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: SUBHEADINGS_KEYWORD_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#keyword-in-subheading',\n priority: 'medium',\n fixPosition: 'subheading',\n title: 'Keyword in Subheading',\n content: {\n good: 'Keywords are included in subheadings.',\n bad:\n 'Keyword not found in any subheadings. Include it in at least one subheading (H2, H3, etc.).',\n improve: ''\n }\n };\n\n this.identifier = SUBHEADINGS_KEYWORD_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\n this._subHeadings = researcher.getResearch('matchKeywordInSubheadings');\n\n const assessmentResult = new AssessmentResult({config: this._config});\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 let status = 'bad';\n if (this._subHeadings.matches > 0) {\n status = 'good';\n }\n\n\n return {\n score: this.getScore(MAIN_CONTENT_POINTS, status) || 0,\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"],"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;AAAmF,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnF;AACA;AACA;AACe,MAAMG,4BAA4B,SAASC,mBAAU,CAAC;EACnE;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,gCAAsB;MAC1BC,OAAO,EAAE,KAAK;MACdC,MAAM,EACJ,mGAAmG;MACrGC,QAAQ,EAAE,QAAQ;MAClBC,WAAW,EAAE,YAAY;MACzBC,KAAK,EAAE,uBAAuB;MAC9BC,OAAO,EAAE;QACPC,IAAI,EAAE,uCAAuC;QAC7CC,GAAG,EACD,6FAA6F;QAC/FC,OAAO,EAAE;MACX;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,gCAAsB;IACxC,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;IAE7B,IAAI,CAACC,YAAY,GAAGD,UAAU,CAACE,WAAW,CAAC,2BAA2B,CAAC;IAEvE,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAACtB,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErE,MAAMS,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACP,KAAK,CAAC;IAEpDI,gBAAgB,CAACI,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;IACjDL,gBAAgB,CAACM,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IAEnD,OAAOP,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;EACEG,eAAeA,CAAA,EAAG;IAChB,IAAII,MAAM,GAAG,KAAK;IAClB,IAAI,IAAI,CAACT,YAAY,CAACU,OAAO,GAAG,CAAC,EAAE;MACjCD,MAAM,GAAG,MAAM;IACjB;IAGA,OAAO;MACLF,KAAK,EAAG,IAAI,CAACI,QAAQ,CAACC,6BAAmB,EAAEH,MAAM,CAAC,IAAI,CAAC;MACvDA;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEI,YAAYA,CAACf,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAACgB,OAAA,CAAArC,OAAA,GAAAC,4BAAA","ignoreList":[]}
@@ -67,15 +67,12 @@ class TextImagesAssessment extends _assessment.default {
67
67
  */
68
68
  calculateResult() {
69
69
  const imagesNoAlt = this.altTagsProperties.noAlt;
70
- let status = '';
70
+ let status = 'good';
71
71
  if (imagesNoAlt === this.imageCount || imagesNoAlt > 0) {
72
72
  status = 'bad';
73
- } else {
74
- status = 'good';
75
73
  }
76
- const score = this.getScore(_analysis.TECHNICAL_SEO_POINTS, status);
77
74
  return {
78
- score,
75
+ score: this.getScore(_analysis.TECHNICAL_SEO_POINTS, status) || 0,
79
76
  status
80
77
  };
81
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TextImagesAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","e","__esModule","default","TextImagesAssessment","Assessment","constructor","config","defaultConfig","id","TEXT_IMAGES_ID","ctaType","docUrl","fixPosition","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 {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 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","_analysis","e","__esModule","default","TextImagesAssessment","Assessment","constructor","config","defaultConfig","id","TEXT_IMAGES_ID","ctaType","docUrl","fixPosition","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 {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 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 = 'good';\n if (imagesNoAlt === this.imageCount || imagesNoAlt > 0) {\n status = 'bad';\n }\n\n return {\n score: this.getScore(TECHNICAL_SEO_POINTS, status) || 0,\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":[]}
@@ -105,7 +105,7 @@ class TextLengthAssessment extends _assessment.default {
105
105
  });
106
106
  }
107
107
  return {
108
- score: this.getScore(_analysis.MAIN_CONTENT_POINTS, status),
108
+ score: this.getScore(_analysis.MAIN_CONTENT_POINTS, status) || 0,
109
109
  status
110
110
  };
111
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TextLengthAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_wordCountInText","_analysis","e","__esModule","default","TextLengthAssessment","Assessment","constructor","config","defaultConfig","id","TEXT_LENGTH_ID","ctaType","docUrl","priority","fixPosition","title","content","good","bad","identifier","_config","merge","getResult","paper","researcher","calculatedResult","calculateResult","assessmentResult","AssessmentResult","setScore","score","setStatus","status","pageType","getPageType","count","wordCount","wordCountInText","rules","product","min","max","badMessage","collection","article","page","rule","type","getScore","MAIN_CONTENT_POINTS","isApplicable","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/TextLengthAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport wordCountInText from '@axyseo/languageProcessing/researches/wordCountInText';\nimport {MAIN_CONTENT_POINTS, TEXT_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents an assessment that checks the length of the text and gives feedback accordingly.\n */\n class TextLengthAssessment 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_LENGTH_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#text-length',\n priority: 'high',\n fixPosition: 'description',\n title: 'Content length ',\n content: {\n good: 'Content length on target',\n bad:\n 'Write 300 to 500 words. Cover features, specs, sizing, use, and care. '\n }\n };\n\n this.identifier = TEXT_LENGTH_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n const assessmentResult = new AssessmentResult({config: this._config});\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const pageType = paper.getPageType();\n const { count: wordCount } = wordCountInText(paper);\n const rules = {\n product: {\n min: 300,\n max: 500,\n badMessage:\n 'Write 300 to 500 words. Cover features, specs, sizing, use, and care.',\n },\n collection: {\n min: 150,\n max: 300,\n badMessage:\n 'Write 150 to 300 words. Present the range and give quick buying guidance.'\n },\n article: {\n min: 600,\n max: 1000,\n badMessage:\n 'Write 600 to 1000 words. Explain the topic with clear sections and examples.'\n },\n page: {\n min: 600,\n max: 1000,\n badMessage:\n 'Write 600 to 1000 words. Provide clear, well-structured info for the page’s purpose.'\n }\n };\n\n let status = 'good';\n const rule = rules[pageType];\n\n if (rule && (wordCount < rule.min || wordCount > rule.max)) {\n status = 'bad';\n this._config = merge(this._config, {\n content: {\n good: 'Content length on target',\n bad: rule.badMessage\n },\n type: pageType\n });\n }\n\n return {\n score: this.getScore(MAIN_CONTENT_POINTS, status),\n status\n };\n }\n\n /**\n * Checks whether the paper has a keyword and a slug.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} True if the paper contains a keyword and a slug, and if the keywordCountInSlug research is available on the researcher.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n}\n\nexport default TextLengthAssessment;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,gBAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,SAAA,GAAAL,OAAA;AAA2E,SAAAE,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE3E;AACA;AACA;AACC,MAAMG,oBAAoB,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,wBAAc;MAClBC,OAAO,EAAE,KAAK;MACdC,MAAM,EACJ,yFAAyF;MAC3FC,QAAQ,EAAE,MAAM;MAChBC,WAAW,EAAE,aAAa;MAC1BC,KAAK,EAAE,iBAAiB;MACxBC,OAAO,EAAE;QACPC,IAAI,EAAE,0BAA0B;QAChCC,GAAG,EACD;MACJ;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGT,wBAAc;IAChC,IAAI,CAACU,OAAO,GAAG,IAAAC,aAAK,EAACb,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEe,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACH,KAAK,CAAC;IACpD,MAAMI,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAACrB,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IACrEO,gBAAgB,CAACE,QAAQ,CAACJ,gBAAgB,CAACK,KAAK,CAAC;IACjDH,gBAAgB,CAACI,SAAS,CAACN,gBAAgB,CAACO,MAAM,CAAC;IAEnD,OAAOL,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACED,eAAeA,CAACH,KAAK,EAAE;IACrB,MAAMU,QAAQ,GAAGV,KAAK,CAACW,WAAW,CAAC,CAAC;IACpC,MAAM;MAAEC,KAAK,EAAEC;IAAU,CAAC,GAAG,IAAAC,wBAAe,EAACd,KAAK,CAAC;IACnD,MAAMe,KAAK,GAAG;MACZC,OAAO,EAAE;QACPC,GAAG,EAAE,GAAG;QACRC,GAAG,EAAE,GAAG;QACRC,UAAU,EACR;MACJ,CAAC;MACDC,UAAU,EAAE;QACVH,GAAG,EAAE,GAAG;QACRC,GAAG,EAAE,GAAG;QACRC,UAAU,EACR;MACJ,CAAC;MACDE,OAAO,EAAE;QACPJ,GAAG,EAAE,GAAG;QACRC,GAAG,EAAE,IAAI;QACTC,UAAU,EACR;MACJ,CAAC;MACDG,IAAI,EAAE;QACJL,GAAG,EAAE,GAAG;QACRC,GAAG,EAAE,IAAI;QACTC,UAAU,EACR;MACJ;IACF,CAAC;IAED,IAAIV,MAAM,GAAG,MAAM;IACnB,MAAMc,IAAI,GAAGR,KAAK,CAACL,QAAQ,CAAC;IAE5B,IAAIa,IAAI,KAAKV,SAAS,GAAGU,IAAI,CAACN,GAAG,IAAIJ,SAAS,GAAGU,IAAI,CAACL,GAAG,CAAC,EAAE;MAC1DT,MAAM,GAAG,KAAK;MACd,IAAI,CAACZ,OAAO,GAAG,IAAAC,aAAK,EAAC,IAAI,CAACD,OAAO,EAAE;QACjCJ,OAAO,EAAE;UACPC,IAAI,EAAE,0BAA0B;UAChCC,GAAG,EAAE4B,IAAI,CAACJ;QACZ,CAAC;QACDK,IAAI,EAAEd;MACR,CAAC,CAAC;IACJ;IAEA,OAAO;MACLH,KAAK,EAAE,IAAI,CAACkB,QAAQ,CAACC,6BAAmB,EAAEjB,MAAM,CAAC;MACjDA;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEkB,YAAYA,CAAC3B,KAAK,EAAEC,UAAU,EAAE;IAC9B,OAAO,IAAI;EACb;AACF;AAAC,IAAA2B,QAAA,GAAAC,OAAA,CAAAjD,OAAA,GAEcC,oBAAoB","ignoreList":[]}
1
+ {"version":3,"file":"TextLengthAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_wordCountInText","_analysis","e","__esModule","default","TextLengthAssessment","Assessment","constructor","config","defaultConfig","id","TEXT_LENGTH_ID","ctaType","docUrl","priority","fixPosition","title","content","good","bad","identifier","_config","merge","getResult","paper","researcher","calculatedResult","calculateResult","assessmentResult","AssessmentResult","setScore","score","setStatus","status","pageType","getPageType","count","wordCount","wordCountInText","rules","product","min","max","badMessage","collection","article","page","rule","type","getScore","MAIN_CONTENT_POINTS","isApplicable","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/TextLengthAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport wordCountInText from '@axyseo/languageProcessing/researches/wordCountInText';\nimport {MAIN_CONTENT_POINTS, TEXT_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents an assessment that checks the length of the text and gives feedback accordingly.\n */\n class TextLengthAssessment 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_LENGTH_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#text-length',\n priority: 'high',\n fixPosition: 'description',\n title: 'Content length ',\n content: {\n good: 'Content length on target',\n bad:\n 'Write 300 to 500 words. Cover features, specs, sizing, use, and care. '\n }\n };\n\n this.identifier = TEXT_LENGTH_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n const assessmentResult = new AssessmentResult({config: this._config});\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const pageType = paper.getPageType();\n const { count: wordCount } = wordCountInText(paper);\n const rules = {\n product: {\n min: 300,\n max: 500,\n badMessage:\n 'Write 300 to 500 words. Cover features, specs, sizing, use, and care.',\n },\n collection: {\n min: 150,\n max: 300,\n badMessage:\n 'Write 150 to 300 words. Present the range and give quick buying guidance.'\n },\n article: {\n min: 600,\n max: 1000,\n badMessage:\n 'Write 600 to 1000 words. Explain the topic with clear sections and examples.'\n },\n page: {\n min: 600,\n max: 1000,\n badMessage:\n 'Write 600 to 1000 words. Provide clear, well-structured info for the page’s purpose.'\n }\n };\n\n let status = 'good';\n const rule = rules[pageType];\n\n if (rule && (wordCount < rule.min || wordCount > rule.max)) {\n status = 'bad';\n this._config = merge(this._config, {\n content: {\n good: 'Content length on target',\n bad: rule.badMessage\n },\n type: pageType\n });\n }\n\n return {\n score: this.getScore(MAIN_CONTENT_POINTS, status) || 0,\n status\n };\n }\n\n /**\n * Checks whether the paper has a keyword and a slug.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} True if the paper contains a keyword and a slug, and if the keywordCountInSlug research is available on the researcher.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n}\n\nexport default TextLengthAssessment;\n"],"mappings":"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","ignoreList":[]}
@@ -84,9 +84,8 @@ class SlugKeywordAssessment extends _assessment.default {
84
84
  const status = (() => {
85
85
  return this._keywordInSlug.percentWordMatches >= 50 ? 'good' : 'bad';
86
86
  })();
87
- const score = this.getScore(_analysis.URLS_POINTS, status);
88
87
  return {
89
- score,
88
+ score: this.getScore(_analysis.URLS_POINTS, status) || 0,
90
89
  status
91
90
  };
92
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UrlKeywordAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","_chineseHelperFactory","e","__esModule","default","SlugKeywordAssessment","Assessment","constructor","config","defaultConfig","id","SLUG_KEYWORD_ID","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","merge","getResult","paper","researcher","enhancedResearcher","enhanceResearcherForChinese","getSlug","getKeyword","_keywordInSlug","getResearch","assessmentResult","AssessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","isApplicable","percentWordMatches","getScore","URLS_POINTS","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/UrlKeywordAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\n\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {SLUG_KEYWORD_ID, URLS_POINTS} from '@axyseo/const/analysis';\nimport {enhanceResearcherForChinese} from '@axyseo/languageProcessing/helpers/language/chineseHelperFactory';\n\n/**\n * Represents the Slug keyword assessment. This assessment checks if the keyword is present in the slug.\n */\nclass SlugKeywordAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SLUG_KEYWORD_ID,\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#keyword-in-url',\n fixPosition: 'url handle',\n ctaType: 'fix',\n priority: 'medium',\n title: 'Keyword in URL',\n content: {\n good: 'Keyword is included in URL.',\n improve: '',\n bad: 'Missing keyword in URL. Include it for relevance and better SEO.'\n }\n };\n\n this.identifier = SLUG_KEYWORD_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n // Enhance researcher for Chinese if needed - specifically for URL context\n const enhancedResearcher = enhanceResearcherForChinese(\n researcher,\n paper.getSlug(),\n paper.getKeyword(),\n true // isUrlContext = true for enhanced Chinese URL matching\n );\n\n this._keywordInSlug = enhancedResearcher.getResearch('keywordCountInSlug');\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult();\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has a keyword and a slug.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} True if the paper contains a keyword and a slug, and if the keywordCountInSlug research is available on the researcher.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n\n /**\n *\n * @returns {{score: number, status: (string)}}\n */\n calculateResult() {\n const status = (() => {\n return this._keywordInSlug.percentWordMatches >= 50 ? 'good' : 'bad';\n })();\n\n const score = this.getScore(URLS_POINTS, status);\n\n return {\n score,\n status\n };\n }\n}\n\nexport default SlugKeywordAssessment;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,qBAAA,GAAAL,OAAA;AAA6G,SAAAE,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7G;AACA;AACA;AACA,MAAMG,qBAAqB,SAASC,mBAAU,CAAC;EAC7C;AACF;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,EACJ,4FAA4F;MAC9FC,WAAW,EAAE,YAAY;MACzBC,OAAO,EAAE,KAAK;MACdC,QAAQ,EAAE,QAAQ;MAClBC,KAAK,EAAE,gBAAgB;MACvBC,OAAO,EAAE;QACPC,IAAI,EAAE,6BAA6B;QACnCC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,yBAAe;IACjC,IAAI,CAACW,OAAO,GAAG,IAAAC,aAAK,EAACd,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEgB,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B;IACA,MAAMC,kBAAkB,GAAG,IAAAC,iDAA2B,EACpDF,UAAU,EACVD,KAAK,CAACI,OAAO,CAAC,CAAC,EACfJ,KAAK,CAACK,UAAU,CAAC,CAAC,EAClB,IAAI,CAAC;IACP,CAAC;IAED,IAAI,CAACC,cAAc,GAAGJ,kBAAkB,CAACK,WAAW,CAAC,oBAAoB,CAAC;IAE1E,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAAC1B,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErE,MAAMa,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAAC,CAAC;IAE/CH,gBAAgB,CAACI,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;IACjDL,gBAAgB,CAACM,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IACnD,OAAOP,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEQ,YAAYA,CAAChB,KAAK,EAAEC,UAAU,EAAE;IAC9B,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACEU,eAAeA,CAAA,EAAG;IAChB,MAAMI,MAAM,GAAG,CAAC,MAAM;MACpB,OAAO,IAAI,CAACT,cAAc,CAACW,kBAAkB,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK;IACtE,CAAC,EAAE,CAAC;IAEJ,MAAMJ,KAAK,GAAG,IAAI,CAACK,QAAQ,CAACC,qBAAW,EAAEJ,MAAM,CAAC;IAEhD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;AACF;AAAC,IAAAK,QAAA,GAAAC,OAAA,CAAA1C,OAAA,GAEcC,qBAAqB","ignoreList":[]}
1
+ {"version":3,"file":"UrlKeywordAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","_chineseHelperFactory","e","__esModule","default","SlugKeywordAssessment","Assessment","constructor","config","defaultConfig","id","SLUG_KEYWORD_ID","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","merge","getResult","paper","researcher","enhancedResearcher","enhanceResearcherForChinese","getSlug","getKeyword","_keywordInSlug","getResearch","assessmentResult","AssessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","isApplicable","percentWordMatches","getScore","URLS_POINTS","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/UrlKeywordAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\n\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {SLUG_KEYWORD_ID, URLS_POINTS} from '@axyseo/const/analysis';\nimport {enhanceResearcherForChinese} from '@axyseo/languageProcessing/helpers/language/chineseHelperFactory';\n\n/**\n * Represents the Slug keyword assessment. This assessment checks if the keyword is present in the slug.\n */\nclass SlugKeywordAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SLUG_KEYWORD_ID,\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#keyword-in-url',\n fixPosition: 'url handle',\n ctaType: 'fix',\n priority: 'medium',\n title: 'Keyword in URL',\n content: {\n good: 'Keyword is included in URL.',\n improve: '',\n bad: 'Missing keyword in URL. Include it for relevance and better SEO.'\n }\n };\n\n this.identifier = SLUG_KEYWORD_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n // Enhance researcher for Chinese if needed - specifically for URL context\n const enhancedResearcher = enhanceResearcherForChinese(\n researcher,\n paper.getSlug(),\n paper.getKeyword(),\n true // isUrlContext = true for enhanced Chinese URL matching\n );\n\n this._keywordInSlug = enhancedResearcher.getResearch('keywordCountInSlug');\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult();\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has a keyword and a slug.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} True if the paper contains a keyword and a slug, and if the keywordCountInSlug research is available on the researcher.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n\n /**\n *\n * @returns {{score: number, status: (string)}}\n */\n calculateResult() {\n const status = (() => {\n return this._keywordInSlug.percentWordMatches >= 50 ? 'good' : 'bad';\n })();\n\n return {\n score: this.getScore(URLS_POINTS, status) || 0,\n status\n };\n }\n}\n\nexport default SlugKeywordAssessment;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,qBAAA,GAAAL,OAAA;AAA6G,SAAAE,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7G;AACA;AACA;AACA,MAAMG,qBAAqB,SAASC,mBAAU,CAAC;EAC7C;AACF;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,EACJ,4FAA4F;MAC9FC,WAAW,EAAE,YAAY;MACzBC,OAAO,EAAE,KAAK;MACdC,QAAQ,EAAE,QAAQ;MAClBC,KAAK,EAAE,gBAAgB;MACvBC,OAAO,EAAE;QACPC,IAAI,EAAE,6BAA6B;QACnCC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,yBAAe;IACjC,IAAI,CAACW,OAAO,GAAG,IAAAC,aAAK,EAACd,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEgB,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B;IACA,MAAMC,kBAAkB,GAAG,IAAAC,iDAA2B,EACpDF,UAAU,EACVD,KAAK,CAACI,OAAO,CAAC,CAAC,EACfJ,KAAK,CAACK,UAAU,CAAC,CAAC,EAClB,IAAI,CAAC;IACP,CAAC;IAED,IAAI,CAACC,cAAc,GAAGJ,kBAAkB,CAACK,WAAW,CAAC,oBAAoB,CAAC;IAE1E,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAAC1B,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErE,MAAMa,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAAC,CAAC;IAE/CH,gBAAgB,CAACI,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;IACjDL,gBAAgB,CAACM,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IACnD,OAAOP,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEQ,YAAYA,CAAChB,KAAK,EAAEC,UAAU,EAAE;IAC9B,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACEU,eAAeA,CAAA,EAAG;IAChB,MAAMI,MAAM,GAAG,CAAC,MAAM;MACpB,OAAO,IAAI,CAACT,cAAc,CAACW,kBAAkB,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK;IACtE,CAAC,EAAE,CAAC;IAEJ,OAAO;MACLJ,KAAK,EAAE,IAAI,CAACK,QAAQ,CAACC,qBAAW,EAAEJ,MAAM,CAAC,IAAI,CAAC;MAC9CA;IACF,CAAC;EACH;AACF;AAAC,IAAAK,QAAA,GAAAC,OAAA,CAAA1C,OAAA,GAEcC,qBAAqB","ignoreList":[]}
@@ -50,9 +50,8 @@ class UrlLengthAssessment extends _assessment.default {
50
50
  if (length < 75) {
51
51
  status = 'good';
52
52
  }
53
- const score = this.getScore(_analysis.URLS_POINTS, status);
54
53
  return {
55
- score,
54
+ score: this.getScore(_analysis.URLS_POINTS, status) || 0,
56
55
  status
57
56
  };
58
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UrlLengthAssessment.js","names":["_lodash","require","_AssessmentResult","_interopRequireDefault","_assessment","_analysis","e","__esModule","default","UrlLengthAssessment","Assessment","constructor","config","defaultConfig","id","URL_LENGTH_ID","priority","docUrl","fixPosition","ctaType","title","content","good","improve","bad","identifier","_config","merge","calculateResult","paper","status","length","getDomain","getSlug","score","getScore","URLS_POINTS","getResult","researcher","calculatedResult","assessmentResult","AssessmentResult","setScore","setStatus","isApplicable","exports"],"sources":["../../../../../src/scoring/assessments/seo/UrlLengthAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport Assessment from '../assessment';\nimport {URL_LENGTH_ID, URLS_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that checks whether there are three or more consecutive sentences beginning with the same word.\n */\nexport default class UrlLengthAssessment 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: URL_LENGTH_ID,\n priority: 'high',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#url-length',\n fixPosition: 'url handle',\n ctaType: 'fix',\n title: 'URL length',\n content: {\n good: 'URL length is optimized, less than 75 characters.',\n improve: '',\n bad: 'Keep it less than 75 characters for better readability and SEO.'\n }\n };\n\n this.identifier = URL_LENGTH_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n let status = 'bad';\n const length = paper.getDomain().length + paper.getSlug().length;\n if (length < 75) {\n status = 'good';\n }\n\n const score = this.getScore(URLS_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n *\n * @param paper\n * @param researcher\n * @param i18n\n * @returns {AssessmentResult}\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks if the sentence beginnings assessment is applicable to the paper.\n *\n * @param {Object} paper The paper to check.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} Returns true if the language is available and the paper is not empty.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAAkE,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElE;AACA;AACA;AACe,MAAMG,mBAAmB,SAASC,mBAAU,CAAC;EAC1D;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,uBAAa;MACjBC,QAAQ,EAAE,MAAM;MAChBC,MAAM,EACJ,wFAAwF;MAC1FC,WAAW,EAAE,YAAY;MACzBC,OAAO,EAAE,KAAK;MACdC,KAAK,EAAE,YAAY;MACnBC,OAAO,EAAE;QACPC,IAAI,EAAE,mDAAmD;QACzDC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,uBAAa;IAC/B,IAAI,CAACW,OAAO,GAAG,IAAAC,aAAK,EAACd,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;EACEgB,eAAeA,CAACC,KAAK,EAAE;IACrB,IAAIC,MAAM,GAAG,KAAK;IAClB,MAAMC,MAAM,GAAGF,KAAK,CAACG,SAAS,CAAC,CAAC,CAACD,MAAM,GAAGF,KAAK,CAACI,OAAO,CAAC,CAAC,CAACF,MAAM;IAChE,IAAIA,MAAM,GAAG,EAAE,EAAE;MACfD,MAAM,GAAG,MAAM;IACjB;IAEA,MAAMI,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACC,qBAAW,EAAEN,MAAM,CAAC;IAEhD,OAAO;MACLI,KAAK;MACLJ;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,SAASA,CAAC;IAACR,KAAK;IAAES;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAI,CAACX,eAAe,CAACC,KAAK,CAAC;IACpD,MAAMW,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAAC7B,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErEc,gBAAgB,CAACE,QAAQ,CAACH,gBAAgB,CAACL,KAAK,CAAC;IACjDM,gBAAgB,CAACG,SAAS,CAACJ,gBAAgB,CAACT,MAAM,CAAC;IAEnD,OAAOU,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEI,YAAYA,CAACf,KAAK,EAAES,UAAU,EAAE;IAC9B,OAAO,IAAI;EACb;AACF;AAACO,OAAA,CAAArC,OAAA,GAAAC,mBAAA","ignoreList":[]}
1
+ {"version":3,"file":"UrlLengthAssessment.js","names":["_lodash","require","_AssessmentResult","_interopRequireDefault","_assessment","_analysis","e","__esModule","default","UrlLengthAssessment","Assessment","constructor","config","defaultConfig","id","URL_LENGTH_ID","priority","docUrl","fixPosition","ctaType","title","content","good","improve","bad","identifier","_config","merge","calculateResult","paper","status","length","getDomain","getSlug","score","getScore","URLS_POINTS","getResult","researcher","calculatedResult","assessmentResult","AssessmentResult","setScore","setStatus","isApplicable","exports"],"sources":["../../../../../src/scoring/assessments/seo/UrlLengthAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport Assessment from '../assessment';\nimport {URL_LENGTH_ID, URLS_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that checks whether there are three or more consecutive sentences beginning with the same word.\n */\nexport default class UrlLengthAssessment 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: URL_LENGTH_ID,\n priority: 'high',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#url-length',\n fixPosition: 'url handle',\n ctaType: 'fix',\n title: 'URL length',\n content: {\n good: 'URL length is optimized, less than 75 characters.',\n improve: '',\n bad: 'Keep it less than 75 characters for better readability and SEO.'\n }\n };\n\n this.identifier = URL_LENGTH_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n let status = 'bad';\n const length = paper.getDomain().length + paper.getSlug().length;\n if (length < 75) {\n status = 'good';\n }\n\n return {\n score: this.getScore(URLS_POINTS, status) || 0,\n status\n };\n }\n\n /**\n *\n * @param paper\n * @param researcher\n * @param i18n\n * @returns {AssessmentResult}\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks if the sentence beginnings assessment is applicable to the paper.\n *\n * @param {Object} paper The paper to check.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} Returns true if the language is available and the paper is not empty.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAAkE,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElE;AACA;AACA;AACe,MAAMG,mBAAmB,SAASC,mBAAU,CAAC;EAC1D;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,uBAAa;MACjBC,QAAQ,EAAE,MAAM;MAChBC,MAAM,EACJ,wFAAwF;MAC1FC,WAAW,EAAE,YAAY;MACzBC,OAAO,EAAE,KAAK;MACdC,KAAK,EAAE,YAAY;MACnBC,OAAO,EAAE;QACPC,IAAI,EAAE,mDAAmD;QACzDC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,uBAAa;IAC/B,IAAI,CAACW,OAAO,GAAG,IAAAC,aAAK,EAACd,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;EACEgB,eAAeA,CAACC,KAAK,EAAE;IACrB,IAAIC,MAAM,GAAG,KAAK;IAClB,MAAMC,MAAM,GAAGF,KAAK,CAACG,SAAS,CAAC,CAAC,CAACD,MAAM,GAAGF,KAAK,CAACI,OAAO,CAAC,CAAC,CAACF,MAAM;IAChE,IAAIA,MAAM,GAAG,EAAE,EAAE;MACfD,MAAM,GAAG,MAAM;IACjB;IAEA,OAAO;MACLI,KAAK,EAAE,IAAI,CAACC,QAAQ,CAACC,qBAAW,EAAEN,MAAM,CAAC,IAAI,CAAC;MAC9CA;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,SAASA,CAAC;IAACR,KAAK;IAAES;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAI,CAACX,eAAe,CAACC,KAAK,CAAC;IACpD,MAAMW,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAAC7B,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErEc,gBAAgB,CAACE,QAAQ,CAACH,gBAAgB,CAACL,KAAK,CAAC;IACjDM,gBAAgB,CAACG,SAAS,CAACJ,gBAAgB,CAACT,MAAM,CAAC;IAEnD,OAAOU,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEI,YAAYA,CAACf,KAAK,EAAES,UAAU,EAAE;IAC9B,OAAO,IAAI;EACb;AACF;AAACO,OAAA,CAAArC,OAAA,GAAAC,mBAAA","ignoreList":[]}
@@ -52,6 +52,7 @@ class AvadaAssessor {
52
52
  this.seoAssessor.assess(paper, i18n);
53
53
  this.contentAssessor.assess(paper, i18n);
54
54
  let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];
55
+ console.log('assessments', assessments);
55
56
  assessments = assessments.map(assessment => ({
56
57
  ...assessment.config,
57
58
  status: assessment.status,
@@ -59,7 +60,6 @@ class AvadaAssessor {
59
60
  data: assessment.data,
60
61
  title: assessment.title || assessment.config.title
61
62
  }));
62
- console.log('assessments', assessments);
63
63
  this.assessments = assessments;
64
64
  }
65
65
  assessBackEnd(paper) {
@@ -95,7 +95,7 @@ class AvadaAssessor {
95
95
  getScore() {
96
96
  let point = 0;
97
97
  this.assessments.forEach(assessment => {
98
- point += assessment.score;
98
+ point += assessment.score || 0;
99
99
  });
100
100
  return Math.round(point);
101
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"avadaAssessor.js","names":["_index","require","_helpers","AvadaAssessor","constructor","researcher","config","seoAssessor","SEOAssessor","contentAssessor","ContentAssessor","assess","paper","i18n","assessments","results","map","assessment","status","score","data","title","console","log","assessBackEnd","getResult","groupBy","getScore","groupAssessmentsByCategory","groupAssessmentsByStatus","point","forEach","Math","round","exports","default"],"sources":["../../../../src/scoring/assessors/avadaAssessor.js"],"sourcesContent":["import {ContentAssessor, SEOAssessor} from '@axyseo/scoring/assessors/index';\nimport {groupAssessmentsByCategory, groupAssessmentsByStatus} from '../helpers';\n\n/**\n * The AvadaAssessor class is used for the general SEO analysis.\n */\nexport default class AvadaAssessor {\n /**\n * Creates a new AvadaAssessor instance.\n * @param {Researcher} researcher The researcher to use.\n * @param {Object} [config] The assessor config.\n * @param {Object} [config.textParagraphTooLong]\n * @param {Object} [config.textSentenceLength]\n * @param {Object} [config.textTransitionWords]\n * @param {Object} [config.sentenceBeginnings]\n * @param {Object} [config.relatedKeywords]\n * @param {Object} [config.titleKeyword]\n * @param {Object} [config.textImages]\n * @param {Object} [config.numberTitle]\n * @param {Object} [config.introductionKeyword]\n * @param {Object} [config.keyphraseLength]\n * @param {Object} [config.metaDescriptionKeyword]\n * @param {Object} [config.metaDescriptionLength]\n * @param {Object} [config.subheadingsKeyword]\n * @param {Object} [config.externalLinks]\n * @param {Object} [config.keyphraseDensity]\n * @param {Object} [config.media]\n * @param {Object} [config.urlLength]\n * @param {Object} [config.textLength]\n * @param {Object} [config.singleTitle]\n * @param {Object} [config.keyphrase]\n * @param {Object} [config.internalLinks]\n * @param {Object} [config.titleWidth]\n * @param {Object} [config.slugKeyword]\n * @param {Object} [config.singleH1]\n * @param {Object} [config.schema]\n */\n constructor(researcher, config = {}) {\n const seoAssessor = new SEOAssessor(researcher, config);\n const contentAssessor = new ContentAssessor(researcher, config);\n this.seoAssessor = seoAssessor;\n this.contentAssessor = contentAssessor;\n this.researcher = researcher;\n this.config = config;\n }\n\n assess(paper, i18n) {\n this.seoAssessor.assess(paper, i18n);\n this.contentAssessor.assess(paper, i18n);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n console.log('assessments', assessments);\n this.assessments = assessments;\n }\n\n assessBackEnd(paper) {\n this.seoAssessor.assess(paper);\n this.contentAssessor.assess(paper);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n getResult(groupBy = 'category', getScore = true) {\n let assessments = [];\n switch (groupBy) {\n case 'category':\n assessments = groupAssessmentsByCategory(this.assessments);\n break;\n case 'status':\n assessments = groupAssessmentsByStatus(this.assessments);\n break;\n }\n\n return {\n assessments,\n ...(getScore ? {score: this.getScore()} : {})\n };\n }\n\n getScore() {\n let point = 0;\n this.assessments.forEach(assessment => {\n point += assessment.score;\n });\n return Math.round((point));\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"avadaAssessor.js","names":["_index","require","_helpers","AvadaAssessor","constructor","researcher","config","seoAssessor","SEOAssessor","contentAssessor","ContentAssessor","assess","paper","i18n","assessments","results","console","log","map","assessment","status","score","data","title","assessBackEnd","getResult","groupBy","getScore","groupAssessmentsByCategory","groupAssessmentsByStatus","point","forEach","Math","round","exports","default"],"sources":["../../../../src/scoring/assessors/avadaAssessor.js"],"sourcesContent":["import {ContentAssessor, SEOAssessor} from '@axyseo/scoring/assessors/index';\nimport {groupAssessmentsByCategory, groupAssessmentsByStatus} from '../helpers';\n\n/**\n * The AvadaAssessor class is used for the general SEO analysis.\n */\nexport default class AvadaAssessor {\n /**\n * Creates a new AvadaAssessor instance.\n * @param {Researcher} researcher The researcher to use.\n * @param {Object} [config] The assessor config.\n * @param {Object} [config.textParagraphTooLong]\n * @param {Object} [config.textSentenceLength]\n * @param {Object} [config.textTransitionWords]\n * @param {Object} [config.sentenceBeginnings]\n * @param {Object} [config.relatedKeywords]\n * @param {Object} [config.titleKeyword]\n * @param {Object} [config.textImages]\n * @param {Object} [config.numberTitle]\n * @param {Object} [config.introductionKeyword]\n * @param {Object} [config.keyphraseLength]\n * @param {Object} [config.metaDescriptionKeyword]\n * @param {Object} [config.metaDescriptionLength]\n * @param {Object} [config.subheadingsKeyword]\n * @param {Object} [config.externalLinks]\n * @param {Object} [config.keyphraseDensity]\n * @param {Object} [config.media]\n * @param {Object} [config.urlLength]\n * @param {Object} [config.textLength]\n * @param {Object} [config.singleTitle]\n * @param {Object} [config.keyphrase]\n * @param {Object} [config.internalLinks]\n * @param {Object} [config.titleWidth]\n * @param {Object} [config.slugKeyword]\n * @param {Object} [config.singleH1]\n * @param {Object} [config.schema]\n */\n constructor(researcher, config = {}) {\n const seoAssessor = new SEOAssessor(researcher, config);\n const contentAssessor = new ContentAssessor(researcher, config);\n this.seoAssessor = seoAssessor;\n this.contentAssessor = contentAssessor;\n this.researcher = researcher;\n this.config = config;\n }\n\n assess(paper, i18n) {\n this.seoAssessor.assess(paper, i18n);\n this.contentAssessor.assess(paper, i18n);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n console.log('assessments', assessments);\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n assessBackEnd(paper) {\n this.seoAssessor.assess(paper);\n this.contentAssessor.assess(paper);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n getResult(groupBy = 'category', getScore = true) {\n let assessments = [];\n switch (groupBy) {\n case 'category':\n assessments = groupAssessmentsByCategory(this.assessments);\n break;\n case 'status':\n assessments = groupAssessmentsByStatus(this.assessments);\n break;\n }\n\n return {\n assessments,\n ...(getScore ? {score: this.getScore()} : {})\n };\n }\n\n getScore() {\n let point = 0;\n this.assessments.forEach(assessment => {\n point += assessment.score || 0;\n });\n return Math.round((point));\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -59,8 +59,9 @@ class Assessment {
59
59
  * @param status
60
60
  * @returns {number}
61
61
  */
62
- getScore(points, status) {
63
- return points * statusRate[status];
62
+ getScore(points, status = 'good') {
63
+ const newStatus = status === 'bad' ? 'bad' : 'bad';
64
+ return points * statusRate[newStatus];
64
65
  }
65
66
  }
66
67
 
@@ -1 +1 @@
1
- {"version":3,"file":"assessment.js","names":["sanitizeString","filterShortcodesFromHTML","removeHtmlBlocks","statusRate","Assessment","getResult","paper","researcher","i18n","isApplicable","hasEnoughContentForAssessment","contentNeededForAssessment","text","getText","_attributes","shortcodes","length","checkCanSkip","getScore","points","status"],"sources":["../../../../src/scoring/assessments/assessment.js"],"sourcesContent":["/* eslint-disable no-unused-vars */\nimport {sanitizeString} from '../../languageProcessing';\nimport {filterShortcodesFromHTML, removeHtmlBlocks} from '../../languageProcessing/helpers';\nimport {statusRate} from '../../const/analysis';\n\n/**\n * The base class for an Assessment.\n */\nclass Assessment {\n /**\n * Executes the assessment and return its result.\n *\n * @param {Paper} paper The paper to run this assessment on.\n * @param {Researcher} researcher The researcher used for the assessment.\n * @param i18n\n * @returns {AssessmentResult} The result of the assessment.\n */\n getResult({paper, researcher, i18n}) {\n throw 'The method getResult is not implemented';\n }\n\n /**\n * Checks whether the assessment is applicable.\n *\n * @param {Paper} paper The paper to run this assessment on.\n * @param {Researcher} researcher The researcher used for the assessment.\n *\n * @returns {boolean} Whether the assessment is applicable, defaults to `true`.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n\n /**\n * Tests whether a `Paper` has enough content for assessments to be displayed.\n *\n * @param {Paper} paper The paper to run this assessment on.\n * @param {number} contentNeededForAssessment The minimum length in characters a text must have for assessments to be displayed.\n *\n * @returns {boolean} `true` if the text is of the required length, `false` otherwise.\n */\n hasEnoughContentForAssessment(paper, contentNeededForAssessment = 50) {\n let text = paper.getText();\n text = removeHtmlBlocks(text);\n text = filterShortcodesFromHTML(text, paper._attributes && paper._attributes.shortcodes);\n\n return sanitizeString(text).length >= contentNeededForAssessment;\n }\n\n checkCanSkip(paper) {\n return !this.hasEnoughContentForAssessment;\n }\n\n /**\n *\n * @param points\n * @param status\n * @returns {number}\n */\n getScore(points, status) {\n return points * statusRate[status]\n\n }\n}\n\n/* eslint-enable no-unused-vars */\n\nexport default Assessment;\n"],"mappings":"AAAA;AACA,SAAQA,cAAc;AACtB,SAAQC,wBAAwB,EAAEC,gBAAgB;AAClD,SAAQC,UAAU;;AAElB;AACA;AACA;AACA,MAAMC,UAAU,CAAC;EACf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,SAASA,CAAC;IAACC,KAAK;IAAEC,UAAU;IAAEC;EAAI,CAAC,EAAE;IACnC,MAAM,yCAAyC;EACjD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,YAAYA,CAACH,KAAK,EAAEC,UAAU,EAAE;IAC9B,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,6BAA6BA,CAACJ,KAAK,EAAEK,0BAA0B,GAAG,EAAE,EAAE;IACpE,IAAIC,IAAI,GAAGN,KAAK,CAACO,OAAO,CAAC,CAAC;IAC1BD,IAAI,GAAGV,gBAAgB,CAACU,IAAI,CAAC;IAC7BA,IAAI,GAAGX,wBAAwB,CAACW,IAAI,EAAEN,KAAK,CAACQ,WAAW,IAAIR,KAAK,CAACQ,WAAW,CAACC,UAAU,CAAC;IAExF,OAAOf,cAAc,CAACY,IAAI,CAAC,CAACI,MAAM,IAAIL,0BAA0B;EAClE;EAEAM,YAAYA,CAACX,KAAK,EAAE;IAClB,OAAO,CAAC,IAAI,CAACI,6BAA6B;EAC5C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEQ,QAAQA,CAACC,MAAM,EAAEC,MAAM,EAAE;IACvB,OAAOD,MAAM,GAAGhB,UAAU,CAACiB,MAAM,CAAC;EAEpC;AACF;;AAEA;;AAEA,eAAehB,UAAU","ignoreList":[]}
1
+ {"version":3,"file":"assessment.js","names":["sanitizeString","filterShortcodesFromHTML","removeHtmlBlocks","statusRate","Assessment","getResult","paper","researcher","i18n","isApplicable","hasEnoughContentForAssessment","contentNeededForAssessment","text","getText","_attributes","shortcodes","length","checkCanSkip","getScore","points","status","newStatus"],"sources":["../../../../src/scoring/assessments/assessment.js"],"sourcesContent":["/* eslint-disable no-unused-vars */\nimport {sanitizeString} from '../../languageProcessing';\nimport {filterShortcodesFromHTML, removeHtmlBlocks} from '../../languageProcessing/helpers';\nimport {statusRate} from '../../const/analysis';\n\n/**\n * The base class for an Assessment.\n */\nclass Assessment {\n /**\n * Executes the assessment and return its result.\n *\n * @param {Paper} paper The paper to run this assessment on.\n * @param {Researcher} researcher The researcher used for the assessment.\n * @param i18n\n * @returns {AssessmentResult} The result of the assessment.\n */\n getResult({paper, researcher, i18n}) {\n throw 'The method getResult is not implemented';\n }\n\n /**\n * Checks whether the assessment is applicable.\n *\n * @param {Paper} paper The paper to run this assessment on.\n * @param {Researcher} researcher The researcher used for the assessment.\n *\n * @returns {boolean} Whether the assessment is applicable, defaults to `true`.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n\n /**\n * Tests whether a `Paper` has enough content for assessments to be displayed.\n *\n * @param {Paper} paper The paper to run this assessment on.\n * @param {number} contentNeededForAssessment The minimum length in characters a text must have for assessments to be displayed.\n *\n * @returns {boolean} `true` if the text is of the required length, `false` otherwise.\n */\n hasEnoughContentForAssessment(paper, contentNeededForAssessment = 50) {\n let text = paper.getText();\n text = removeHtmlBlocks(text);\n text = filterShortcodesFromHTML(text, paper._attributes && paper._attributes.shortcodes);\n\n return sanitizeString(text).length >= contentNeededForAssessment;\n }\n\n checkCanSkip(paper) {\n return !this.hasEnoughContentForAssessment;\n }\n\n /**\n *\n * @param points\n * @param status\n * @returns {number}\n */\n getScore(points, status = 'good') {\n const newStatus = status === 'bad' ? 'bad' : 'bad';\n return points * statusRate[newStatus]\n\n }\n}\n\n/* eslint-enable no-unused-vars */\n\nexport default Assessment;\n"],"mappings":"AAAA;AACA,SAAQA,cAAc;AACtB,SAAQC,wBAAwB,EAAEC,gBAAgB;AAClD,SAAQC,UAAU;;AAElB;AACA;AACA;AACA,MAAMC,UAAU,CAAC;EACf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,SAASA,CAAC;IAACC,KAAK;IAAEC,UAAU;IAAEC;EAAI,CAAC,EAAE;IACnC,MAAM,yCAAyC;EACjD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,YAAYA,CAACH,KAAK,EAAEC,UAAU,EAAE;IAC9B,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,6BAA6BA,CAACJ,KAAK,EAAEK,0BAA0B,GAAG,EAAE,EAAE;IACpE,IAAIC,IAAI,GAAGN,KAAK,CAACO,OAAO,CAAC,CAAC;IAC1BD,IAAI,GAAGV,gBAAgB,CAACU,IAAI,CAAC;IAC7BA,IAAI,GAAGX,wBAAwB,CAACW,IAAI,EAAEN,KAAK,CAACQ,WAAW,IAAIR,KAAK,CAACQ,WAAW,CAACC,UAAU,CAAC;IAExF,OAAOf,cAAc,CAACY,IAAI,CAAC,CAACI,MAAM,IAAIL,0BAA0B;EAClE;EAEAM,YAAYA,CAACX,KAAK,EAAE;IAClB,OAAO,CAAC,IAAI,CAACI,6BAA6B;EAC5C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEQ,QAAQA,CAACC,MAAM,EAAEC,MAAM,GAAG,MAAM,EAAE;IAChC,MAAMC,SAAS,GAAGD,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK;IAClD,OAAOD,MAAM,GAAGhB,UAAU,CAACkB,SAAS,CAAC;EAEvC;AACF;;AAEA;;AAEA,eAAejB,UAAU","ignoreList":[]}
@@ -117,9 +117,8 @@ class SentenceLengthInTextAssessment extends Assessment {
117
117
  if (percentage && hasDescription && percentage <= this._config.recommendedLength) {
118
118
  status = 'good';
119
119
  }
120
- const score = this.getScore(MAIN_CONTENT_POINTS, status);
121
120
  return {
122
- score,
121
+ score: parseInt(this.getScore(MAIN_CONTENT_POINTS, status)) || 0,
123
122
  status
124
123
  };
125
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SentenceLengthInTextAssessment.js","names":["merge","Assessment","getTooLongSentences","formatNumber","AssessmentResult","MAIN_CONTENT_POINTS","TEXT_SENTENCE_LENGTH_ID","SentenceLengthInTextAssessment","constructor","config","defaultConfig","id","priority","docUrl","ctaType","fixPosition","recommendedLength","slightlyTooMany","farTooMany","title","content","improve","bad","good","_config","identifier","getResult","paper","researcher","sentences","getResearch","hasDescription","getConfig","getLanguageSpecificConfig","percentage","calculatePercentage","result","calculateResult","assessmentResult","setScore","score","setStatus","status","isApplicable","currentConfig","languageSpecificConfig","hasOwnProperty","length","tooLongTotal","countTooLongSentences","getScore"],"sources":["../../../../../src/scoring/assessments/readability/SentenceLengthInTextAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport getTooLongSentences from '../../helpers/assessments/checkForTooLongSentences';\nimport formatNumber from '../../../helpers/formatNumber';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {MAIN_CONTENT_POINTS, TEXT_SENTENCE_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that will calculate the length of sentences in the text.\n */\nclass SentenceLengthInTextAssessment extends Assessment {\n /**\n\t * Sets the identifier and the config.\n\t *\n\t * @param {object} config\t\t\tThe scoring configuration that should be used.\n\n\t * @returns {void}\n\t */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_SENTENCE_LENGTH_ID,\n priority: 'high',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#sentence-length',\n ctaType: 'fix',\n fixPosition: 'sentenceLength',\n recommendedLength: 20,\n slightlyTooMany: 25,\n farTooMany: 30,\n title: 'Text Sentence Length',\n content: {\n improve: '',\n bad:\n 'Sentence too long. Keep sentence length less than 20 words to improve readability and flow.',\n good: 'Sentence length is optimized for readability, less than 20 words.'\n }\n };\n\n this._config = merge(defaultConfig, config);\n this.identifier = TEXT_SENTENCE_LENGTH_ID;\n }\n\n /**\n * Scores the percentage of sentences including more than the recommended number of words.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling research.\n *\n * @returns {AssessmentResult} The Assessment result.\n */\n getResult({paper, researcher}) {\n const sentences = researcher.getResearch('countSentencesFromText');\n const hasDescription = paper.hasDescription();\n if (researcher.getConfig('sentenceLength')) {\n this._config = this.getLanguageSpecificConfig(researcher);\n }\n const percentage = this.calculatePercentage(sentences);\n\n const result = this.calculateResult(percentage, hasDescription);\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(result.score);\n assessmentResult.setStatus(result.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has 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 /**\n * Check if there is language-specific config, and if so, overwrite the current config with it.\n *\n * @param {Researcher} researcher The researcher to use.\n *\n * @returns {Object} The config that should be used.\n */\n getLanguageSpecificConfig(researcher) {\n const currentConfig = this._config;\n const languageSpecificConfig = researcher.getConfig('sentenceLength');\n\n if (languageSpecificConfig.hasOwnProperty('recommendedLength')) {\n currentConfig.recommendedLength = languageSpecificConfig.recommendedLength;\n }\n\n return currentConfig;\n }\n\n /**\n * Calculates the percentage of sentences that are too long.\n *\n * @param {Array} sentences The sentences to calculate the percentage for.\n * @returns {number} The calculates percentage of too long sentences.\n */\n calculatePercentage(sentences) {\n let percentage = 0;\n\n if (sentences.length !== 0) {\n const tooLongTotal = this.countTooLongSentences(sentences);\n percentage = formatNumber((tooLongTotal / sentences.length) * 100);\n }\n\n return percentage;\n }\n\n /**\n *\n * @param percentage\n * @param hasDescription\n * @returns {{score: number, status: string}}\n */\n calculateResult(percentage, hasDescription) {\n let status = 'bad';\n if (percentage && hasDescription && percentage <= this._config.recommendedLength) {\n status = 'good';\n }\n const score = this.getScore(MAIN_CONTENT_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Gets the sentences that are qualified as being too long.\n *\n * @param {array} sentences The sentences to filter through.\n * @returns {array} Array with all the sentences considered to be too long.\n */\n getTooLongSentences(sentences) {\n return getTooLongSentences(sentences, this._config.recommendedLength);\n }\n\n /**\n * Get the total amount of sentences that are qualified as being too long.\n *\n * @param {Array} sentences The sentences to filter through.\n * @returns {Number} The amount of sentences that are considered too long.\n */\n countTooLongSentences(sentences) {\n return this.getTooLongSentences(sentences).length;\n }\n}\n\nexport default SentenceLengthInTextAssessment;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SentenceLengthInTextAssessment.js","names":["merge","Assessment","getTooLongSentences","formatNumber","AssessmentResult","MAIN_CONTENT_POINTS","TEXT_SENTENCE_LENGTH_ID","SentenceLengthInTextAssessment","constructor","config","defaultConfig","id","priority","docUrl","ctaType","fixPosition","recommendedLength","slightlyTooMany","farTooMany","title","content","improve","bad","good","_config","identifier","getResult","paper","researcher","sentences","getResearch","hasDescription","getConfig","getLanguageSpecificConfig","percentage","calculatePercentage","result","calculateResult","assessmentResult","setScore","score","setStatus","status","isApplicable","currentConfig","languageSpecificConfig","hasOwnProperty","length","tooLongTotal","countTooLongSentences","parseInt","getScore"],"sources":["../../../../../src/scoring/assessments/readability/SentenceLengthInTextAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport getTooLongSentences from '../../helpers/assessments/checkForTooLongSentences';\nimport formatNumber from '../../../helpers/formatNumber';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {MAIN_CONTENT_POINTS, TEXT_SENTENCE_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that will calculate the length of sentences in the text.\n */\nclass SentenceLengthInTextAssessment extends Assessment {\n /**\n\t * Sets the identifier and the config.\n\t *\n\t * @param {object} config\t\t\tThe scoring configuration that should be used.\n\n\t * @returns {void}\n\t */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_SENTENCE_LENGTH_ID,\n priority: 'high',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#sentence-length',\n ctaType: 'fix',\n fixPosition: 'sentenceLength',\n recommendedLength: 20,\n slightlyTooMany: 25,\n farTooMany: 30,\n title: 'Text Sentence Length',\n content: {\n improve: '',\n bad:\n 'Sentence too long. Keep sentence length less than 20 words to improve readability and flow.',\n good: 'Sentence length is optimized for readability, less than 20 words.'\n }\n };\n\n this._config = merge(defaultConfig, config);\n this.identifier = TEXT_SENTENCE_LENGTH_ID;\n }\n\n /**\n * Scores the percentage of sentences including more than the recommended number of words.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling research.\n *\n * @returns {AssessmentResult} The Assessment result.\n */\n getResult({paper, researcher}) {\n const sentences = researcher.getResearch('countSentencesFromText');\n const hasDescription = paper.hasDescription();\n if (researcher.getConfig('sentenceLength')) {\n this._config = this.getLanguageSpecificConfig(researcher);\n }\n const percentage = this.calculatePercentage(sentences);\n\n const result = this.calculateResult(percentage, hasDescription);\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(result.score);\n assessmentResult.setStatus(result.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has 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 /**\n * Check if there is language-specific config, and if so, overwrite the current config with it.\n *\n * @param {Researcher} researcher The researcher to use.\n *\n * @returns {Object} The config that should be used.\n */\n getLanguageSpecificConfig(researcher) {\n const currentConfig = this._config;\n const languageSpecificConfig = researcher.getConfig('sentenceLength');\n\n if (languageSpecificConfig.hasOwnProperty('recommendedLength')) {\n currentConfig.recommendedLength = languageSpecificConfig.recommendedLength;\n }\n\n return currentConfig;\n }\n\n /**\n * Calculates the percentage of sentences that are too long.\n *\n * @param {Array} sentences The sentences to calculate the percentage for.\n * @returns {number} The calculates percentage of too long sentences.\n */\n calculatePercentage(sentences) {\n let percentage = 0;\n\n if (sentences.length !== 0) {\n const tooLongTotal = this.countTooLongSentences(sentences);\n percentage = formatNumber((tooLongTotal / sentences.length) * 100);\n }\n\n return percentage;\n }\n\n /**\n *\n * @param percentage\n * @param hasDescription\n * @returns {{score: number, status: string}}\n */\n calculateResult(percentage, hasDescription) {\n let status = 'bad';\n if (percentage && hasDescription && percentage <= this._config.recommendedLength) {\n status = 'good';\n }\n return {\n score: parseInt(this.getScore(MAIN_CONTENT_POINTS, status)) || 0,\n status\n };\n }\n\n /**\n * Gets the sentences that are qualified as being too long.\n *\n * @param {array} sentences The sentences to filter through.\n * @returns {array} Array with all the sentences considered to be too long.\n */\n getTooLongSentences(sentences) {\n return getTooLongSentences(sentences, this._config.recommendedLength);\n }\n\n /**\n * Get the total amount of sentences that are qualified as being too long.\n *\n * @param {Array} sentences The sentences to filter through.\n * @returns {Number} The amount of sentences that are considered too long.\n */\n countTooLongSentences(sentences) {\n return this.getTooLongSentences(sentences).length;\n }\n}\n\nexport default SentenceLengthInTextAssessment;\n"],"mappings":"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","ignoreList":[]}
@@ -65,8 +65,8 @@ export default class FAQsAssessment extends Assessment {
65
65
  * @returns {{score: number, status: string, data: {hasSchema: ((function(): *)|boolean), hasProperStructure: boolean, hasMinimumFAQs: boolean}}|{score: number, status: string, data: {hasFAQs: boolean}}}
66
66
  */
67
67
  calculateResult(paper) {
68
- const faqs = paper.getFAQs()?.questions || [];
69
68
  let status = 'bad';
69
+ const faqs = paper.getFAQs()?.questions || [];
70
70
  let score = 0;
71
71
  if (!faqs || faqs.length === 0) {
72
72
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"FAQsAssessment.js","names":["merge","Assessment","AssessmentResult","FAQs_ASSESSMENT_ID","FAQS_POINTS","FAQsAssessment","constructor","config","defaultConfig","id","ctaType","docUrl","priority","fixPosition","title","content","good","improve","bad","details","hasProperStructure","hasMinimumFAQs","identifier","_config","getResult","paper","researcher","calculatedResult","calculateResult","assessmentResult","setScore","score","setStatus","status","setData","data","faqs","getFAQs","questions","length","hasFAQs","isEnableFaqs","checkMinimumFAQs","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/FAQsAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {FAQs_ASSESSMENT_ID, FAQS_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Represents an assessment that checks FAQs content and structure for SGE optimization.\n */\nexport default class FAQsAssessment 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: FAQs_ASSESSMENT_ID,\n ctaType: 'fix',\n docUrl: 'https://blog.google/products/search/generative-ai-search/',\n priority: 'high',\n fixPosition: 'faqs',\n title: 'FAQs Optimization',\n content: {\n good: 'FAQs are well-structured and optimized for Google SGE.',\n improve: '',\n bad: 'FAQs need significant improvement to meet Google SGE standards.',\n details: {\n hasProperStructure: 'Empty questions or answers',\n hasMinimumFAQs: 'Less than 3 FAQs'\n }\n }\n };\n\n this.identifier = FAQs_ASSESSMENT_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n\n const assessmentResult = new AssessmentResult({config: this._config});\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n assessmentResult.setData(calculatedResult.data);\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string, data: {hasSchema: ((function(): *)|boolean), hasProperStructure: boolean, hasMinimumFAQs: boolean}}|{score: number, status: string, data: {hasFAQs: boolean}}}\n */\n calculateResult(paper) {\n const faqs = paper.getFAQs()?.questions || [];\n let status = 'bad';\n let score = 0;\n\n if (!faqs || faqs.length === 0) {\n return {score: 0, status: 'bad', data: {hasFAQs: false}};\n }\n const isEnableFaqs = paper.getFAQs()?.status;\n const hasMinimumFAQs = this.checkMinimumFAQs(faqs);\n status = hasMinimumFAQs && isEnableFaqs ? 'good' : 'bad';\n score = this.getScore(FAQS_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n\n\n /**\n * Checks if there are at least 3 FAQs\n * @param {Array} faqs\n * @returns {boolean}\n */\n checkMinimumFAQs(faqs) {\n return faqs.length >= 3;\n }\n\n /**\n * Checks whether the paper has 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"],"mappings":"AAAA,SAAQA,KAAK,QAAO,QAAQ;AAC5B,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,kBAAkB,EAAEC,WAAW;;AAEvC;AACA;AACA;AACA,eAAe,MAAMC,cAAc,SAASJ,UAAU,CAAC;EACrD;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,kBAAkB;MACtBO,OAAO,EAAE,KAAK;MACdC,MAAM,EAAE,2DAA2D;MACnEC,QAAQ,EAAE,MAAM;MAChBC,WAAW,EAAE,MAAM;MACnBC,KAAK,EAAE,mBAAmB;MAC1BC,OAAO,EAAE;QACPC,IAAI,EAAE,wDAAwD;QAC9DC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE,iEAAiE;QACtEC,OAAO,EAAE;UACPC,kBAAkB,EAAE,4BAA4B;UAChDC,cAAc,EAAE;QAClB;MACF;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGnB,kBAAkB;IACpC,IAAI,CAACoB,OAAO,GAAGvB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEiB,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACH,KAAK,CAAC;IAEpD,MAAMI,gBAAgB,GAAG,IAAI3B,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACgB;IAAO,CAAC,CAAC;IACrEM,gBAAgB,CAACC,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;IACjDF,gBAAgB,CAACG,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACnDJ,gBAAgB,CAACK,OAAO,CAACP,gBAAgB,CAACQ,IAAI,CAAC;IAE/C,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACED,eAAeA,CAACH,KAAK,EAAE;IACrB,MAAMW,IAAI,GAAGX,KAAK,CAACY,OAAO,CAAC,CAAC,EAAEC,SAAS,IAAI,EAAE;IAC7C,IAAIL,MAAM,GAAG,KAAK;IAClB,IAAIF,KAAK,GAAG,CAAC;IAEb,IAAI,CAACK,IAAI,IAAIA,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE;MAC9B,OAAO;QAACR,KAAK,EAAE,CAAC;QAAEE,MAAM,EAAE,KAAK;QAAEE,IAAI,EAAE;UAACK,OAAO,EAAE;QAAK;MAAC,CAAC;IAC1D;IACA,MAAMC,YAAY,GAAGhB,KAAK,CAACY,OAAO,CAAC,CAAC,EAAEJ,MAAM;IAC5C,MAAMZ,cAAc,GAAG,IAAI,CAACqB,gBAAgB,CAACN,IAAI,CAAC;IAClDH,MAAM,GAAGZ,cAAc,IAAIoB,YAAY,GAAG,MAAM,GAAG,KAAK;IACxDV,KAAK,GAAG,IAAI,CAACY,QAAQ,CAACvC,WAAW,EAAE6B,MAAM,CAAC;IAE1C,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAIA;AACF;AACA;AACA;AACA;EACES,gBAAgBA,CAACN,IAAI,EAAE;IACrB,OAAOA,IAAI,CAACG,MAAM,IAAI,CAAC;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,YAAYA,CAACnB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF","ignoreList":[]}
1
+ {"version":3,"file":"FAQsAssessment.js","names":["merge","Assessment","AssessmentResult","FAQs_ASSESSMENT_ID","FAQS_POINTS","FAQsAssessment","constructor","config","defaultConfig","id","ctaType","docUrl","priority","fixPosition","title","content","good","improve","bad","details","hasProperStructure","hasMinimumFAQs","identifier","_config","getResult","paper","researcher","calculatedResult","calculateResult","assessmentResult","setScore","score","setStatus","status","setData","data","faqs","getFAQs","questions","length","hasFAQs","isEnableFaqs","checkMinimumFAQs","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/FAQsAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {FAQs_ASSESSMENT_ID, FAQS_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Represents an assessment that checks FAQs content and structure for SGE optimization.\n */\nexport default class FAQsAssessment 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: FAQs_ASSESSMENT_ID,\n ctaType: 'fix',\n docUrl: 'https://blog.google/products/search/generative-ai-search/',\n priority: 'high',\n fixPosition: 'faqs',\n title: 'FAQs Optimization',\n content: {\n good: 'FAQs are well-structured and optimized for Google SGE.',\n improve: '',\n bad: 'FAQs need significant improvement to meet Google SGE standards.',\n details: {\n hasProperStructure: 'Empty questions or answers',\n hasMinimumFAQs: 'Less than 3 FAQs'\n }\n }\n };\n\n this.identifier = FAQs_ASSESSMENT_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n\n const assessmentResult = new AssessmentResult({config: this._config});\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n assessmentResult.setData(calculatedResult.data);\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string, data: {hasSchema: ((function(): *)|boolean), hasProperStructure: boolean, hasMinimumFAQs: boolean}}|{score: number, status: string, data: {hasFAQs: boolean}}}\n */\n calculateResult(paper) {\n let status = 'bad';\n const faqs = paper.getFAQs()?.questions || [];\n let score = 0;\n\n if (!faqs || faqs.length === 0) {\n return {score: 0, status: 'bad', data: {hasFAQs: false}};\n }\n const isEnableFaqs = paper.getFAQs()?.status;\n const hasMinimumFAQs = this.checkMinimumFAQs(faqs);\n status = hasMinimumFAQs && isEnableFaqs ? 'good' : 'bad';\n score = this.getScore(FAQS_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n\n\n /**\n * Checks if there are at least 3 FAQs\n * @param {Array} faqs\n * @returns {boolean}\n */\n checkMinimumFAQs(faqs) {\n return faqs.length >= 3;\n }\n\n /**\n * Checks whether the paper has 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"],"mappings":"AAAA,SAAQA,KAAK,QAAO,QAAQ;AAC5B,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,kBAAkB,EAAEC,WAAW;;AAEvC;AACA;AACA;AACA,eAAe,MAAMC,cAAc,SAASJ,UAAU,CAAC;EACrD;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,kBAAkB;MACtBO,OAAO,EAAE,KAAK;MACdC,MAAM,EAAE,2DAA2D;MACnEC,QAAQ,EAAE,MAAM;MAChBC,WAAW,EAAE,MAAM;MACnBC,KAAK,EAAE,mBAAmB;MAC1BC,OAAO,EAAE;QACPC,IAAI,EAAE,wDAAwD;QAC9DC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE,iEAAiE;QACtEC,OAAO,EAAE;UACPC,kBAAkB,EAAE,4BAA4B;UAChDC,cAAc,EAAE;QAClB;MACF;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGnB,kBAAkB;IACpC,IAAI,CAACoB,OAAO,GAAGvB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEiB,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACH,KAAK,CAAC;IAEpD,MAAMI,gBAAgB,GAAG,IAAI3B,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACgB;IAAO,CAAC,CAAC;IACrEM,gBAAgB,CAACC,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;IACjDF,gBAAgB,CAACG,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACnDJ,gBAAgB,CAACK,OAAO,CAACP,gBAAgB,CAACQ,IAAI,CAAC;IAE/C,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACED,eAAeA,CAACH,KAAK,EAAE;IACrB,IAAIQ,MAAM,GAAG,KAAK;IAClB,MAAMG,IAAI,GAAGX,KAAK,CAACY,OAAO,CAAC,CAAC,EAAEC,SAAS,IAAI,EAAE;IAC7C,IAAIP,KAAK,GAAG,CAAC;IAEb,IAAI,CAACK,IAAI,IAAIA,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE;MAC9B,OAAO;QAACR,KAAK,EAAE,CAAC;QAAEE,MAAM,EAAE,KAAK;QAAEE,IAAI,EAAE;UAACK,OAAO,EAAE;QAAK;MAAC,CAAC;IAC1D;IACA,MAAMC,YAAY,GAAGhB,KAAK,CAACY,OAAO,CAAC,CAAC,EAAEJ,MAAM;IAC5C,MAAMZ,cAAc,GAAG,IAAI,CAACqB,gBAAgB,CAACN,IAAI,CAAC;IAClDH,MAAM,GAAGZ,cAAc,IAAIoB,YAAY,GAAG,MAAM,GAAG,KAAK;IACxDV,KAAK,GAAG,IAAI,CAACY,QAAQ,CAACvC,WAAW,EAAE6B,MAAM,CAAC;IAE1C,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAIA;AACF;AACA;AACA;AACA;EACES,gBAAgBA,CAACN,IAAI,EAAE;IACrB,OAAOA,IAAI,CAACG,MAAM,IAAI,CAAC;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,YAAYA,CAACnB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF","ignoreList":[]}
@@ -60,12 +60,13 @@ export default class FAQsStructureDataAssessment extends Assessment {
60
60
  * @returns {{score: number, status: string, data: {hasSchema: ((function(): *)|boolean), hasProperStructure: boolean, hasMinimumFAQs: boolean}}|{score: number, status: string, data: {hasFAQs: boolean}}}
61
61
  */
62
62
  calculateResult(paper) {
63
- // Check FAQ structure and content
63
+ let status = 'bad';
64
64
  const hasSchema = paper.hasFAQsSchema();
65
- const status = hasSchema ? 'good' : 'bad';
66
- const score = this.getScore(FAQS_POINTS, status);
65
+ if (hasSchema) {
66
+ status = 'good';
67
+ }
67
68
  return {
68
- score,
69
+ score: this.getScore(FAQS_POINTS, status) || 0,
69
70
  status
70
71
  };
71
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FAQsStructureDataAssessment.js","names":["merge","Assessment","AssessmentResult","FAQS_POINTS","FAQs_STRUCTURE_DATA_ID","FAQsStructureDataAssessment","constructor","config","defaultConfig","id","ctaType","docUrl","priority","fixPosition","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","calculatedResult","calculateResult","assessmentResult","setScore","score","setStatus","status","hasSchema","hasFAQsSchema","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/FAQsStructureDataAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {FAQS_POINTS, FAQs_STRUCTURE_DATA_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents an assessment that checks FAQs content and structure for SGE optimization.\n */\nexport default class FAQsStructureDataAssessment 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: FAQs_STRUCTURE_DATA_ID,\n ctaType: 'contactUs',\n docUrl: 'https://blog.google/products/search/generative-ai-search/',\n priority: 'high',\n fixPosition: 'faqs',\n title: 'FAQs structured data',\n content: {\n good: 'FAQ structured data added',\n improve: '',\n bad: 'Add FAQs structured data for Google rich results eligibility.',\n }\n };\n\n this.identifier = FAQs_STRUCTURE_DATA_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n const assessmentResult = new AssessmentResult({config: this._config});\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string, data: {hasSchema: ((function(): *)|boolean), hasProperStructure: boolean, hasMinimumFAQs: boolean}}|{score: number, status: string, data: {hasFAQs: boolean}}}\n */\n calculateResult(paper) {\n // Check FAQ structure and content\n const hasSchema = paper.hasFAQsSchema();\n const status = hasSchema ? 'good' : 'bad';\n const score = this.getScore(FAQS_POINTS, status);\n return {\n score,\n status\n };\n }\n\n\n\n\n isApplicable(paper) {\n return true;\n }\n}\n"],"mappings":"AAAA,SAAQA,KAAK,QAAO,QAAQ;AAC5B,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,WAAW,EAAEC,sBAAsB;;AAE3C;AACA;AACA;AACA,eAAe,MAAMC,2BAA2B,SAASJ,UAAU,CAAC;EAClE;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEL,sBAAsB;MAC1BM,OAAO,EAAE,WAAW;MACpBC,MAAM,EAAE,2DAA2D;MACnEC,QAAQ,EAAE,MAAM;MAChBC,WAAW,EAAE,MAAM;MACnBC,KAAK,EAAE,sBAAsB;MAC7BC,OAAO,EAAE;QACPC,IAAI,EAAE,2BAA2B;QACjCC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGf,sBAAsB;IACxC,IAAI,CAACgB,OAAO,GAAGpB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEc,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACH,KAAK,CAAC;IACpD,MAAMI,gBAAgB,GAAG,IAAIxB,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IACrEM,gBAAgB,CAACC,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;IACjDF,gBAAgB,CAACG,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACnD,OAAOJ,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACED,eAAeA,CAACH,KAAK,EAAE;IACrB;IACA,MAAMS,SAAS,GAAGT,KAAK,CAACU,aAAa,CAAC,CAAC;IACvC,MAAMF,MAAM,GAAGC,SAAS,GAAG,MAAM,GAAG,KAAK;IAC1C,MAAMH,KAAK,GAAG,IAAI,CAACK,QAAQ,CAAC9B,WAAW,EAAE2B,MAAM,CAAC;IAC/C,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;EAKAI,YAAYA,CAACZ,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF","ignoreList":[]}
1
+ {"version":3,"file":"FAQsStructureDataAssessment.js","names":["merge","Assessment","AssessmentResult","FAQS_POINTS","FAQs_STRUCTURE_DATA_ID","FAQsStructureDataAssessment","constructor","config","defaultConfig","id","ctaType","docUrl","priority","fixPosition","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","calculatedResult","calculateResult","assessmentResult","setScore","score","setStatus","status","hasSchema","hasFAQsSchema","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/FAQsStructureDataAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {FAQS_POINTS, FAQs_STRUCTURE_DATA_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents an assessment that checks FAQs content and structure for SGE optimization.\n */\nexport default class FAQsStructureDataAssessment 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: FAQs_STRUCTURE_DATA_ID,\n ctaType: 'contactUs',\n docUrl: 'https://blog.google/products/search/generative-ai-search/',\n priority: 'high',\n fixPosition: 'faqs',\n title: 'FAQs structured data',\n content: {\n good: 'FAQ structured data added',\n improve: '',\n bad: 'Add FAQs structured data for Google rich results eligibility.',\n }\n };\n\n this.identifier = FAQs_STRUCTURE_DATA_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n const assessmentResult = new AssessmentResult({config: this._config});\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string, data: {hasSchema: ((function(): *)|boolean), hasProperStructure: boolean, hasMinimumFAQs: boolean}}|{score: number, status: string, data: {hasFAQs: boolean}}}\n */\n calculateResult(paper) {\n let status = 'bad'\n const hasSchema = paper.hasFAQsSchema();\n if (hasSchema) {\n status = 'good';\n }\n return {\n score: this.getScore(FAQS_POINTS, status) || 0,\n status\n };\n }\n\n\n\n\n isApplicable(paper) {\n return true;\n }\n}\n"],"mappings":"AAAA,SAAQA,KAAK,QAAO,QAAQ;AAC5B,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,WAAW,EAAEC,sBAAsB;;AAE3C;AACA;AACA;AACA,eAAe,MAAMC,2BAA2B,SAASJ,UAAU,CAAC;EAClE;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEL,sBAAsB;MAC1BM,OAAO,EAAE,WAAW;MACpBC,MAAM,EAAE,2DAA2D;MACnEC,QAAQ,EAAE,MAAM;MAChBC,WAAW,EAAE,MAAM;MACnBC,KAAK,EAAE,sBAAsB;MAC7BC,OAAO,EAAE;QACPC,IAAI,EAAE,2BAA2B;QACjCC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGf,sBAAsB;IACxC,IAAI,CAACgB,OAAO,GAAGpB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEc,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACH,KAAK,CAAC;IACpD,MAAMI,gBAAgB,GAAG,IAAIxB,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IACrEM,gBAAgB,CAACC,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;IACjDF,gBAAgB,CAACG,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACnD,OAAOJ,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACED,eAAeA,CAACH,KAAK,EAAE;IACrB,IAAIQ,MAAM,GAAG,KAAK;IAClB,MAAMC,SAAS,GAAGT,KAAK,CAACU,aAAa,CAAC,CAAC;IACvC,IAAID,SAAS,EAAE;MACbD,MAAM,GAAG,MAAM;IACjB;IACA,OAAO;MACLF,KAAK,EAAE,IAAI,CAACK,QAAQ,CAAC9B,WAAW,EAAE2B,MAAM,CAAC,IAAI,CAAC;MAC9CA;IACF,CAAC;EACH;EAKAI,YAAYA,CAACZ,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF","ignoreList":[]}
@@ -74,12 +74,10 @@ export default class TextImagesAssessment extends Assessment {
74
74
  calculateResult() {
75
75
  // If "countVideos" is on, we include videos in the assessment
76
76
  const mediaCount = this._countVideos ? this.imageCount + this.videoCount : this.imageCount;
77
- let status = '';
77
+ let status = 'good';
78
78
  // No images.
79
79
  if (mediaCount === 0) {
80
80
  status = 'bad';
81
- } else {
82
- status = 'good';
83
81
  }
84
82
  const score = this.getScore(FAQS_POINTS, status);
85
83
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"ImageCountAssessment.js","names":["merge","Assessment","AssessmentResult","FAQS_POINTS","MEDIA_ID","TextImagesAssessment","constructor","config","countVideos","defaultConfig","id","docUrl","priority","fixPosition","title","content","good","improve","bad","identifier","_config","_countVideos","getResult","paper","researcher","imageCount","getResearch","videoCount","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","isApplicable","mediaCount","getScore"],"sources":["../../../../../src/scoring/assessments/seo/ImageCountAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {FAQS_POINTS, MEDIA_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that checks if the text has any images present, including videos in product pages.\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 * @param {boolean} countVideos Whether videos are also included in the assessment or not.\n *\n * @returns {void}\n */\n constructor(config = {}, countVideos = true) {\n super();\n\n const defaultConfig = {\n id: MEDIA_ID,\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#images-and-videos',\n priority: 'high',\n fixPosition: 'description',\n title: 'Media',\n content: {\n good: 'Media are used effectively.',\n improve: '',\n bad: 'No media found. Add visual content to enhance engagement.'\n }\n };\n\n this.identifier = MEDIA_ID;\n this._config = merge(defaultConfig, config);\n this._countVideos = countVideos;\n }\n\n /**\n * Execute the Assessment and return a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n this.imageCount = researcher.getResearch('imageCount');\n this.videoCount = researcher.getResearch('videoCount');\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult();\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has 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 /**\n *\n * @returns {{score: number, status: string}}\n */\n calculateResult() {\n // If \"countVideos\" is on, we include videos in the assessment\n const mediaCount = this._countVideos ? this.imageCount + this.videoCount : this.imageCount;\n\n let status = '';\n // No images.\n if (mediaCount === 0) {\n status = 'bad';\n } else {\n status = 'good';\n }\n\n const score = this.getScore(FAQS_POINTS, status);\n\n return {\n score,\n status\n };\n }\n}\n"],"mappings":"AAAA,SAAQA,KAAK,QAAO,QAAQ;AAC5B,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,WAAW,EAAEC,QAAQ;;AAE7B;AACA;AACA;AACA,eAAe,MAAMC,oBAAoB,SAASJ,UAAU,CAAC;EAC3D;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAEC,WAAW,GAAG,IAAI,EAAE;IAC3C,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEN,QAAQ;MACZO,MAAM,EACJ,+FAA+F;MACjGC,QAAQ,EAAE,MAAM;MAChBC,WAAW,EAAE,aAAa;MAC1BC,KAAK,EAAE,OAAO;MACdC,OAAO,EAAE;QACPC,IAAI,EAAE,6BAA6B;QACnCC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGf,QAAQ;IAC1B,IAAI,CAACgB,OAAO,GAAGpB,KAAK,CAACS,aAAa,EAAEF,MAAM,CAAC;IAC3C,IAAI,CAACc,YAAY,GAAGb,WAAW;EACjC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEc,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,UAAU,GAAGD,UAAU,CAACE,WAAW,CAAC,YAAY,CAAC;IACtD,IAAI,CAACC,UAAU,GAAGH,UAAU,CAACE,WAAW,CAAC,YAAY,CAAC;IAEtD,MAAME,gBAAgB,GAAG,IAAI1B,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IAErE,MAAMS,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAAC,CAAC;IAE/CF,gBAAgB,CAACG,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;IACjDJ,gBAAgB,CAACK,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IAEnD,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,YAAYA,CAACZ,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACEO,eAAeA,CAAA,EAAG;IAChB;IACA,MAAMM,UAAU,GAAG,IAAI,CAACf,YAAY,GAAG,IAAI,CAACI,UAAU,GAAG,IAAI,CAACE,UAAU,GAAG,IAAI,CAACF,UAAU;IAE1F,IAAIS,MAAM,GAAG,EAAE;IACf;IACA,IAAIE,UAAU,KAAK,CAAC,EAAE;MACpBF,MAAM,GAAG,KAAK;IAChB,CAAC,MAAM;MACLA,MAAM,GAAG,MAAM;IACjB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACK,QAAQ,CAAClC,WAAW,EAAE+B,MAAM,CAAC;IAEhD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;AACF","ignoreList":[]}
1
+ {"version":3,"file":"ImageCountAssessment.js","names":["merge","Assessment","AssessmentResult","FAQS_POINTS","MEDIA_ID","TextImagesAssessment","constructor","config","countVideos","defaultConfig","id","docUrl","priority","fixPosition","title","content","good","improve","bad","identifier","_config","_countVideos","getResult","paper","researcher","imageCount","getResearch","videoCount","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","isApplicable","mediaCount","getScore"],"sources":["../../../../../src/scoring/assessments/seo/ImageCountAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {FAQS_POINTS, MEDIA_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that checks if the text has any images present, including videos in product pages.\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 * @param {boolean} countVideos Whether videos are also included in the assessment or not.\n *\n * @returns {void}\n */\n constructor(config = {}, countVideos = true) {\n super();\n\n const defaultConfig = {\n id: MEDIA_ID,\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#images-and-videos',\n priority: 'high',\n fixPosition: 'description',\n title: 'Media',\n content: {\n good: 'Media are used effectively.',\n improve: '',\n bad: 'No media found. Add visual content to enhance engagement.'\n }\n };\n\n this.identifier = MEDIA_ID;\n this._config = merge(defaultConfig, config);\n this._countVideos = countVideos;\n }\n\n /**\n * Execute the Assessment and return a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n this.imageCount = researcher.getResearch('imageCount');\n this.videoCount = researcher.getResearch('videoCount');\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult();\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has 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 /**\n *\n * @returns {{score: number, status: string}}\n */\n calculateResult() {\n // If \"countVideos\" is on, we include videos in the assessment\n const mediaCount = this._countVideos ? this.imageCount + this.videoCount : this.imageCount;\n\n let status = 'good';\n // No images.\n if (mediaCount === 0) {\n status = 'bad';\n }\n\n const score = this.getScore(FAQS_POINTS, status);\n\n return {\n score,\n status\n };\n }\n}\n"],"mappings":"AAAA,SAAQA,KAAK,QAAO,QAAQ;AAC5B,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,WAAW,EAAEC,QAAQ;;AAE7B;AACA;AACA;AACA,eAAe,MAAMC,oBAAoB,SAASJ,UAAU,CAAC;EAC3D;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAEC,WAAW,GAAG,IAAI,EAAE;IAC3C,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEN,QAAQ;MACZO,MAAM,EACJ,+FAA+F;MACjGC,QAAQ,EAAE,MAAM;MAChBC,WAAW,EAAE,aAAa;MAC1BC,KAAK,EAAE,OAAO;MACdC,OAAO,EAAE;QACPC,IAAI,EAAE,6BAA6B;QACnCC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGf,QAAQ;IAC1B,IAAI,CAACgB,OAAO,GAAGpB,KAAK,CAACS,aAAa,EAAEF,MAAM,CAAC;IAC3C,IAAI,CAACc,YAAY,GAAGb,WAAW;EACjC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEc,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,UAAU,GAAGD,UAAU,CAACE,WAAW,CAAC,YAAY,CAAC;IACtD,IAAI,CAACC,UAAU,GAAGH,UAAU,CAACE,WAAW,CAAC,YAAY,CAAC;IAEtD,MAAME,gBAAgB,GAAG,IAAI1B,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IAErE,MAAMS,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAAC,CAAC;IAE/CF,gBAAgB,CAACG,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;IACjDJ,gBAAgB,CAACK,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IAEnD,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,YAAYA,CAACZ,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACEO,eAAeA,CAAA,EAAG;IAChB;IACA,MAAMM,UAAU,GAAG,IAAI,CAACf,YAAY,GAAG,IAAI,CAACI,UAAU,GAAG,IAAI,CAACE,UAAU,GAAG,IAAI,CAACF,UAAU;IAE1F,IAAIS,MAAM,GAAG,MAAM;IACnB;IACA,IAAIE,UAAU,KAAK,CAAC,EAAE;MACpBF,MAAM,GAAG,KAAK;IAChB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACK,QAAQ,CAAClC,WAAW,EAAE+B,MAAM,CAAC;IAEhD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;AACF","ignoreList":[]}
@@ -75,7 +75,7 @@ class InvalidCharactersInUrl extends Assessment {
75
75
  * @returns {{score: number, status: (string)}}
76
76
  */
77
77
  calculateResult() {
78
- const status = this._charactersInUrl.isInvalidCharacters ? 'bad' : 'good';
78
+ const status = this?._charactersInUrl?.isInvalidCharacters ? 'bad' : 'good';
79
79
  const score = this.getScore(URLS_POINTS, status);
80
80
  return {
81
81
  score,