332 lines
721 KiB
JavaScript
332 lines
721 KiB
JavaScript
|
window.yoast=window.yoast||{},window.yoast.analysis=function(e){var t={};function r(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,r),s.l=!0,s.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)r.d(n,s,function(t){return e[t]}.bind(null,s));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=396)}([,,function(e,t){e.exports=window.lodash},,function(e,t){e.exports=window.wp.i18n},,,,,,,,,,,,,,function(e,t,r){(function(e){var n=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),r={},n=0;n<t.length;n++)r[t[n]]=Object.getOwnPropertyDescriptor(e,t[n]);return r},s=/%[sdj%]/g;t.format=function(e){if(!_(e)){for(var t=[],r=0;r<arguments.length;r++)t.push(o(arguments[r]));return t.join(" ")}r=1;for(var n=arguments,i=n.length,a=String(e).replace(s,(function(e){if("%%"===e)return"%";if(r>=i)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}})),l=n[r];r<i;l=n[++r])f(l)||!v(l)?a+=" "+l:a+=" "+o(l);return a},t.deprecate=function(r,n){if(void 0!==e&&!0===e.noDeprecation)return r;if(void 0===e)return function(){return t.deprecate(r,n).apply(this,arguments)};var s=!1;return function(){if(!s){if(e.throwDeprecation)throw new Error(n);e.traceDeprecation?console.trace(n):console.error(n),s=!0}return r.apply(this,arguments)}};var i,a={};function o(e,r){var n={seen:[],stylize:c};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),g(r)?n.showHidden=r:r&&t._extend(n,r),T(n.showHidden)&&(n.showHidden=!1),T(n.depth)&&(n.depth=2),T(n.colors)&&(n.colors=!1),T(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,e,n.depth)}function l(e,t){var r=o.styles[t];return r?"["+o.colors[r][0]+"m"+e+"["+o.colors[r][1]+"m":e}function c(e,t){return e}function u(e,r,n){if(e.customInspect&&r&&A(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var s=r.inspect(n,e);return _(s)||(s=u(e,s,n)),s}var i=function(e,t){if(T(t))return e.stylize("undefined","undefined");if(_(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return m(t)?e.stylize(""+t,"number"):g(t)?e.stylize(""+t,"boolean"):f(t)?e.stylize("null","null"):void 0}(e,r);if(i)return i;var a=Object.keys(r),o=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(r)),y(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return h(r);if(0===a.length){if(A(r)){var l=r.name?": "+r.name:"";return e.stylize("[Function"+l+"]","special")}if(E(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(b(r))return e.stylize(Date.prototype.toString.call(r),"date");if(y(r))return h(r)}var c,v="",O=!1,C=["{","}"];return p(r)&&(O=!0,C=["[","]"]),A(r)&&(v=" [Function"+(r.name?": "+r.name:"")+"]"),E(r)&&(v=" "+RegExp.prototype.toString.call(r)),b(r)&&(v=" "+Date.prototype.toUTCString.call(r)),y(r)&&(v=" "+h(r)),0!==a.length||O&&0!=r.length?n<0?E(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),c=O?function(e,t,r,n,s){for(var i=[],a=0,o=t.length;a<o;++a)k(t,String(a))?i.push(d(e,t,r,n,String(a),!0)):i.push("");return s.forEach((function(s){s.match(/^\d+$/)||i.push(d(e,t,r,n,s,!0))})),i}(e,r,n,o,a):a.map((function(t){return d(e,r,n,o,t,O)}))
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sKeyphrase in introduction%2$s: Well done!","wordpress-seo"),this._config.urlTitle,"</a>")}:this._firstParagraphMatches.foundInParagraph?{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sKeyphrase in introduction%3$s: Your keyphrase or its synonyms appear in the first paragraph of the copy, but not within one sentence. %2$sFix that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sKeyphrase in introduction%3$s: Your keyphrase or its synonyms do not appear in the first paragraph. %2$sMake sure the topic is clear immediately%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}}};function ki(e,t,r){return e>t&&e<=r}function Ni(e,t,r){return e>=t&&e<r}function Ri(e,t,r){return e>=t&&e<=r}var Ii=class extends yi{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super(),this.defaultConfig={parameters:{recommendedMinimum:1,recommendedMaximum:4,acceptableMaximum:8},parametersNoFunctionWordSupport:{recommendedMaximum:6,acceptableMaximum:9},scores:{veryBad:-999,bad:3,okay:6,good:9},countTextIn:{singular:Object(_.__)("word","wordpress-seo"),plural:Object(_.__)("words","wordpress-seo")},urlTitle:Object(Ai.b)("https://yoa.st/33i"),urlCallToAction:Object(Ai.b)("https://yoa.st/33j"),isRelatedKeyphrase:!1},this.identifier="keyphraseLength",this._config=Object(T.merge)(this.defaultConfig,e),this._isProductPage=t}getResult(e,t){this._keyphraseLengthData=t.getResearch("keyphraseLength");const r=new wi;t.getConfig("countCharacters")&&(this._config.countTextIn.singular=Object(_.__)("character","wordpress-seo"),this._config.countTextIn.plural=Object(_.__)("characters","wordpress-seo"));const n=e.getKeyword();this._keyphraseLengthData.functionWords.length>0&&!xr(n).exactMatchRequested&&(this._config.countTextIn.singular=Object(_.__)("content word","wordpress-seo"),this._config.countTextIn.plural=Object(_.__)("content words","wordpress-seo")),t.getConfig("keyphraseLength")?this._config=this.getCustomConfig(t):0===this._keyphraseLengthData.functionWords.length&&(this._config.parameters=Object(T.merge)({},this._config.parameters,this._config.parametersNoFunctionWordSupport)),this._boundaries=this._config.parameters;const s=this.calculateResult();return r.setScore(s.score),r.setText(s.resultText),r.getScore()<9&&(r.setHasJumps(!0),r.setEditFieldName(Object(_.__)("keyphrase","wordpress-seo"))),r}getCustomConfig(e){const t=e.getConfig("keyphraseLength");return this._isProductPage&&t.hasOwnProperty("productPages")?Object(T.merge)(this._config,t.productPages):Object(T.merge)(this._config,t.defaultAnalysis)}calculateResult(){if(this._isProductPage){if(0===this._keyphraseLengthData.keyphraseLength)return this._config.isRelatedKeyphrase?{score:this._config.scores.veryBad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sKeyphrase length%3$s: %2$sSet a keyphrase in order to calculate your SEO score%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:{score:this._config.scores.veryBad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sKeyphrase length%3$s: No focus keyphrase was set for this page. %2$sSet a keyphrase in order to calculate your SEO score%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")};if(this._keyphraseLengthData.keyphraseLength<=this._boundaries.acceptableMinimum)return{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$d expands to the number of words / characters in the keyphrase,
|
|||
|
%2$d expands to the recommended maximum of words / characters in the keyphrase,
|
|||
|
%3$s and %4$s expand to links on yoast.com, %5$s expands to the anchor end tag,
|
|||
|
%6$s expands to the word 'word' or 'character' or 'content word',
|
|||
|
%7$s expands to the word 'words' or 'characters' or 'content words'. */
|
|||
|
Object(_._n)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's way less than the recommended minimum of %2$d %7$s. %4$sMake it longer%5$s!","%3$sKeyphrase length%5$s: The keyphrase contains %1$d %7$s. That's way less than the recommended minimum of %2$d %7$s. %4$sMake it longer%5$s!",this._keyphraseLengthData.keyphraseLength,"wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMinimum,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.countTextIn.singular,this._config.countTextIn.plural)};if(this._keyphraseLengthData.keyphraseLength>this._boundaries.acceptableMaximum)return{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$d expands to the number of words / characters in the keyphrase,
|
|||
|
%2$d expands to the recommended maximum of words / characters in the keyphrase,
|
|||
|
%3$s and %4$s expand to links on yoast.com,
|
|||
|
%5$s expands to the anchor end tag,
|
|||
|
%6$s expands to the word 'words' or 'characters' or 'content words'. */
|
|||
|
Object(_.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's way more than the recommended maximum of %2$d %6$s. %4$sMake it shorter%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.countTextIn.plural)};if(Object(T.inRange)(this._keyphraseLengthData.keyphraseLength,this._boundaries.acceptableMinimum,this._boundaries.recommendedMinimum))return{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$d expands to the number of words / characters in the keyphrase,
|
|||
|
%2$d expands to the recommended maximum of words / characters in the keyphrase,
|
|||
|
%3$s and %4$s expand to links on yoast.com,
|
|||
|
%5$s expands to the anchor end tag,
|
|||
|
%6$s expands to the word 'words' or 'characters' or 'content words'. */
|
|||
|
Object(_.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's less than the recommended minimum of %2$d %6$s. %4$sMake it longer%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMinimum,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.countTextIn.plural)};if(ki(this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._boundaries.acceptableMaximum))return{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$d expands to the number of words / characters in the keyphrase,
|
|||
|
%2$d expands to the recommended maximum of words / characters in the keyphrase,
|
|||
|
%3$s and %4$s expand to links on yoast.com,
|
|||
|
%5$s expands to the anchor end tag,
|
|||
|
%6$s expands to the word 'words' or 'characters' or 'content words'. */
|
|||
|
Object(_.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's more than the recommended maximum of %2$d %6$s. %4$sMake it shorter%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.countTextIn.plural)};if(Ri(this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMinimum,this._boundaries.recommendedMaximum))return{score:this._config.scores.good,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sKeyphrase length%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"</a>")}}return this._keyphraseLengthData.keyphraseLength<this._boundaries.recommendedMinimum?this._config.isRelatedKeyphrase?{score:this._config.scores.veryBad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sKeyphrase length%3$s: %2$sSet a keyphrase in order to calculate your SEO score%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:{score:this._config.scores.veryBad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sKeyphrase length%3$s: No focus keyphrase was set for this page. %2$sSet a keyphrase in order to calculate your SEO score%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:Object(T.inRange)(this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMinimum,this._boundaries.recommendedMaximum+1)?{score:this._config.scores.good,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sKeyphrase length%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"</a>")}:Object(T.inRange)(this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum+1,this._boundaries.acceptableMaximum+1)?{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$d expands to the number of words / characters in the keyphrase,
|
|||
|
%2$d expands to the recommended maximum of words / characters in the keyphrase,
|
|||
|
%3$s and %4$s expand to links on yoast.com,
|
|||
|
%5$s expands to the anchor end tag,
|
|||
|
%6$s expands to the word 'words' or 'characters' or 'content words'. */
|
|||
|
Object(_.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's more than the recommended maximum of %2$d %6$s. %4$sMake it shorter%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.countTextIn.plural)}:{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$d expands to the number of words / characters in the keyphrase,
|
|||
|
%2$d expands to the recommended maximum of words / characters in the keyphrase,
|
|||
|
%3$s and %4$s expand to links on yoast.com,
|
|||
|
%5$s expands to the anchor end tag,
|
|||
|
%6$s expands to the word 'words' or 'characters' or 'content words'. */
|
|||
|
Object(_.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's way more than the recommended maximum of %2$d %6$s. %4$sMake it shorter%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.countTextIn.plural)}}},xi=function(e){return.7+e/3},Di=function(e,t,r,n,s){const i=s?s(e).length:br(e);if(0===i)return 0;const a=r*i/(100*xi(t));if(a<2)return 2;switch(n){case"min":return Math.ceil(a);default:case"max":return Math.floor(a)}},Li=class extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={parameters:{noWordForms:{overMaximum:4,maximum:3,minimum:.5},multipleWordForms:{overMaximum:4,maximum:3.5,minimum:.5}},scores:{wayOverMaximum:-50,overMaximum:-10,correctDensity:9,underMinimum:4},urlTitle:Object(Ai.b)("https://yoa.st/33v"),urlCallToAction:Object(Ai.b)("https://yoa.st/33w"),applicableIfTextLongerThan:100};this.identifier="keywordDensity",this._config=Object(T.merge)(t,e)}setBoundaries(e,t,r){this._hasMorphologicalForms?this._boundaries=this._config.parameters.multipleWordForms:this._boundaries=this._config.parameters.noWordForms,this._minRecommendedKeywordCount=Di(e,t,this._boundaries.minimum,"min",r),this._maxRecommendedKeywordCount=Di(e,t,this._boundaries.maximum,"max",r)}getResult(e,t){const r=t.getHelper("getWordsCustomHelper");this._keywordCount=t.getResearch("keywordCount");const n=this._keywordCount.length,s=new wi;this._keywordDensity=t.getResearch("getKeywordDensity"),this._hasMorphologicalForms=!1!==t.getData("morphology");let i=e.getText();i=kr(i),this.setBoundaries(i,n,r),this._keywordDensity=this._keywordDensity*xi(n);const a=this.calculateResult();return s.setScore(a.score),s.setText(a.resultText),s.setHasMarks(this._keywordCount.count>0),s}hasNoMatches(){return 0===this._keywordCount.count}hasTooFewMatches(){return Ni(this._keywordDensity,0,this._boundaries.minimum)||1===this._keywordCount.count}hasGoodNumberOfMatches(){return Ri(this._keywordDensity,this._boundaries.minimum,this._boundaries.maximum)||2===this._keywordCount.count&&this._minRecommendedKeywordCount<=2}hasTooManyMatches(){return ki(this._keywordDensity,this._boundaries.maximum,this._boundaries.overMaximum)}calculateResult(){return this.hasNoMatches()?{score:this._config.scores.underMinimum,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$s and %4$s expand to links to Yoast.com,
|
|||
|
%2$s expands to the anchor end tag,
|
|||
|
%3$d expands to the recommended minimal number of times the keyphrase should occur in the text. */
|
|||
|
Object(_.__)("%1$sKeyphrase density%2$s: The keyphrase was found 0 times. That's less than the recommended minimum of %3$d times for a text of this length. %4$sFocus on your keyphrase%2$s!","wordpress-seo"),this._config.urlTitle,"</a>",this._minRecommendedKeywordCount,this._config.urlCallToAction)}:this.hasTooFewMatches()?{score:this._config.scores.underMinimum,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$s and %4$s expand to links to Yoast.com,
|
|||
|
%2$s expands to the anchor end tag,
|
|||
|
%3$d expands to the recommended minimal number of times the keyphrase should occur in the text,
|
|||
|
%5$d expands to the number of times the keyphrase occurred in the text. */
|
|||
|
Object(_._n)("%1$sKeyphrase density%2$s: The keyphrase was found %5$d time. That's less than the recommended minimum of %3$d times for a text of this length. %4$sFocus on your keyphrase%2$s!","%1$sKeyphrase density%2$s: The keyphrase was found %5$d times. That's less than the recommended minimum of %3$d times for a text of this length. %4$sFocus on your keyphrase%2$s!",this._keywordCount.count,"wordpress-seo"),this._config.urlTitle,"</a>",this._minRecommendedKeywordCount,this._config.urlCallToAction,this._keywordCount.count)}:this.hasGoodNumberOfMatches()?{score:this._config.scores.correctDensity,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$s expands to a link to Yoast.com,
|
|||
|
%2$s expands to the anchor end tag,
|
|||
|
%3$d expands to the number of times the keyphrase occurred in the text. */
|
|||
|
Object(_._n)("%1$sKeyphrase density%2$s: The keyphrase was found %3$d time. This is great!","%1$sKeyphrase density%2$s: The keyphrase was found %3$d times. This is great!",this._keywordCount.count,"wordpress-seo"),this._config.urlTitle,"</a>",this._keywordCount.count)}:this.hasTooManyMatches()?{score:this._config.scores.overMaximum,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$s and %4$s expand to links to Yoast.com,
|
|||
|
%2$s expands to the anchor end tag,
|
|||
|
%3$d expands to the recommended maximal number of times the keyphrase should occur in the text,
|
|||
|
%5$d expands to the number of times the keyphrase occurred in the text. */
|
|||
|
Object(_._n)("%1$sKeyphrase density%2$s: The keyphrase was found %5$d time. That's more than the recommended maximum of %3$d times for a text of this length. %4$sDon't overoptimize%2$s!","%1$sKeyphrase density%2$s: The keyphrase was found %5$d times. That's more than the recommended maximum of %3$d times for a text of this length. %4$sDon't overoptimize%2$s!",this._keywordCount.count,"wordpress-seo"),this._config.urlTitle,"</a>",this._maxRecommendedKeywordCount,this._config.urlCallToAction,this._keywordCount.count)}:{score:this._config.scores.wayOverMaximum,resultText:Object(_.sprintf)(
|
|||
|
/* Translators:
|
|||
|
%1$s and %4$s expand to links to Yoast.com,
|
|||
|
%2$s expands to the anchor end tag,
|
|||
|
%3$d expands to the recommended maximal number of times the keyphrase should occur in the text,
|
|||
|
%5$d expands to the number of times the keyphrase occurred in the text. */
|
|||
|
Object(_._n)("%1$sKeyphrase density%2$s: The keyphrase was found %5$d time. That's way more than the recommended maximum of %3$d times for a text of this length. %4$sDon't overoptimize%2$s!","%1$sKeyphrase density%2$s: The keyphrase was found %5$d times. That's way more than the recommended maximum of %3$d times for a text of this length. %4$sDon't overoptimize%2$s!",this._keywordCount.count,"wordpress-seo"),this._config.urlTitle,"</a>",this._maxRecommendedKeywordCount,this._config.urlCallToAction,this._keywordCount.count)}}getMarks(){return this._keywordCount.markings}isApplicable(e,t){const r=t.getHelper("customCountLength"),n=t.getConfig("assessmentApplicability").keyphraseDensity;n&&(this._config.applicableIfTextLongerThan=n);let s=e.getText();s=kr(s);const i=r?r(s):It(s).length;return e.hasText()&&e.hasKeyword()&&i>=this._config.applicableIfTextLongerThan}},Mi=class extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={parameters:{recommendedMinimum:1},scores:{good:9,ok:6,bad:3},urlTitle:Object(Ai.b)("https://yoa.st/33k"),urlCallToAction:Object(Ai.b)("https://yoa.st/33l")};this.identifier="metaDescriptionKeyword",this._config=Object(T.merge)(t,e)}getResult(e,t){this._keyphraseCounts=t.getResearch("metaDescriptionKeyword");const r=new wi,n=this.calculateResult();return r.setScore(n.score),r.setText(n.resultText),r.getScore()<9&&(r.setHasJumps(!0),r.setEditFieldName(Object(_.__)("meta description","wordpress-seo"))),r}calculateResult(){return 1===this._keyphraseCounts||2===this._keyphraseCounts?{score:this._config.scores.good,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sKeyphrase in meta description%2$s: Keyphrase or synonym appear in the meta description. Well done!","wordpress-seo"),this._config.urlTitle,"</a>")}:this._keyphraseCounts>=3?{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/**
|
|||
|
* Translators:
|
|||
|
* %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag,
|
|||
|
* %3$s expands to the number of sentences containing the keyphrase,
|
|||
|
* %4$s expands to a link on yoast.com, %5$s expands to the anchor end tag.
|
|||
|
*/
|
|||
|
Object(_.__)("%1$sKeyphrase in meta description%2$s: The meta description contains the keyphrase %3$s times, which is over the advised maximum of 2 times. %4$sLimit that%5$s!","wordpress-seo"),this._config.urlTitle,"</a>",this._keyphraseCounts,this._config.urlCallToAction,"</a>")}:{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/**
|
|||
|
* Translators:
|
|||
|
* %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag.
|
|||
|
* %3$s expands to a link on yoast.com, %4$s expands to the anchor end tag.
|
|||
|
*/
|
|||
|
Object(_.__)("%1$sKeyphrase in meta description%2$s: The meta description has been specified, but it does not contain the keyphrase. %3$sFix that%4$s!","wordpress-seo"),this._config.urlTitle,"</a>",this._config.urlCallToAction,"</a>")}}isApplicable(e){return e.hasKeyword()&&e.hasDescription()}};const Pi=function(e){let t=document.getElementById("yoast-measurement-element");return t||(t=function(){const e=document.createElement("div");return e.id="yoast-measurement-element",e.style.position="absolute",e.style.left="-9999em",e.style.top=0,e.style.height=0,e.style.overflow="hidden",e.style.fontFamily="arial, sans-serif",e.style.fontSize="20px",e.style.fontWeight="400",document.body.appendChild(e),e}()),t.innerText=e,t.offsetWidth};function Fi(){return["en","de","es","fr","it","nl","ru","id","pt","pl","ar","sv","he","hu","nb","tr","cs","sk","el","ja"]}var ji=function(e){return Math.round(e)===e?Math.round(e):Math.round(10*e)/10};function Bi(){return["en","es","de","fr"]}var Ui=class extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={parameters:{recommendedMaximum:0},scores:{bad:2},urlTitle:Object(Ai.b)("https://yoa.st/34l"),urlCallToAction:Object(Ai.b)("https://yoa.st/34m")};this.identifier="textCompetingLinks",this._config=Object(T.merge)(t,e)}getResult(e,t){const r=new wi;this.totalAnchorsWithKeyphrase=t.getResearch("getAnchorsWithKeyphrase").anchorsWithKeyphraseCount;const n=this.calculateResult();return Object(T.isUndefined)(n)||(r.setScore(n.score),r.setText(n.resultText),r.setHasMarks(!1)),r}isApplicable(e){return e.hasText()&&e.hasKeyword()}calculateResult(){if(this.totalAnchorsWithKeyphrase>this._config.parameters.recommendedMaximum)return{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sLink keyphrase%3$s: You're linking to another page with the words you want this page to rank for. %2$sDon't do that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}}},Hi=class extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={parameters:{recommendedMinimum:1},scores:{allInternalFollow:9,someInternalFollow:8,noneInternalFollow:7,noInternal:3},urlTitle:Object(Ai.b)("https://yoa.st/33z"),urlCallToAction:Object(Ai.b)("https://yoa.st/34a")};this.identifier="internalLinks",this._config=Object(T.merge)(t,e)}getResult(e,t){this.linkStatistics=t.getResearch("getLinkStatistics");const r=new wi,n=this.calculateResult();return r.setScore(n.score),r.setText(n.resultText),r}isApplicable(e){return e.hasText()}calculateResult(){return 0===this.linkStatistics.internalTotal?{score:this._config.scores.noInternal,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sInternal links%3$s: No internal links appear in this page, %2$smake sure to add some%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:this.linkStatistics.internalNofollow===this.linkStatistics.internalTotal?{score:this._config.scores.noneInternalFollow,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sInternal links%3$s: The internal links in this page are all nofollowed. %2$sAdd some good internal links%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:this.linkStatistics.internalDofollow===this.linkStatistics.internalTotal?{score:this._config.scores.allInternalFollow,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sInternal links%2$s: You have enough internal links. Good job!","wordpress-seo"),this._config.urlTitle,"</a>")}:{score:this._config.scores.someInternalFollow,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sInternal links%2$s: There are both nofollowed and normal internal links on this page. Good job!","wordpress-seo"),this._config.urlTitle,"</a>")}}},$i=class extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={parameters:{recommendedPosition:0},scores:{good:9,okay:6,bad:2},urlTitle:Object(Ai.b)("https://yoa.st/33g"),urlCallToAction:Object(Ai.b)("https://yoa.st/33h"),feedbackStrings:{bad:Object(_.__)("For the best SEO results write the exact match of your keyphrase in the SEO title, and put the keyphrase at the beginning of the title","wordpress-seo")}};this.identifier="keyphraseInSEOTitle",
|
|||
|
/* Translators: This is the name of the 'Keyphrase in SEO title' SEO assessment.
|
|||
|
It appears before the feedback in the analysis, for example in the feedback string:
|
|||
|
"Keyphrase in SEO title: The focus keyphrase appears at the beginning of the SEO title. Good job!" */
|
|||
|
this.name=Object(_.__)("Keyphrase in SEO title","wordpress-seo"),this._config=Object(T.merge)(t,e)}getResult(e,t){const r=A(e.getLocale());this._keyphraseMatches=t.getResearch("findKeyphraseInSEOTitle"),this._keyphrase=Object(T.escape)(e.getKeyword());const n=new wi,s=this.calculateResult(this._keyphrase,r);return n.setScore(s.score),n.setText(s.resultText),n.getScore()<9&&(n.setHasJumps(!0),n.setEditFieldName(Object(_.__)("SEO title","wordpress-seo"))),n}isApplicable(e){return e.hasKeyword()&&e.hasTitle()}calculateResult(e,t){const r=this._config.feedbackStrings;"ja"===t&&(r.bad=Object(_.__)("For the best SEO results include all words of your keyphrase in the SEO title, and put the keyphrase at the beginning of the title","wordpress-seo"));const n=this._keyphraseMatches.exactMatchFound,s=this._keyphraseMatches.position,i=this._keyphraseMatches.allWordsFound,a=this._keyphraseMatches.exactMatchKeyphrase,o=this._config.urlTitle+this.name+"</a>";return!0===n?0===s?{score:this._config.scores.good,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language)
|
|||
|
and links to an article on yoast.com. */
|
|||
|
Object(_.__)("%1$s: The exact match of the focus keyphrase appears at the beginning of the SEO title. Good job!","wordpress-seo"),o)}:{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language)
|
|||
|
and links to an article on yoast.com. %2$s expand to a link on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$s: The exact match of the focus keyphrase appears in the SEO title, but not at the beginning. %2$sMove it to the beginning for the best results%3$s.","wordpress-seo"),o,this._config.urlCallToAction,"</a>")}:i?"ja"===t?0===s?{score:this._config.scores.good,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language)
|
|||
|
and links to an article on yoast.com. */
|
|||
|
Object(_.__)("%1$s: The focus keyphrase appears at the beginning of the SEO title. Good job!","wordpress-seo"),o,"</a>")}:{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language)
|
|||
|
and links to an article on yoast.com. %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$s: Title does not begin with the focus keyphrase. %2$sMove your focus keyphrase to the beginning of the title%3$s.","wordpress-seo"),o,this._config.urlCallToAction,"</a>")}:{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language)
|
|||
|
and links to an article on yoast.com. %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$s: Does not contain the exact match. %2$sTry to write the exact match of your keyphrase in the SEO title and put it at the beginning of the title%3$s.","wordpress-seo"),o,this._config.urlCallToAction,"</a>")}:a?{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language)
|
|||
|
and links to an article on yoast.com. %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$s: Does not contain the exact match. %2$sTry to write the exact match of your keyphrase in the SEO title and put it at the beginning of the title%3$s.","wordpress-seo"),o,this._config.urlCallToAction,"</a>",e)}:{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language)
|
|||
|
and links to an article on yoast.com. %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag,
|
|||
|
%4$s expands to the keyphrase of the article, %5$s expands to the call to action text. */
|
|||
|
Object(_.__)('%1$s: Not all the words from your keyphrase "%4$s" appear in the SEO title. %2$s%5$s%3$s.',"wordpress-seo"),o,this._config.urlCallToAction,"</a>",e,r.bad)}}};class Ki extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={scores:{okay:6,good:9},urlTitle:Object(Ai.b)("https://yoa.st/33o"),urlCallToAction:Object(Ai.b)("https://yoa.st/33p")};this.identifier="slugKeyword",this._config=Object(T.merge)(t,e)}getResult(e,t){this._keywordInSlug=t.getResearch("keywordCountInSlug");const r=new wi,n=this.calculateResult();return r.setScore(n.score),r.setText(n.resultText),r.getScore()<9&&(r.setHasJumps(!0),r.setEditFieldName(Object(_.__)("slug","wordpress-seo"))),r}isApplicable(e,t){return e.hasKeyword()&&e.hasSlug()&&t.hasResearch("keywordCountInSlug")}calculateResult(){return this._keywordInSlug.keyphraseLength<3?100===this._keywordInSlug.percentWordMatches?{score:this._config.scores.good,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sKeyphrase in slug%2$s: Great work!","wordpress-seo"),this._config.urlTitle,"</a>")}:{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sKeyphrase in slug%3$s: (Part of) your keyphrase does not appear in the slug. %2$sChange that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:this._keywordInSlug.percentWordMatches>50?{score:this._config.scores.good,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sKeyphrase in slug%2$s: More than half of your keyphrase appears in the slug. That's great!","wordpress-seo"),this._config.urlTitle,"</a>")}:{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sKeyphrase in slug%3$s: (Part of) your keyphrase does not appear in the slug. %2$sChange that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}}}var qi=Ki,Gi=function(e){return Object(T.uniqBy)(e,(function(e){return e.getOriginal()}))};const zi=/^\s+$/,Wi=/([\s\t\u00A0])/;var Yi=class{constructor(e){this.researcher=e}splitIntoSentences(e){const t=this.researcher.getHelper("memoizedTokenizer")(e,!1);return zi.test(t[t.length-1])&&t.pop(),t.map((function(e){return new class{constructor(e){this.text=e,this.tokens=[],this.sourceCodeRange={}}}(e)}))}splitIntoTokens(e){const t=e.text.split(Wi).filter(e=>""!==e),r=[];return t.forEach(e=>{if(""===e)return;const t=[],n=[];for(;St.test(e);)t.push(e[0]),e=e.slice(1);for(;kt.test(e);)n.unshift(e[e.length-1]),e=e.slice(0,-1);let s=[...t,e,...n];s=s.filter(e=>""!==e),r.push(...s)}),r.map(e=>new class{constructor(e){this.text=e,this.sourceCodeRange={}}}(e))}},Vi=r(201);const Qi=["b","big","i","small","tt","abbr","acronym","cite","code","dfn","em","kbd","strong","samp","time","var","a","bdo","br","img","map","object","q","script","span","sub","sup","button","input","label","select","textarea"];var Xi=function(e){return Qi.includes(e)||"#text"===e};function Ji(e){return"#text"===e.name&&e.value&&e.value.match(/^[\n\s]+$/g)}function Zi(e){return e&&e.childNodes.length>0}function ea(e){return"p"===e}function ta(e){return["h1","h2","h3","h4","h5","h6"].includes(e)}function ra(e){if("#text"===e.nodeName)return new class{constructor(e){this.name="#text",this.value=e}}(e.value);let t=[];Object(T.isEmpty)(e.childNodes)||(t=e.childNodes.map(ra),function(e){return!(ea(e)||Xi(e)||ta(e))}(e.nodeName)&&(t=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=[];let n={};Object(T.isEmpty)(t)||(n={startOffset:t.startTag?t.startTag.endOffset:t.startOffset,endOffset:t.endTag?t.endTag.startOffset:t.endOffset});let s=Nn.createImplicit({},[],n);return e.forEach(e=>{Xi(e.name)&&!Ji(e)?s.childNodes.push(e):(Zi(s)&&(Object(T.isEmpty)(e.sourceCodeLocation)||(Object(T.isEmpty)(s.sourceCodeLocation)||(s.sourceCodeLocation.endOffset=e.sourceCodeLocation.startOffset),n.startOffset=e.sourceCodeLocation.endOffset),r.push(s),s=Nn.createImplicit({},[],n)),r.push(e))}),Zi(s)&&r.push(s),r}(t,e.sourceCodeLocation)));const r=function(e){if(!e)return{};const t={};return e.forEach(e=>{let{name:r,value:n}=e;"class"===r&&(n=new Set(n.split(" "))),t[r]=n}),t}(e.attrs);if(ea(e.nodeName))return new Nn(r,t,e.sourceCodeLocation);if(ta(e.nodeName)){const n=parseInt(e.nodeName[1],10);return new Sn(n,r,t,e.sourceCodeLocation)}return new wn(e.nodeName,r,t,e.sourceCodeLocation)}function na(e){return t=>t.name===e}function sa(e){return t=>!!t.attributes.class&&t.attributes.class.has(e)}const ia=["code","kbd","math","q","samp","script","var","#comment"];var aa=[sa("yoast-table-of-contents"),sa("yoast-reading-time__wrapper"),("breadcrumbs",e=>"breadcrumbs"===e.attributes.id),na("base"),na("blockquote"),na("canvas"),na("code"),na("head"),na("iframe"),na("input"),na("kbd"),na("link"),na("math"),na("meta"),na("meter"),na("noscript"),na("object"),na("portal"),na("pre"),na("progress"),na("q"),na("samp"),na("script"),na("slot"),na("style"),na("svg"),na("template"),na("textarea"),na("title"),na("var")];function oa(e){const t=[];return e.forEach(e=>{ia.includes(e.name)?t.push(e.sourceCodeLocation):(e.sourceCodeLocation.startTag&&t.push(e.sourceCodeLocation.startTag),e.sourceCodeLocation.endTag&&t.push(e.sourceCodeLocation.endTag))}),t.sort((e,t)=>e.startOffset-t.startOffset),t}function la(e,t,r){return e.forEach(e=>{e.startOffset>=t&&e.startOffset<r&&(r+=e.endOffset-e.startOffset)}),r}function ca(e,t){return e.forEach(e=>{e.startOffset===t&&(t+=e.endOffset-e.startOffset)}),t}function ua(e,t){let r,n,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;if(0===t.length||!e.sourceCodeLocation)return t;r=e instanceof Nn&&e.isImplicit?e.sourceCodeLocation.startOffset:s>=0?s:e.sourceCodeLocation.startTag.endOffset;let i=[];const a=e.findAll(e=>e.sourceCodeLocation,!
|
|||
|
/* Translators: %1$s expands to the name of the assessment. */
|
|||
|
Object(_.__)("An error occurred in the '%1$s' assessment","wordpress-seo"),r.identifier,e))}var s;return n},ga.prototype.getValidResults=function(){return Object(T.filter)(this.results,function(e){return this.isValidResult(e)}.bind(this))},ga.prototype.isValidResult=function(e){return e.hasScore()&&e.hasText()},ga.prototype.calculateOverallScore=function(){const e=this.getValidResults(),t=e.reduce((e,t)=>e+t.getScore(),0);return Math.round(t/(9*e.length)*100)||0},ga.prototype.addAssessment=function(e,t){return t.hasOwnProperty("identifier")||(t.identifier=e),this.getAssessment(t.identifier)&&this.removeAssessment(t.identifier),this._assessments.push(t),!0},ga.prototype.removeAssessment=function(e){const t=Object(T.findIndex)(this._assessments,(function(t){return t.hasOwnProperty("identifier")&&e===t.identifier}));-1!==t&&this._assessments.splice(t,1)},ga.prototype.getAssessment=function(e){return Object(T.find)(this._assessments,(function(t){return t.hasOwnProperty("identifier")&&e===t.identifier}))},ga.prototype.getApplicableAssessments=function(){const e=this.getAvailableAssessments();return Object(T.filter)(e,function(e){return this.isApplicable(e,this.getPaper(),this._researcher)}.bind(this))};var fa=ga,ma={recommendedMaximumLength:60,maximumLength:80};class _a extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={recommendedMaximumLength:120,maximumLength:156,scores:{noMetaDescription:1,tooLong:6,tooShort:6,correctLength:9},urlTitle:Object(Ai.b)("https://yoa.st/34d"),urlCallToAction:Object(Ai.b)("https://yoa.st/34e")};this.identifier="metaDescriptionLength",this._config=Object(T.merge)(t,e)}getMaximumLength(e){return this.getConfig(e).maximumLength}getConfig(e){let t=this._config;return"ja"===e&&(t=Object(T.merge)(t,ma)),t}getResult(e,t){const r=t.getResearch("metaDescriptionLength"),n=new wi,s=t.getConfig("language"),i=this.getConfig(s);return n.setScore(this.calculateScore(r,s)),n.setText(this.translateScore(r,i)),n.getScore()<9&&(n.setHasJumps(!0),n.setEditFieldName(Object(_.__)("meta description","wordpress-seo"))),n.max=i.maximumLength,n.actual=r,n}calculateScore(e,t){const r=this.getConfig(t);return 0===e?r.scores.noMetaDescription:e<=this._config.recommendedMaximumLength?r.scores.tooShort:e>this._config.maximumLength?r.scores.tooLong:r.scores.correctLength}translateScore(e,t){return 0===e?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to a links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sMeta description length%3$s: No meta description has been specified. Search engines will display copy from the page instead. %2$sMake sure to write one%3$s!","wordpress-seo"),t.urlTitle,t.urlCallToAction,"</a>"):e<=t.recommendedMaximumLength?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag,
|
|||
|
%4$d expands to the number of characters in the meta description, %5$d expands to
|
|||
|
the total available number of characters in the meta description */
|
|||
|
Object(_.__)("%1$sMeta description length%3$s: The meta description is too short (under %4$d characters). Up to %5$d characters are available. %2$sUse the space%3$s!","wordpress-seo"),t.urlTitle,t.urlCallToAction,"</a>",t.recommendedMaximumLength,t.maximumLength):e>t.maximumLength?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag,
|
|||
|
%4$d expands to the total available number of characters in the meta description */
|
|||
|
Object(_.__)("%1$sMeta description length%3$s: The meta description is over %4$d characters. To ensure the entire description will be visible, %2$syou should reduce the length%3$s!","wordpress-seo"),t.urlTitle,t.urlCallToAction,"</a>",t.maximumLength):Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sMeta description length%2$s: Well done!","wordpress-seo"),t.urlTitle,"</a>")}}class Ta extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={parameters:{lowerBoundary:.3,upperBoundary:.75},scores:{noMatches:3,tooFewMatches:3,goodNumberOfMatches:9,tooManyMatches:3},urlTitle:Object(Ai.b)("https://yoa.st/33m"),urlCallToAction:Object(Ai.b)("https://yoa.st/33n")};this.identifier="subheadingsKeyword",this._config=Object(T.merge)(t,e)}getResult(e,t){this._subHeadings=t.getResearch("matchKeywordInSubheadings");const r=new wi;this._minNumberOfSubheadings=Math.ceil(this._subHeadings.count*this._config.parameters.lowerBoundary),this._maxNumberOfSubheadings=Math.floor(this._subHeadings.count*this._config.parameters.upperBoundary);const n=this.calculateResult();return r.setScore(n.score),r.setText(n.resultText),r}hasSubheadings(e){return Zn(e.getText()).length>0}isApplicable(e){return e.hasText()&&e.hasKeyword()&&this.hasSubheadings(e)}hasTooFewMatches(){return this._subHeadings.matches>0&&this._subHeadings.matches<this._minNumberOfSubheadings}hasTooManyMatches(){return this._subHeadings.count>1&&this._subHeadings.matches>this._maxNumberOfSubheadings}isOneOfOne(){return 1===this._subHeadings.count&&1===this._subHeadings.matches}hasGoodNumberOfMatches(){return Ri(this._subHeadings.matches,this._minNumberOfSubheadings,this._maxNumberOfSubheadings)}calculateResult(){return this.hasTooFewMatches()?{score:this._config.scores.tooFewMatches,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to a link on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sKeyphrase in subheading%3$s: %2$sUse more keyphrases or synonyms in your H2 and H3 subheadings%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:this.hasTooManyMatches()?{score:this._config.scores.tooManyMatches,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to a link on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sKeyphrase in subheading%3$s: More than 75%% of your H2 and H3 subheadings reflect the topic of your copy. That's too much. %2$sDon't over-optimize%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:this.isOneOfOne()?{score:this._config.scores.goodNumberOfMatches,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag,
|
|||
|
%3$d expands to the number of subheadings containing the keyphrase. */
|
|||
|
Object(_.__)("%1$sKeyphrase in subheading%2$s: Your H2 or H3 subheading reflects the topic of your copy. Good job!","wordpress-seo"),this._config.urlTitle,"</a>",this._subHeadings.matches)}:this.hasGoodNumberOfMatches()?{score:this._config.scores.goodNumberOfMatches,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag,
|
|||
|
%3$d expands to the number of subheadings containing the keyphrase. */
|
|||
|
Object(_._n)("%1$sKeyphrase in subheading%2$s: %3$s of your H2 and H3 subheadings reflects the topic of your copy. Good job!","%1$sKeyphrase in subheading%2$s: %3$s of your H2 and H3 subheadings reflect the topic of your copy. Good job!",this._subHeadings.matches,"wordpress-seo"),this._config.urlTitle,"</a>",this._subHeadings.matches)}:{score:this._config.scores.noMatches,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to a link on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sKeyphrase in subheading%3$s: %2$sUse more keyphrases or synonyms in your H2 and H3 subheadings%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}}}class Ea extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={parameters:{lowerBoundary:.3,upperBoundary:.75},scores:{withAltGoodNumberOfKeywordMatches:9,withAltTooFewKeywordMatches:6,withAltTooManyKeywordMatches:6,withAltNonKeyword:6,withAlt:6,noAlt:6},urlTitle:Object(Ai.b)("https://yoa.st/4f7"),urlCallToAction:Object(Ai.b)("https://yoa.st/4f6")};this.identifier="imageKeyphrase",this._config=Object(T.merge)(t,e)}getResult(e,t){this.imageCount=t.getResearch("imageCount"),this.altProperties=t.getResearch("altTagCount"),this._minNumberOfKeywordMatches=Math.ceil(this.imageCount*this._config.parameters.lowerBoundary),this._maxNumberOfKeywordMatches=Math.floor(this.imageCount*this._config.parameters.upperBoundary);const r=this.calculateResult(),n=new wi;return n.setScore(r.score),n.setText(r.resultText),n}isApplicable(e,t){return this.imageCount=t.getResearch("imageCount"),e.hasText()&&this.imageCount>0}hasTooFewMatches(){return this.imageCount>4&&this.altProperties.withAltKeyword>0&&this.altProperties.withAltKeyword<this._minNumberOfKeywordMatches}hasGoodNumberOfMatches(){return this.imageCount<5&&this.altProperties.withAltKeyword>0||5===this.imageCount&&Ri(this.altProperties.withAltKeyword,2,4)||this.imageCount>4&&Ri(this.altProperties.withAltKeyword,this._minNumberOfKeywordMatches,this._maxNumberOfKeywordMatches)}hasTooManyMatches(){return this.imageCount>4&&this.altProperties.withAltKeyword>this._maxNumberOfKeywordMatches}calculateResult(){return this.altProperties.withAlt>0?{score:this._config.scores.withAlt,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sImage Keyphrase%3$s: Images on this page have alt attributes, but you have not set your keyphrase. %2$sFix that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:this.altProperties.withAltNonKeyword>0&&0===this.altProperties.withAltKeyword?{score:this._config.scores.withAltNonKeyword,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sImage Keyphrase%3$s: Images on this page do not have alt attributes with at least half of the words from your keyphrase. %2$sFix that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:this.hasTooFewMatches()?{score:this._config.scores.withAltTooFewKeywordMatches,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$d expands to the number of images containing an alt attribute with the keyword,
|
|||
|
* %2$d expands to the total number of images, %3$s and %4$s expand to links on yoast.com,
|
|||
|
* %5$s expands to the anchor end tag. */
|
|||
|
Object(_._n)("%3$sImage Keyphrase%5$s: Out of %2$d images on this page, only %1$d has an alt attribute that reflects the topic of your text. %4$sAdd your keyphrase or synonyms to the alt tags of more relevant images%5$s!","%3$sImage Keyphrase%5$s: Out of %2$d images on this page, only %1$d have alt attributes that reflect the topic of your text. %4$sAdd your keyphrase or synonyms to the alt tags of more relevant images%5$s!",this.altProperties.withAltKeyword,"wordpress-seo"),this.altProperties.withAltKeyword,this.imageCount,this._config.urlTitle,this._config.urlCallToAction,"</a>")}:this.hasGoodNumberOfMatches()?{score:this._config.scores.withAltGoodNumberOfKeywordMatches,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com,
|
|||
|
* %2$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sImage Keyphrase%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"</a>")}:this.hasTooManyMatches()?{score:this._config.scores.withAltTooManyKeywordMatches,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$d expands to the number of images containing an alt attribute with the keyword,
|
|||
|
* %2$d expands to the total number of images, %3$s and %4$s expand to a link on yoast.com,
|
|||
|
* %5$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%3$sImage Keyphrase%5$s: Out of %2$d images on this page, %1$d have alt attributes with words from your keyphrase or synonyms. That's a bit much. %4$sOnly include the keyphrase or its synonyms when it really fits the image%5$s.","wordpress-seo"),this.altProperties.withAltKeyword,this.imageCount,this._config.urlTitle,this._config.urlCallToAction,"</a>")}:{score:this._config.scores.noAlt,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sImage Keyphrase%3$s: Images on this page do not have alt attributes that reflect the topic of your text. %2$sAdd your keyphrase or synonyms to the alt tags of relevant images%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}}}class va extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super();const r={scores:{bad:3,good:9},recommendedCount:1,urlTitle:Object(Ai.b)("https://yoa.st/4f4"),urlCallToAction:Object(Ai.b)("https://yoa.st/4f5")};this.identifier="images",this._config=Object(T.merge)(r,e),this._countVideos=t}getResult(e,t){this.imageCount=t.getResearch("imageCount"),this.videoCount=t.getResearch("videoCount");const r=this.calculateResult(),n=new wi;return n.setScore(r.score),n.setText(r.resultText),n}isApplicable(e){return e.hasText()}calculateResult(){const e=this._countVideos?this.imageCount+this.videoCount:this.imageCount;if(0===e)return this._countVideos?{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sImages and videos%3$s: No images or videos appear on this page. %2$sAdd some%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}:{score:this._config.scores.bad,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sImages%3$s: No images appear on this page. %2$sAdd some%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")};if(this._config.scores.okay){if(Ri(e,1,3)&&!this._countVideos)return{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %3$s and %4$s expand to links on yoast.com, %5$s expands to the anchor end tag,
|
|||
|
* %1$d expands to the number of images found in the text,
|
|||
|
* %2$d expands to the recommended number of images in the text, */
|
|||
|
Object(_._n)("%3$sImages%5$s: Only %1$d image appears on this page. We recommend at least %2$d. %4$sAdd more relevant images%5$s!","%3$sImages%5$s: Only %1$d images appear on this page. We recommend at least %2$d. %4$sAdd more relevant images%5$s!",e,"wordpress-seo"),e,this._config.recommendedCount,this._config.urlTitle,this._config.urlCallToAction,"</a>")};if(Ri(e,1,3)&&this._countVideos)return{score:this._config.scores.okay,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %3$s and %4$s expand to links on yoast.com, %5$s expands to the anchor end tag,
|
|||
|
* %1$d expands to the number of images found in the text,
|
|||
|
* %2$d expands to the recommended number of images in the text, */
|
|||
|
Object(_._n)("%3$sImages and videos%5$s: Only %1$d image or video appears on this page. We recommend at least %2$d. %4$sAdd more relevant images or videos%5$s!","%3$sImages and videos%5$s: Only %1$d images or videos appear on this page. We recommend at least %2$d. %4$sAdd more relevant images or videos%5$s!",e,"wordpress-seo"),e,this._config.recommendedCount,this._config.urlTitle,this._config.urlCallToAction,"</a>")}}return this._countVideos?{score:this._config.scores.good,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com,
|
|||
|
* %2$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sImages and videos%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"</a>")}:{score:this._config.scores.good,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com,
|
|||
|
* %2$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sImages%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"</a>")}}}class ba extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={recommendedMinimum:300,slightlyBelowMinimum:250,belowMinimum:200,veryFarBelowMinimum:100,scores:{recommendedMinimum:9,slightlyBelowMinimum:6,belowMinimum:3,farBelowMinimum:-10,veryFarBelowMinimum:-20},countTextIn:{singular:Object(_.__)("word","wordpress-seo"),plural:Object(_.__)("words","wordpress-seo")},urlTitle:Object(Ai.b)("https://yoa.st/34n"),urlCallToAction:Object(Ai.b)("https://yoa.st/34o"),cornerstoneContent:!1,customContentType:""};this.identifier="textLength",this._config=Object(T.merge)(t,e)}getResult(e,t){const r=t.getResearch("wordCountInText");t.getConfig("textLength")&&(this._config=this.getLanguageSpecificConfig(t)),t.getConfig("countCharacters")&&(this._config.countTextIn.singular=Object(_.__)("character","wordpress-seo"),this._config.countTextIn.plural=Object(_.__)("characters","wordpress-seo"));const n=this.calculateResult(r.count),s=new wi;return s.setScore(n.score),s.setText(n.resultText),s}getLanguageSpecificConfig(e){const t=this._config,r=e.getConfig("textLength");return r.hasOwnProperty(t.customContentType)?Object(T.merge)(t,r[t.customContentType]):!0===t.cornerstoneContent&&""===t.customContentType&&r.hasOwnProperty("defaultCornerstone")?Object(T.merge)(t,r.defaultCornerstone):Object(T.merge)(t,r.defaultAnalysis)}calculateResult(e){if(e>=this._config.recommendedMinimum)return{score:this._config.scores.recommendedMinimum,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$d expands to the number of words / characters in the text,
|
|||
|
%2$s expands to a link on yoast.com, %3$s expands to the anchor end tag,
|
|||
|
%4$s expands to the word 'words' or 'characters'. */
|
|||
|
Object(_.__)("%2$sText length%3$s: The text contains %1$d %4$s. Good job!","wordpress-seo"),e,this._config.urlTitle,"</a>",this._config.countTextIn.plural)};if(Object(T.inRange)(e,0,this._config.belowMinimum)){let t=this._config.scores.farBelowMinimum;return Object(T.inRange)(e,0,this._config.veryFarBelowMinimum)&&(t=this._config.scores.veryFarBelowMinimum),{score:t,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$d expands to the number of words / characters in the text,
|
|||
|
%2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com,
|
|||
|
%4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters,
|
|||
|
%6$s expands to the word 'word' or 'character', %7$s expands to the word 'words' or 'characters'. */
|
|||
|
Object(_._n)("%2$sText length%4$s: The text contains %1$d %6$s. This is far below the recommended minimum of %5$d %7$s. %3$sAdd more content%4$s.","%2$sText length%4$s: The text contains %1$d %7$s. This is far below the recommended minimum of %5$d %7$s. %3$sAdd more content%4$s.",e,"wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.recommendedMinimum,this._config.countTextIn.singular,this._config.countTextIn.plural)}}return Object(T.inRange)(e,this._config.slightlyBelowMinimum,this._config.recommendedMinimum)?!1===this._config.cornerstoneContent?{score:this._config.scores.slightlyBelowMinimum,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$d expands to the number of words / characters in the text,
|
|||
|
%2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com,
|
|||
|
%4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters,
|
|||
|
%6$s expands to the word 'words' or 'characters'. */
|
|||
|
Object(_.__)("%2$sText length%4$s: The text contains %1$d %6$s. This is slightly below the recommended minimum of %5$d %6$s. %3$sAdd a bit more copy%4$s.","wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.recommendedMinimum,this._config.countTextIn.plural)}:{score:this._config.scores.slightlyBelowMinimum,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$d expands to the number of words / characters in the text,
|
|||
|
%2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com,
|
|||
|
%4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters,
|
|||
|
%6$s expands to the word 'words' or 'characters'. */
|
|||
|
Object(_.__)("%2$sText length%4$s: The text contains %1$d %6$s. This is below the recommended minimum of %5$d %6$s. %3$sAdd more content%4$s.","wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.recommendedMinimum,this._config.countTextIn.plural)}:{score:this._config.scores.belowMinimum,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$d expands to the number of words / characters in the text,
|
|||
|
%2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com,
|
|||
|
%4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters,
|
|||
|
%6$s expands to the word 'words' or 'characters'. */
|
|||
|
Object(_.__)("%2$sText length%4$s: The text contains %1$d %6$s. This is below the recommended minimum of %5$d %6$s. %3$sAdd more content%4$s.","wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"</a>",this._config.recommendedMinimum,this._config.countTextIn.plural)}}}class ya extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={scores:{noLinks:3,allNofollowed:7,someNoFollowed:8,allFollowed:9},urlTitle:Object(Ai.b)("https://yoa.st/34f"),urlCallToAction:Object(Ai.b)("https://yoa.st/34g")};this.identifier="externalLinks",this._config=Object(T.merge)(t,e)}getResult(e,t){const r=t.getResearch("getLinkStatistics"),n=new wi;return Object(T.isEmpty)(r)||(n.setScore(this.calculateScore(r)),n.setText(this.translateScore(r))),n}isApplicable(e){return e.hasText()}calculateScore(e){return 0===e.externalTotal?this._config.scores.noLinks:e.externalNofollow===e.externalTotal?this._config.scores.allNofollowed:e.externalDofollow<e.externalTotal?this._config.scores.someNoFollowed:e.externalDofollow===e.externalTotal?this._config.scores.allFollowed:null}translateScore(e){return 0===e.externalTotal?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sOutbound links%3$s: No outbound links appear in this page. %2$sAdd some%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>"):e.externalNofollow===e.externalTotal?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sOutbound links%3$s: All outbound links on this page are nofollowed. %2$sAdd some normal links%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>"):e.externalDofollow===e.externalTotal?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sOutbound links%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"</a>"):e.externalDofollow<e.externalTotal?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sOutbound links%2$s: There are both nofollowed and normal outbound links on this page. Good job!","wordpress-seo"),this._config.urlTitle,"</a>"):""}}class Aa extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super();const r={minLength:400,maxLength:600,scores:{noTitle:1,widthTooShort:6,widthTooLong:3,widthCorrect:9},urlTitle:Object(Ai.b)("https://yoa.st/34h"),urlCallToAction:Object(Ai.b)("https://yoa.st/34i")};this._allowShortTitle=t,this.identifier="titleWidth",this._config=Object(T.merge)(r,e)}getMaximumLength(){return 600}getResult(e,t){const r=t.getResearch("pageTitleWidth"),n=new wi;return n.setScore(this.calculateScore(r)),n.setText(this.translateScore(r)),n.getScore()<9&&(n.setHasJumps(!0),n.setEditFieldName(Object(_.__)("SEO title","wordpress-seo"))),n.max=this._config.maxLength,n.actual=r,n}calculateScore(e){return ki(e,1,400)?this._config.scores.widthTooShort:ki(e,this._config.minLength,this._config.maxLength)?this._config.scores.widthCorrect:e>this._config.maxLength?this._config.scores.widthTooLong:this._config.scores.noTitle}translateScore(e){return ki(e,1,400)?this._allowShortTitle?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sSEO title width%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"</a>"):Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sSEO title width%3$s: The SEO title is too short. %2$sUse the space to add keyphrase variations or create compelling call-to-action copy%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>"):ki(e,this._config.minLength,this._config.maxLength)?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sSEO title width%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"</a>"):e>this._config.maxLength?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sSEO title width%3$s: The SEO title is wider than the viewable limit. %2$sTry to make it shorter%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>"):Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sSEO title width%3$s: %2$sPlease create an SEO title%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}}var Oa=class extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={scores:{onlyFunctionWords:0},urlTitle:Object(Ai.b)("https://yoa.st/functionwordskeyphrase-1"),urlCallToAction:Object(Ai.b)("https://yoa.st/functionwordskeyphrase-2")};this.identifier="functionWordsInKeyphrase",this._config=Object(T.merge)(t,e)}getResult(e,t){this._functionWordsInKeyphrase=t.getResearch("functionWordsInKeyphrase"),this._keyword=Object(T.escape)(e.getKeyword());const r=new wi;return this._functionWordsInKeyphrase&&(r.setScore(this._config.scores.onlyFunctionWords),r.setText(Object(_.sprintf)(
|
|||
|
/**
|
|||
|
* Translators:
|
|||
|
* %1$s and %2$s expand to links on yoast.com,
|
|||
|
* %3$s expands to the anchor end tag,
|
|||
|
* %4$s expands to the focus keyphrase of the article.
|
|||
|
*/
|
|||
|
Object(_.__)('%1$sFunction words in keyphrase%3$s: Your keyphrase "%4$s" contains function words only. %2$sLearn more about what makes a good keyphrase.%3$s',"wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>",this._keyword)),r.setHasJumps(!0),r.setEditFieldName(Object(_.__)("keyphrase","wordpress-seo"))),r}isApplicable(e,t){return e.hasKeyword()&&t.hasResearch("functionWordsInKeyphrase")}},Ca=function(e){return"<yoastmark class='yoast-text-mark'>"+e+"</yoastmark>"},wa=class extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={scores:{textContainsSuperfluousH1:1},urlTitle:Object(Ai.b)("https://yoa.st/3a6"),urlCallToAction:Object(Ai.b)("https://yoa.st/3a7")};this.identifier="singleH1",this._config=Object(T.merge)(t,e)}getResult(e,t){this._h1s=t.getResearch("h1s");const r=new wi,n=this.calculateResult();return Object(T.isUndefined)(n)||(r.setScore(n.score),r.setText(n.resultText),r.setHasMarks(!0)),r}calculateResult(){if(!(this._h1s.length<=1))return{score:this._config.scores.textContainsSuperfluousH1,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sSingle title%3$s: H1s should only be used as your main title. Find all H1s in your text that aren't your main title and %2$schange them to a lower heading level%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"</a>")}}getMarks(){const e=this._h1s;return Object(T.map)(e,(function(e){return new gs({original:"<h1>"+e.content+"</h1>",marked:"<h1>"+Ca(e.content)+"</h1>"})}))}isApplicable(e){return e.hasText()}};const Sa=function(e,t){fa.call(this,e,t),this.type="SEOAssessor",this._assessments=[new Si,new Ii,new Li,new Mi,new _a,new Ta,new Ui,new Ea,new va,new ba,new ya,new $i,new Hi,new Aa({scores:{widthTooShort:9}},!0),new qi,new Oa,new wa]};Object(v.inherits)(Sa,fa);var ka=Sa;class Na extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super();const r={urlTitle:Object(Ai.b)("https://yoa.st/35d"),urlCallToAction:Object(Ai.b)("https://yoa.st/35e"),countTextIn:Object(_.__)("words","wordpress-seo"),parameters:{recommendedLength:150,maximumRecommendedLength:200}};this.identifier="textParagraphTooLong",this._config=Object(T.merge)(r,e),this._isProduct=t}getTooLongParagraphs(e,t){const r=t.parameters.recommendedLength;return Object(T.filter)(e,(function(e){return e.countLength>r}))}getConfig(e){const t=this._config,r=e.getConfig("paragraphLength");return r&&(t.parameters=this._isProduct?r.productPageParams:r.defaultPageParams),t}calculateResult(e,t,r){let n;if(0===e.length)return{};const s=e[0].countLength;return s<=r.parameters.recommendedLength&&(n=9),ki(s,r.parameters.recommendedLength,r.parameters.maximumRecommendedLength)&&(n=6),s>r.parameters.maximumRecommendedLength&&(n=3),n>=7?{score:n,hasMarks:!1,text:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sParagraph length%2$s: None of the paragraphs are too long. Great job!","wordpress-seo"),r.urlTitle,"</a>")}:{score:n,hasMarks:!0,text:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %5$s expand to a link on yoast.com, %2$s expands to the anchor end tag,
|
|||
|
%3$d expands to the number of paragraphs over the recommended word / character limit, %4$d expands to the word / character limit,
|
|||
|
%6$s expands to the word 'words' or 'characters'. */
|
|||
|
Object(_._n)("%1$sParagraph length%2$s: %3$d of the paragraphs contains more than the recommended maximum of %4$d %6$s. %5$sShorten your paragraphs%2$s!","%1$sParagraph length%2$s: %3$d of the paragraphs contain more than the recommended maximum of %4$d %6$s. %5$sShorten your paragraphs%2$s!",t.length,"wordpress-seo"),r.urlTitle,"</a>",t.length,r.parameters.recommendedLength,r.urlCallToAction,this._config.countTextIn)}}sortParagraphs(e){return e.sort((function(e,t){return t.countLength-e.countLength}))}getMarks(e,t){const r=t.getResearch("getParagraphLength"),n=this.getTooLongParagraphs(r,this.getConfig(t));return Object(T.map)(n,(function(e){const t=ft(e.text),r=Ca(t);return new gs({original:t,marked:r})}))}getResult(e,t){let r=t.getResearch("getParagraphLength");t.getConfig("countCharacters")&&(this._config.countTextIn=Object(_.__)("characters","wordpress-seo")),r=this.sortParagraphs(r);const n=this.getConfig(t),s=this.getTooLongParagraphs(r,n),i=this.calculateResult(r,s,n),a=new wi;return a.setScore(i.score),a.setText(i.text),a.setHasMarks(i.hasMarks),a}isApplicable(e){return this.hasEnoughContentForAssessment(e)}}var Ra=class extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];super();const n={recommendedLength:20,slightlyTooMany:25,farTooMany:30,urlTitle:Object(Ai.b)("https://yoa.st/34v"),urlCallToAction:Object(Ai.b)("https://yoa.st/34w"),countTextIn:Object(_.__)("words","wordpress-seo")};this._config=Object(T.merge)(n,e),this._isCornerstone=t,this._isProduct=r,this.identifier="textSentenceLength"}getResult(e,t){const r=t.getResearch("countSentencesFromText");t.getConfig("sentenceLength")&&(this._config=this.getLanguageSpecificConfig(t)),t.getConfig("countCharacters")&&(this._config.countTextIn=Object(_.__)("characters","wordpress-seo"));const n=this.calculatePercentage(r),s=this.calculateScore(n),i=new wi;return i.setScore(s),i.setText(this.translateScore(s,n)),i.setHasMarks(n>0),i}isApplicable(e){return this.hasEnoughContentForAssessment(e)}getMarks(e,t){const r=t.getResearch("countSentencesFromText");t.getConfig("sentenceLength")&&(this._config=this.getLanguageSpecificConfig(t));const n=this.getTooLongSentences(r);return Object(T.map)(n,(function(e){const t=gt(e.sentence);return new gs({original:t,marked:Ca(t)})}))}getLanguageSpecificConfig(e){const t=this._config,r=e.getConfig("sentenceLength");return r.hasOwnProperty("recommendedLength")&&(t.recommendedLength=r.recommendedLength),!0===this._isCornerstone&&!1===this._isProduct&&r.hasOwnProperty("cornerstonePercentages")?Object(T.merge)(t,r.cornerstonePercentages):!1===this._isCornerstone&&!1===this._isProduct&&r.hasOwnProperty("percentages")?Object(T.merge)(t,r.percentages):t}translateScore(e,t){return e>=7?Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sSentence length%2$s: Great!","wordpress-seo"),this._config.urlTitle,"</a>"):Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %6$s expand to a link on yoast.com, %2$s expands to the anchor end tag,
|
|||
|
%3$d expands to percentage of sentences, %4$s expands to the recommended maximum sentence length,
|
|||
|
%5$s expands to the recommended maximum percentage, %7$s expands to the word 'words' or 'characters'. */
|
|||
|
Object(_.__)("%1$sSentence length%2$s: %3$s of the sentences contain more than %4$s %7$s, which is more than the recommended maximum of %5$s. %6$sTry to shorten the sentences%2$s.","wordpress-seo"),this._config.urlTitle,"</a>",t+"%",this._config.recommendedLength,this._config.slightlyTooMany+"%",this._config.urlCallToAction,this._config.countTextIn)}calculatePercentage(e){let t=0;if(0!==e.length){const r=this.countTooLongSentences(e);t=ji(r/e.length*100)}return t}calculateScore(e){let t;return e<=this._config.slightlyTooMany&&(t=9),ki(e,this._config.slightlyTooMany,this._config.farTooMany)&&(t=6),e>this._config.farTooMany&&(t=3),t}getTooLongSentences(e){return function(e,t){return Object(T.filter)(e,(function(e){return e.sentenceLength>t}))}(e,this._config.recommendedLength)}countTooLongSentences(e){return this.getTooLongSentences(e).length}},Ia=class extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={parameters:{recommendedMaximumLength:300,slightlyTooMany:300,farTooMany:350},countTextIn:Object(_.__)("words","wordpress-seo"),urlTitle:Object(Ai.b)("https://yoa.st/34x"),urlCallToAction:Object(Ai.b)("https://yoa.st/34y"),scores:{goodShortTextNoSubheadings:9,goodSubheadings:9,okSubheadings:6,badSubheadings:3,badLongTextNoSubheadings:2},applicableIfTextLongerThan:300,shouldNotAppearInShortText:!1,cornerstoneContent:!1};this.identifier="subheadingsTooLong",this._config=Object(T.merge)(t,e)}checkTextBeforeFirstSubheadingLength(e){let t={isLong:!1,isVeryLong:!1};if(e.length>0&&""===e[0].subheading&&""!==e[0].text){const r=e[0].countLength;t={isLong:ki(r,this._config.parameters.slightlyTooMany,this._config.parameters.farTooMany),isVeryLong:r>this._config.parameters.farTooMany}}return t}getTextLength(e,t){const r=t.getHelper("customCountLength");let n=e.getText();return n=kr(n),r?r(n):It(n).length}getResult(e,t){this._subheadingTextsLength=t.getResearch("getSubheadingTextLengths"),t.getConfig("subheadingsTooLong")&&(this._config=this.getLanguageSpecificConfig(t)),t.getConfig("countCharacters")&&(this._config.countTextIn=Object(_.__)("characters","wordpress-seo"));const r=this.checkTextBeforeFirstSubheadingLength(this._subheadingTextsLength);this._subheadingTextsLength=this._subheadingTextsLength.sort((function(e,t){return t.countLength-e.countLength}));const n=new wi;n.setIdentifier(this.identifier),this._hasSubheadings=this.hasSubheadings(e),this._tooLongTextsNumber=this.getTooLongSubheadingTexts().length,this._textLength=this.getTextLength(e,t);const s=this.calculateResult(r);return s.resultTextPlural=s.resultTextPlural||"",n.setScore(s.score),n.setText(s.resultText),n.setHasMarks(s.hasMarks),n}getLanguageSpecificConfig(e){const t=this._config,r=e.getConfig("subheadingsTooLong");return!0===t.cornerstoneContent&&r.hasOwnProperty("cornerstoneParameters")?Object(T.merge)(t,r.cornerstoneParameters):Object(T.merge)(t,r.defaultParameters)}isApplicable(e,t){return this._config.shouldNotAppearInShortText?(t.getConfig("subheadingsTooLong")&&(this._config=this.getLanguageSpecificConfig(t)),this.getTextLength(e,t)>this._config.applicableIfTextLongerThan):this.hasEnoughContentForAssessment(e)}hasSubheadings(e){return Jn(e.getText()).length>0}getMarks(){const e=Object(T.map)(this.getTooLongSubheadingTexts(),(function(e){let{subheading:t}=e;t=mt(t);const r=Ca(t);return new gs({original:t,marked:r,fieldsToMark:["heading"]})}));return Object(T.filter)(e,e=>""!==e.getOriginal())}getTooLongSubheadingTexts(){return Object(T.filter)(this._subheadingTextsLength,function(e){return e.countLength>this._config.parameters.recommendedMaximumLength}.bind(this))}calculateResult(e){if(this._textLength>this._config.applicableIfTextLongerThan){if(this._hasSubheadings){if(e.isLong&&this._tooLongTextsNumber<2)return{score:this._config.scores.okSubheadings,hasMarks:!1,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %3$s expand to a link to https://yoa.st/headings, %2$s expands to the link closing tag.
|
|||
|
* %4$s expands to the recommended number of words following a subheading,
|
|||
|
* %5$s expands to the word 'words' or 'characters'.
|
|||
|
*/
|
|||
|
Object(_.__)("%1$sSubheading distribution%2$s: The beginning of your text is longer than %4$s %5$s and is not separated by any subheadings. %3$sAdd subheadings to improve readability.%2$s","wordpress-seo"),this._config.urlTitle,"</a>",this._config.urlCallToAction,this._config.parameters.recommendedMaximumLength,this._config.countTextIn)};if(e.isVeryLong&&this._tooLongTextsNumber<2)return{score:this._config.scores.badSubheadings,hasMarks:!1,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %3$s expand to a link to https://yoa.st/headings, %2$s expands to the link closing tag.
|
|||
|
* %4$s expands to the recommended number of words following a subheading,
|
|||
|
* %5$s expands to the word 'words' or 'characters'.
|
|||
|
*/
|
|||
|
Object(_.__)("%1$sSubheading distribution%2$s: The beginning of your text is longer than %4$s %5$s and is not separated by any subheadings. %3$sAdd subheadings to improve readability.%2$s","wordpress-seo"),this._config.urlTitle,"</a>",this._config.urlCallToAction,this._config.parameters.recommendedMaximumLength,this._config.countTextIn)};const t=this._subheadingTextsLength[0].countLength;return t<=this._config.parameters.slightlyTooMany?{score:this._config.scores.goodSubheadings,hasMarks:!1,resultText:Object(_.sprintf)(// Translators: %1$s expands to a link to https://yoa.st/headings, %2$s expands to the link closing tag.
|
|||
|
Object(_.__)("%1$sSubheading distribution%2$s: Great job!","wordpress-seo"),this._config.urlTitle,"</a>")}:ki(t,this._config.parameters.slightlyTooMany,this._config.parameters.farTooMany)?{score:this._config.scores.okSubheadings,hasMarks:!0,resultText:Object(_.sprintf)(
|
|||
|
/*
|
|||
|
* Translators: %1$s and %5$s expand to a link on yoast.com, %3$d to the number of text sections
|
|||
|
* not separated by subheadings, %4$d expands to the recommended number of words following a
|
|||
|
* subheading, %6$s expands to the word 'words' or 'characters', %2$s expands to the link closing tag.
|
|||
|
*/
|
|||
|
Object(_._n)("%1$sSubheading distribution%2$s: %3$d section of your text is longer than %4$d %6$s and is not separated by any subheadings. %5$sAdd subheadings to improve readability%2$s.","%1$sSubheading distribution%2$s: %3$d sections of your text are longer than %4$d %6$s and are not separated by any subheadings. %5$sAdd subheadings to improve readability%2$s.",this._tooLongTextsNumber,"wordpress-seo"),this._config.urlTitle,"</a>",this._tooLongTextsNumber,this._config.parameters.recommendedMaximumLength,this._config.urlCallToAction,this._config.countTextIn)}:{score:this._config.scores.badSubheadings,hasMarks:!0,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %5$s expand to a link on yoast.com, %3$d to the number of text sections
|
|||
|
not separated by subheadings, %4$d expands to the recommended number of words or characters following a
|
|||
|
subheading, %6$s expands to the word 'words' or 'characters', %2$s expands to the link closing tag. */
|
|||
|
Object(_._n)("%1$sSubheading distribution%2$s: %3$d section of your text is longer than %4$d %6$s and is not separated by any subheadings. %5$sAdd subheadings to improve readability%2$s.","%1$sSubheading distribution%2$s: %3$d sections of your text are longer than %4$d %6$s and are not separated by any subheadings. %5$sAdd subheadings to improve readability%2$s.",this._tooLongTextsNumber,"wordpress-seo"),this._config.urlTitle,"</a>",this._tooLongTextsNumber,this._config.parameters.recommendedMaximumLength,this._config.urlCallToAction,this._config.countTextIn)}}return{score:this._config.scores.badLongTextNoSubheadings,hasMarks:!1,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %3$s expand to a link to https://yoa.st/headings, %2$s expands to the link closing tag. */
|
|||
|
Object(_.__)("%1$sSubheading distribution%2$s: You are not using any subheadings, although your text is rather long. %3$sTry and add some subheadings%2$s.","wordpress-seo"),this._config.urlTitle,"</a>",this._config.urlCallToAction)}}return this._hasSubheadings?{score:this._config.scores.goodSubheadings,hasMarks:!1,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link to https://yoa.st/headings, %2$s expands to the link closing tag. */
|
|||
|
Object(_.__)("%1$sSubheading distribution%2$s: Great job!","wordpress-seo"),this._config.urlTitle,"</a>")}:{score:this._config.scores.goodShortTextNoSubheadings,hasMarks:!1,resultText:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link to https://yoa.st/headings, %2$s expands to the link closing tag. */
|
|||
|
Object(_.__)("%1$sSubheading distribution%2$s: You are not using any subheadings, but your text is short enough and probably doesn't need them.","wordpress-seo"),this._config.urlTitle,"</a>")}}};class xa extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={urlTitle:Object(Ai.b)("https://yoa.st/34z"),urlCallToAction:Object(Ai.b)("https://yoa.st/35a"),applicableIfTextLongerThan:200};this.identifier="textTransitionWords",this._config=Object(T.merge)(t,e)}calculateTransitionWordPercentage(e){return 0===e.transitionWordSentences||0===e.totalSentences?0:ji(e.transitionWordSentences/e.totalSentences*100)}calculateScoreFromPercentage(e){return e<20?3:Ni(e,20,30)?6:9}calculateTransitionWordResult(e){const t=this.calculateTransitionWordPercentage(e),r=this.calculateScoreFromPercentage(t),n=t>0;return r<7&&0===t?{score:ji(r),hasMarks:n,text:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %3$s expand to a link to yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sTransition words%2$s: None of the sentences contain transition words. %3$sUse some%2$s.","wordpress-seo"),this._config.urlTitle,"</a>",this._config.urlCallToAction)}:r<7?{score:ji(r),hasMarks:n,text:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %4$s expand to a link to yoast.com, %2$s expands to the anchor end tag,
|
|||
|
%3$s expands to the percentage of sentences containing transition words */
|
|||
|
Object(_.__)("%1$sTransition words%2$s: Only %3$s of the sentences contain transition words, which is not enough. %4$sUse more of them%2$s.","wordpress-seo"),this._config.urlTitle,"</a>",t+"%",this._config.urlCallToAction)}:{score:ji(r),hasMarks:n,text:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sTransition words%2$s: Well done!","wordpress-seo"),this._config.urlTitle,"</a>")}}getResult(e,t){const r=t.getResearch("findTransitionWords"),n=this.calculateTransitionWordResult(r),s=new wi;return s.setScore(n.score),s.setText(n.text),s.setHasMarks(n.hasMarks),s}getMarks(e,t){const r=t.getResearch("findTransitionWords");return Object(T.map)(r.sentenceResults,(function(e){let t=e.sentence;return t=gt(t),new gs({original:t,marked:Ca(t)})}))}isApplicable(e,t){const r=t.getHelper("customCountLength"),n=t.getConfig("assessmentApplicability").transitionWords;n&&(this._config.applicableIfTextLongerThan=n);let s=e.getText();return s=kr(s),(r?r(s):It(s).length)>=this._config.applicableIfTextLongerThan&&t.hasResearch("findTransitionWords")}}class Da extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={urlTitle:Object(Ai.b)("https://yoa.st/34t"),urlCallToAction:Object(Ai.b)("https://yoa.st/34u")};this.identifier="passiveVoice",this._config=Object(T.merge)(t,e)}calculatePassiveVoiceResult(e){let t,r=0;0!==e.total&&(r=ji(e.passives.length/e.total*100));const n=r>0;return r<=10&&(t=9),ki(r,10,15)&&(t=6),r>15&&(t=3),t>=7?{score:t,hasMarks:n,text:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */
|
|||
|
Object(_.__)("%1$sPassive voice%2$s: You're using enough active voice. That's great!","wordpress-seo"),this._config.urlTitle,"</a>")}:{score:t,hasMarks:n,text:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %5$s expand to a link on yoast.com, %2$s expands to the anchor end tag,
|
|||
|
%3$s expands to the percentage of sentences in passive voice, %4$s expands to the recommended value. */
|
|||
|
Object(_.__)("%1$sPassive voice%2$s: %3$s of the sentences contain passive voice, which is more than the recommended maximum of %4$s. %5$sTry to use their active counterparts%2$s.","wordpress-seo"),this._config.urlTitle,"</a>",r+"%","10%",this._config.urlCallToAction)}}getMarks(e,t){const r=t.getResearch("getPassiveVoiceResult");return Object(T.map)(r.passives,(function(e){e=gt(e);const t=Ca(e);return new gs({original:e,marked:t})}))}getResult(e,t){const r=t.getResearch("getPassiveVoiceResult"),n=this.calculatePassiveVoiceResult(r),s=new wi;return s.setScore(n.score),s.setText(n.text),s.setHasMarks(n.hasMarks),s}isApplicable(e,t){return this.hasEnoughContentForAssessment(e)&&t.hasResearch("getPassiveVoiceResult")}}class La extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={urlTitle:Object(Ai.b)("https://yoa.st/35f"),urlCallToAction:Object(Ai.b)("https://yoa.st/35g")};this.identifier="sentenceBeginnings",this._config=Object(T.merge)(t,e)}groupSentenceBeginnings(e){const t=Object(T.partition)(e,(function(e){return e.count>2}));if(0===t[0].length)return{total:0};const r=Object(T.sortBy)(t[0],(function(e){return e.count}));return{total:t[0].length,lowestCount:r[0].count}}calculateSentenceBeginningsResult(e){return e.total>0?{score:3,hasMarks:!0,text:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %5$s expand to a link on yoast.com, %2$s expands to the anchor end tag,
|
|||
|
%3$d expands to the number of consecutive sentences starting with the same word,
|
|||
|
%4$d expands to the number of instances where 3 or more consecutive sentences start with the same word. */
|
|||
|
Object(_._n)("%1$sConsecutive sentences%2$s: The text contains %3$d consecutive sentences starting with the same word. %5$sTry to mix things up%2$s!","%1$sConsecutive sentences%2$s: The text contains %4$d instances where %3$d or more consecutive sentences start with the same word. %5$sTry to mix things up%2$s!",e.total,"wordpress-seo"),this._config.urlTitle,"</a>",e.lowestCount,e.total,this._config.urlCallToAction)}:{score:9,hasMarks:!1,text:Object(_.sprintf)(
|
|||
|
/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */
|
|||
|
Object(_.__)("%1$sConsecutive sentences%2$s: There is enough variety in your sentences. That's great!","wordpress-seo"),this._config.urlTitle,"</a>")}}getMarks(e,t){let r=t.getResearch("getSentenceBeginnings");r=Object(T.filter)(r,(function(e){return e.count>2}));const n=Object(T.map)(r,(function(e){return e.sentences}));return Object(T.map)(Object(T.flatten)(n),(function(e){e=gt(e);const t=Ca(e);return new gs({original:e,marked:t})}))}getResult(e,t){const r=t.getResearch("getSentenceBeginnings"),n=this.groupSentenceBeginnings(r),s=this.calculateSentenceBeginningsResult(n),i=new wi;return i.setScore(s.score),i.setText(s.text),i.setHasMarks(s.hasMarks),i}isApplicable(e,t){return this.hasEnoughContentForAssessment(e)&&t.hasResearch("getSentenceBeginnings")}}class Ma extends yi{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super();const t={urlTitle:Object(Ai.b)("https://yoa.st/35h"),urlCallToAction:Object(Ai.b)("https://yoa.st/35i")};this.identifier="textPresence",this._config=Object(T.merge)(t,e)}getResult(e){if(!this.hasEnoughContentForAssessment(e)){const e=new wi;return e.setText(Object(_.sprintf)(
|
|||
|
/* Translators: %1$s and %3$s expand to links to articles on Yoast.com,
|
|||
|
%2$s expands to the anchor end tag*/
|
|||
|
Object(_.__)("%1$sNot enough content%2$s: %3$sPlease add some content to enable a good analysis%2$s.","wordpress-seo"),this._config.urlTitle,"</a>",this._config.urlCallToAction)),e.setScore(3),e}return new wi}}var Pa=function(e){return-1===e?"error":0===e?"feedback":e<=4?"bad":e>4&&e<=7?"ok":e>7?"good":""};const Fa=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};fa.call(this,e,t),this.type="contentAssessor",this._assessments=[new Ia,new Na,new Ra,new xa,new Da,new Ma,new La]};r(18).inherits(Fa,fa),Fa.prototype.calculatePenaltyPointsFullSupport=function(e){switch(e){case"bad":return 3;case"ok":return 2;default:case"good":return 0}},Fa.prototype.calculatePenaltyPointsPartialSupport=function(e){switch(e){case"bad":return 4;case"ok":return 2;default:case"good":return 0}},Fa.prototype._allAssessmentsSupported=function(){const e=this._assessments.length;return this.getApplicableAssessments().length===e},Fa.prototype.calculatePenaltyPoints=function(){const e=this.getValidResults(),t=Object(T.map)(e,function(e){const t=Pa(e.getScore());return this._allAssessmentsSupported()?this.calculatePenaltyPointsFullSupport(t):this.calculatePenaltyPointsPartialSupport(t)}.bind(this));return Object(T.sum)(t)},Fa.prototype._ratePenaltyPoints=function(e){if(1===this.getValidResults().length)return 30;if(this._allAssessmentsSupported()){if(e>6)return 30;if(e>4)return 60}else{if(e>4)return 30;if(e>2)return 60}return 90},Fa.prototype.calculateOverallScore=function(){if(0===this.getValidResults().length)return 30;const e=this.calculatePenaltyPoints();return this._ratePenaltyPoints(e)};var ja=Fa;const Ba=function(e,t){fa.call(this,e,t),this.type="taxonomyAssessor",this._assessments=[new Si,new Ii,new Li,new Mi,new _a,new ba({recommendedMinimum:250,slightlyBelowMinimum:200,belowMinimum:100,veryFarBelowMinimum:50,urlTitle:Object(Ai.b)("https://yoa.st/34j"),urlCallToAction:Object(Ai.b)("https://yoa.st/34k"),customContentType:"taxonomyAssessor"}),new $i,new Aa({scores:{widthTooShort:9}},!0),new qi,new Oa,new wa]};Object(v.inherits)(Ba,fa);var Ua=Ba;const Ha={keyword:"",synonyms:"",description:"",title:"",titleWidth:0,slug:"",locale:"en_US",permalink:"",date:"",customData:{},textTitle:"",writingDirection:"LTR"};function $a(e,t){this._text=e||"",this._tree=null,t=t||{},Object(T.defaults)(t,Ha),""===t.locale&&(t.locale=Ha.locale),t.hasOwnProperty("url")&&(console.warn("The 'url' attribute is deprecated, use 'slug' instead."),t.slug=t.url||t.slug);const r=t.keyword.replace(/[‘’“”"'.?!:;,¿¡«»&*@#±^%|~`[\](){}⟨⟩<>/\\–\-\u2014\u00d7\u002b\u0026\s]/g,"");Object(T.isEmpty)(r)&&(t.keyword=Ha.keyword),this._attributes=t}$a.prototype.hasKeyword=function(){return""!==this._attributes.keyword},$a.prototype.getKeyword=function(){return this._attributes.keyword},$a.prototype.hasSynonyms=function(){return""!==this._attributes.synonyms},$a.prototype.getSynonyms=function(){return this._attributes.synonyms},$a.prototype.hasText=function(){return""!==this._text},$a.prototype.getText=function(){return this._text},$a.prototype.setTree=function(e){this._tree=e},$a.prototype.getTree=function(){return this._tree},$a.prototype.hasDescription=function(){return""!==this._attributes.description},$a.prototype.getDescription=function(){return this._attributes.description},$a.prototype.hasTitle=function(){return""!==this._attributes.title},$a.prototype.getTitle=function(){return this._attributes.title},$a.prototype.hasTitleWidth=function(){return 0!==this._attributes.titleWidth},$a.prototype.getTitleWidth=function(){return this._attributes.titleWidth},$a.prototype.hasSlug=function(){return""!==this._attributes.slug},$a.prototype.getSlug=function(){return this._attributes.slug},$a.prototype.hasUrl=function(){return console.warn("This function is deprecated, use hasSlug instead"),this.hasSlug()},$a.prototype.getUrl=function(){return console.warn("This function is deprecated, use getSlug instead"),this.getSlug()},$a.prototype.hasLocale=function(){return""!==this._attributes.locale},$a.prototype.getLocale=function(){return this._attributes.l
|
|||
|
/* Translators: %1$s expands to the name of the assessment. */
|
|||
|
Object(_.__)("An error occurred in the '%1$s' assessment","wordpress-seo"),e.name)),t}async assessRelatedKeywords(e,t,r){const n=Object.keys(r);return await Promise.all(n.map(n=>{this._relatedKeywords[n]=r[n];const s=Ka.parse({...e.serialize(),keyword:this._relatedKeywords[n].keyword,synonyms:this._relatedKeywords[n].synonyms}),i={oldAssessor:this._relatedKeywordAssessor,treeAssessor:this._relatedKeywordTreeAssessor,scoreAggregator:this._seoScoreAggregator};return this.assess(s,t,i).then(e=>({key:n,results:e}))}))}loadScript(e,t){let{url:r}=t;if(Object(T.isUndefined)(r))return{loaded:!1,url:r,message:"Load Script was called without an URL."};try{this._scope.importScripts(r)}catch(e){return{loaded:!1,url:r,message:e.message}}return{loaded:!0,url:r}}loadScriptDone(e,t){t.loaded?this.send("loadScript:done",e,t):this.send("loadScript:failed",e,t)}analyzeDone(e,t){t.error?this.send("analyze:failed",e,t):this.send("analyze:done",e,t)}analyzeRelatedKeywordsDone(e,t){t.error?this.send("analyzeRelatedKeywords:failed",e,t):this.send("analyzeRelatedKeywords:done",e,t)}customMessage(e,t){let{name:r,data:n}=t;try{return{success:!0,data:this._registeredMessageHandlers[r](n)}}catch(e){return{error:e}}}customMessageDone(e,t){t.success?this.send("customMessage:done",e,t.data):this.send("customMessage:failed",t.error)}registerResearch(e,t){if(!Object(T.isString)(e))throw new Dt("Failed to register the custom research. Expected parameter `name` to be a string.");if(!Object(T.isObject)(t))throw new Dt("Failed to register the custom research. Expected parameter `research` to be a function.");const r=this._researcher;r.hasResearch(e)||r.addResearch(e,t)}runResearch(e,t){let{name:r,paper:n=null}=t;const s=this._researcher.getData("morphology"),i=this._researcher;if(null!==n&&(i.setPaper(n),i.addResearchData("morphology",s),null===n.getTree())){const e=new Yi(i);n.setTree(pa(n.getText(),e))}return i.getResearch(r)}runResearchDone(e,t){t.error?this.send("runResearch:failed",e,t):this.send("runResearch:done",e,t)}registerHelper(e,t){if(!Object(T.isString)(e))throw new Dt("Failed to register the custom helper. Expected parameter `name` to be a string.");if(!Object(T.isObject)(t))throw new Dt("Failed to register the custom helper. Expected parameter `helper` to be a function.");const r=this._researcher;r.hasHelper(e)||r.addHelper(e,t)}registerResearcherConfig(e,t){if(!Object(T.isString)(e))throw new Dt("Failed to register the custom researcher config. Expected parameter `name` to be a string.");if(Object(T.isUndefined)(t)||Object(T.isEmpty)(t))throw new Mt("Failed to register the custom researcher config. Expected parameter `researcherConfig` to be defined.");const r=this._researcher;r.hasConfig(e)||r.addConfig(e,t)}}class fc{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.result=e,this.data=t}}var mc=class{constructor(e){this._worker=e,this._requests={},this._autoIncrementedRequestId=-1,this.initialize=this.initialize.bind(this),this.analyze=this.analyze.bind(this),this.analyzeRelatedKeywords=this.analyzeRelatedKeywords.bind(this),this.loadScript=this.loadScript.bind(this),this.sendMessage=this.sendMessage.bind(this),this.runResearch=this.runResearch.bind(this),this.handleMessage=this.handleMessage.bind(this),this.handleMessageError=this.handleMessageError.bind(this),this.handleError=this.handleError.bind(this),this._worker.onmessage=this.handleMessage,this._worker.onmessageerror=this.handleMessageError,this._worker.onerror=this.handleError}handleMessage(e){let{data:{type:t,id:r,payload:n}}=e;const s=this._requests[r];if(s){switch(n=rc(n),t){case"initialize:done":case"loadScript:done":case"customMessage:done":case"runResearch:done":case"analyzeRelatedKeywords:done":case"analyze:done":s.resolve(n);break;case"analyze:failed":case"loadScript:failed":case"customMessage:failed":case"runResearch:failed":case"analyzeRelatedKeywords:failed":s.reject(n);break;default:console.warn("AnalysisWebWorker unrecognized action:",t)}delete this._requests[r]}else console.warn("AnalysisWebWorker unmatched response:",n)}handleMessag
|
|||
|
/* Translators:
|
|||
|
%1$s expands to a link to an article on yoast.com,
|
|||
|
%2$s expands to an anchor tag. */
|
|||
|
Object(_.__)("%1$sPreviously used keyphrase%2$s: You've not used this keyphrase before, very good.","wordpress-seo"),this.urlTitle,"</a>"),score:9}:1===r?(i=`<a href='${this.postUrl.replace("{id}",n)}' target='_blank'>`,{
|
|||
|
/* Translators: %1$s and %2$s expand to an admin link where the keyword is already used. %3$s and %4$s
|
|||
|
expand to links on yoast.com, %4$s expands to the anchor end tag. */
|
|||
|
text:Object(_.sprintf)(Object(_.__)("%3$sPreviously used keyphrase%5$s: You've used this keyphrase %1$sonce before%2$s. %4$sDo not use your keyphrase more than once%5$s.","wordpress-seo"),i,"</a>",this.urlTitle,this.urlCallToAction,"</a>"),score:6}):r>1?(i=s?`<a href='${this.searchUrl.replace("{keyword}",encodeURIComponent(t.getKeyword()))}&post_type=${s}' target='_blank'>`:`<a href='${this.searchUrl.replace("{keyword}",encodeURIComponent(t.getKeyword()))}' target='_blank'>`,{
|
|||
|
/* Translators: %1$s and $3$s expand to the admin search page for the keyword, %2$d expands to the number
|
|||
|
of times this keyword has been used before, %4$s and %5$s expand to links to yoast.com, %6$s expands to
|
|||
|
the anchor end tag */
|
|||
|
text:Object(_.sprintf)(Object(_.__)("%4$sPreviously used keyphrase%6$s: You've used this keyphrase %1$s multiple times before%3$s. %5$sDo not use your keyphrase more than once%6$s.","wordpress-seo"),i,r,"</a>",this.urlTitle,this.urlCallToAction,"</a>"),score:1}):void 0},yc.prototype.researchPreviouslyUsedKeywords=function(e){const t=e.getKeyword();let r=0,n="",s=0;return!Object(T.isUndefined)(this.usedKeywords[t])&&this.usedKeywords[t].length>0&&(r=this.usedKeywords[t].length,this.usedKeywordsPostTypes&&(n=this.usedKeywordsPostTypes[t][0]),s=this.usedKeywords[t][0]),{id:s,count:r,postTypeToDisplay:n}},yc.prototype.assess=function(e){var t=this.researchPreviouslyUsedKeywords(e),r=this.scoreAssessment(t,e),n=new wi;return n.setScore(r.score),n.setText(r.text),n};var Ac=yc,Oc=function(e){return e.replace(new RegExp("<yoastmark[^>]*>","g"),"").replace(new RegExp("</yoastmark>","g"),"")},Cc=function(){const e=Object(_.__)("Content optimization:","wordpress-seo");return{feedback:{className:"na",screenReaderText:Object(_.__)("Feedback","wordpress-seo"),fullText:`${e} ${Object(_.__)("Has feedback","wordpress-seo")}`,screenReaderReadabilityText:""},bad:{className:"bad",screenReaderText:Object(_.__)("Needs improvement","wordpress-seo"),fullText:`${e} ${Object(_.__)("Needs improvement","wordpress-seo")}`,screenReaderReadabilityText:Object(_.__)("Needs improvement","wordpress-seo")},ok:{className:"ok",screenReaderText:Object(_.__)("OK SEO score","wordpress-seo"),fullText:`${e} ${Object(_.__)("OK SEO score","wordpress-seo")}`,screenReaderReadabilityText:Object(_.__)("OK","wordpress-seo")},good:{className:"good",screenReaderText:Object(_.__)("Good SEO score","wordpress-seo"),fullText:`${e} ${Object(_.__)("Good SEO score","wordpress-seo")}`,screenReaderReadabilityText:Object(_.__)("Good","wordpress-seo")}}},wc=function(e){this.app=e,this.loaded=!1,this.preloadThreshold=3e3,this.plugins={},this.modifications={},this.customTests=[],setTimeout(this._pollLoadingPlugins.bind(this),1500)};wc.prototype._registerPlugin=function(e,t){return"string"!=typeof e?(console.error("Failed to register plugin. Expected parameter `pluginName` to be a string."),!1):Object(T.isUndefined)(t)||"object"==typeof t?!1===this._validateUniqueness(e)?(console.error("Failed to register plugin. Plugin with name "+e+" already exists"),!1):(this.plugins[e]=t,!0):(console.error("Failed to register plugin "+e+". Expected parameters `options` to be a object."),!1)},wc.prototype._ready=function(e){return"string"!=typeof e?(console.error("Failed to modify status for plugin "+e+". Expected parameter `pluginName` to be a string."),!1):Object(T.isUndefined)(this.plugins[e])?(console.error("Failed to modify status for plugin "+e+". The plugin was not properly registered."),!1):(this.plugins[e].status="ready",!0)},wc.prototype._reloaded=function(e){return"string"!=typeof e?(console.error("Failed to reload Content Analysis for "+e+". Expected parameter `pluginName` to be a string."),!1):Object(T.isUndefined)(this.plugins[e])?(console.error("Failed to reload Content Analysis for plugin "+e+". The plugin was not properly registered."),!1):(this.app.refresh(),!0)},wc.prototype._registerModification=function(e,t,r,n){if("string"!=typeof e)return console.error("Failed to register modification for plugin "+r+". Expected parameter `modification` to be a string."),!1;if("function"!=typeof t)return console.error("Failed to register modification for plugin "+r+". Expected parameter `callable` to be a function."),!1;if("string"!=typeof r)return console.error("Failed to register modification for plugin "+r+". Expected parameter `pluginName` to be a string."),!1;if(!1===this._validateOrigin(r))return console.error("Failed to register modification for plugin "+r+". The integration has not finished loading yet."),!1;var s={callable:t,origin:r,priority:"number"==typeof n?n:10};return Object(T.isUndefined)(this.modifications[e])&&(this.modifications[e]=[]),this.modifications[e].push(s),!0},wc.prototype._registerTest=function(){console.error("This function is deprecated, please use _registerAsses
|