This changelog is according to Keep a Changelog.
All notable changes to this project will be documented in this file. We will follow Semantic Versioning from version 2 and onwards.
- Reverted the default view of the snippet preview to desktop.
- Fixes a bug that broke a filter which marks Spanish and French sentences as non-passive when certain exception words occur between the auxiliary and the participle.
- Adds a setter for titleWidth to the snippet preview.
- Adds a researcher to calculate the reading time for a given paper.
- Adds a filter to mark Spanish sentences as non-passive when certain exception words occur between the auxiliary and the participle. The list of exception words includes all forms of the copula 'estar'.
- Adds transition words assessment for Portuguese, props amesdigital.
- Adds prominent words for Portuguese, props amesdigital.
- The snippet preview now shows the mobile preview by default.
- Fixes a bug where division by zero errors in the passive voice assessment would cause
NaN%to show up in the feedback. - Fixes a bug where multiple
relarguments prevented correctnofollowdetection. - Slightly increased the height of the meta description box so it matches the maximum amount of characters without needing a scrollbar.
- Improves the list of Portuguese function words.
- Adds language support table to the README.
- Adds a performance analysis tool.
- Adds the passive voice assessment for French.
- Adds the passive voice assessment for Spanish.
- Simplifies the message for the SubheadingsKeywordAssessment.
- Reduces the number of times the content analysis is refreshed on page load.
- Fixes a bug where relative URLs were not counted as internal links in the internal link assessment.
- Includes the link to the post about using your focus keyword multiple times also to the feedback text that is shown when using a focus keyword twice.
- Changes the anchor text of the link to the post about using your focus keyword multiple times to a more accessible one.
- The upper boundary of the meta description length has been changed from 156 to 320 characters.
- Updates the copy for the
previouslyUsedKeywordsassessment by referring to a new blogpost on why it might be a bad idea to use the same keyword more than once.
- Adds a link to the subheadings article in the readability analysis to better explain the advantages of using subheadings in your text. #1317
- Changes the feedback string for a good meta description length from
The length of the meta description is sufficient.toThe meta description has a nice length.#1307
- Adds a sentence research. #1278
- Adds escaping of the focus keyword in the url generated by the
PreviouslyUsedKeywordsassessment. #1281
- Errors now give a score of -1.
ScoreToRatinginterpreter will convert-1toerror. #1272 - Adds
Excitedto exception -ed verbs for passive voice assessment. #1269 - Adds
releasescript to.travis.ymlfor publishing to npm. #1265 - Adds a filter to exclude
codetags and their enclosed content from the content analysis assessments. #1250 - Adds a filter to exclude
pretags and their enclosed content from the content analysis assessments, props chrisboo. #1258 - Switches testing framework to
jest. #1266
- Added typescript support.
- Add filter for exception words between auxiliary and passive participle.
- Fixes a bug that caused an error in the passive analysis when certain words ending in ing were followed by a parenthesis.
- Adds updatedKeywordsResults and updatedContentResults callbacks to app.js.
- Adds a filter for word combinations that consist of a single one-character word.
- Fixes a bug where the passive voice and transition word assessments were broken when the passive voice sentence breaker or the transition word was preceded by a word containing the same string of letters.
- Adds additional English transition words.
- Adds additional French transition words, props Evoque.
- Adds relevant words functionality for Italian.
- Adds relevant words filters for titles such as 'Ms', 'jr' etc. for English, Dutch, German, French, Italian and Spanish.
- Adds plural ordinal numbers relevant words filters for Spanish, Italian, and French.
- Adds time words relevant words filters for English, Dutch, German, French and Spanish.
- Adds more function words category relevant words filters for Spanish and Italian.
- Improves filtering for Internal Linking Suggestions and Insights for Italian, Spanish, Dutch, French, English and German.
- Removes all relevant word combinations containing any of the following special characters if they are not part of a word: –, —, -, ©, #, %, /, , $, €, £, *, •, |, →, ←, }, {, //, ||.
- Fixes a visual imperfection in the tooltip in combination with Microsoft Edge.
- Changes 'page title' to 'seo title' in the snippet preview.
- Changes recommended maximum sentence length for Italian from 20 to 25 words, based on more in-depth research.
- Adds Flesch Reading for Italian.
- Adds prominent words for French, props Sylvain Perret and Evoque.
- Remove YoastSEO.js as dependency of itself.
- Fixes a bug where assessments added with the pluggable were omitted.
- Fixes a typo in app.js comments, props Alexander Varwijk.
- Fixes an incompatibility issue with includes in Internet Explorer. The browser doesn't support includes and that broke the HTMLparser.
- Adds cornerstone assessors.
- Fixes an issue where the analysis wouldn't work on Internet Explorer.
- Fixes a bug where style and script elements were parsed for the prominent words.
- Fixes a bug where the cursor pointer was in front of the metabox.
- Adds transition words for Italian.
- Adds a new assessment for internal linking that checks for the presence of at least one internal link.
- Fixes the provided example code, props Alexander Guth.
- Introduces sentence beginnings assessment for Italian.
- Fixes a bug where the keyword density assessment would disappear when the density was 0.5%.
- Sets the boldness of the strong tags to 700 to enforce that they are displayed strong.
- Changes strings that link to an article to improve context.
- Changes links to short links so we can ensure they are always up to date.
- Adds prominent words for Spanish.
- Adds getLinks to the researcher, this function retrieves the URLs of the links from the text.
- Improves feedback text for subheading too long assessment.
- Adds prominent words for Dutch.
- Adds example for testing the prominent words analysis.
- Adds the tooltip CSS rule from Yoast SEO to yoastSEO.js.
- Improves the accessibility of the snippet preview toggle buttons.
- Makes the mark buttons tooltips always visible.
- Fixes a bug where the measurement elements holder
<div>breaks the responsive view of the media modal.
- Adds mobile snippet preview.
- Adds sentence length check for Dutch.
- Adds sentence beginnings check for Dutch.
- Adds transition words for Dutch.
- Adds German prominent words.
- Removes unused assessments; sentence length variation, subheading length, subheading presence, subheading distribution too short, paragraph too short
- Makes the stop words check language dependant.
- Adds passive voice for German.
- Adds more transition words for French.
- Creates value objects for sentence parts and participles.
- Improves feedback strings for the meta description length assessment.
- Improves matching of the keyword in the first paragraph.
- Improves the snippet preview to match the styling of Google's snippet.
- Fixes a bug where keywords with periods where not highlighted in the snippet.
- Adds relevant word research that returns a list of most prominent words in a given Paper.
- Changes all target= links to consistently be target=_blank.
- Adds missing transition words to German transition word list.
- Fixes a bug where empty sentences could be marked when marking the beginning of sentences.
- Improves carets used in the snippet preview to support RTL.
- Keywords with special characters are now matched.
- Changes sassdash from a dev dependency to a regular dependency.
- Improves sentence beginning check by matching only alphanumeric characters.
- Adds horizontal ellipses as sentence terminator.
- Improves detecting sentence endings with block ends.
- Passive voice detects multiple uses of the same auxiliary.
- Yoast marks are no longer placed around block level elements.
- Prevents division by zero in transition word assessment result text.
- Passive voice detects exceptions with the word 'rid' correctly.
- Flesch Reading for Dutch
- Flesch Reading for German
- Fixes a security issue where the focus keyword would be output without escaping it first.
- Improves feedback texts of assessments.
- Improves Russian transliteration.
- Determine length of title based on the width in pixels instead of on number of characters.
- Words comprised of only digits are no longer counted in the Flesch Reading assessment.
- Improves passive voice detection by omitting HTML tags.
- Non breaking spaces are replaced with normal spaces in word boundaries.
- Improved keyword density assessment by scoring on the rounded result.
- ¿ and ¡ are now accepted as sentence beginnings.
- Fix a bug where the text assessment would fail with exactly 300 words.
- Fix a bug in the competing links assessment where a link to the same post would be counted as an outbound link.
- Transliterations for the following languages:
- Breton, Chamorro, Corsican, Kashubian, Welsh, Ewe
- Estonian, Basque, Fulah, Fijian, Arpitan, Friulian
- Frisian, Irish, Scottish Gaelic, Galician, Guarani
- Swiss German, Haitian Creole, Hawaiian, Croatian
- Georgian, Greenlandic, Kinyarwanda, Luxembourgish
- Limburgish, Lingala, Lithuanian, Malagasy, Macedonian
- Maori, Mirandese, Occitan, Oromo, Portuguese, Romansh Vallader
- Aromanian, Romanian, Slovak, Slovenian, Albanian
- Klingon (in Latin characters, not KLI PlqaD script yet)
- Hungarian, Sardinian, Silesian, Tahitian, Venetian, Walloon
- Added assessment for consecutive sentences beginning with the same word for the following languages:
- English, German, French, Spanish.
- Added transition words for German, French and Spanish.
- Change the calculation of the aggregate content score to be more lenient for non-English languages.
- Fix a bug where the transition words and passive voice assessments would display on non-English languages.
- Fix a bug where no content would result in a green overall content score.
-
Assessments that assess the following properties:
- The length of subheadings.
- The length of text following a subheading.
- The length of paragraphs.
- The length of sentences.
- The presence of transition words.
- The presence of the passive voice.
-
Markers for certain assessments that can show the location of the feedback inside the text:
- The length of paragraphs.
- The length of sentences.
- The presence of passive voice.
- The presence of transition words.
- The presence of links with the focus keyword as link text.
-
Transliteration for the following languages:
- Spanish, Polish, German, Nynorsk, Bokmål, Swedish, Finnish,
- Danish, Turkish, Latvian, Icelandic, Faroese, Czech, Russian,
- Esperanto, Afrikaans, Catalan, Asturian, Aragonese, Aymara,
- English, French, Italian, Dutch, Bambara.
-
Improved accessibility in the snippet preview.
-
Added a marker argument to the
Appthat can be used to inject a marker function. -
Added a marker argument to the
Assessorthat can be used to inject a marker function. -
Added a button after all assessment results that can be marked in the text.
- Created a contentAssessor that contains all content assessments. Some assessments have been moved from the SEO sssessor to the content assessor.
- Gracefully fail on assessment failure. An assessment that has a fatal error now will be shown as a gray bullet and add a trace to the console.
- Improve the way we detect sentences in the text.
- Improve performance of the flesch reading ease.
- Make sure the refresh of the app is always properly debounced.
- Add identifier to all assessments and assessment results to be able to reference them later.
- Hide progress bars from screen readers.
- Fix a bug where a modification on the title wasn't correctly taken into account.
- Fix a bug where alt tags were requires in all images instead of in only one of the images.
- Fix a bug where having subheadings without the focus keyword was worse than having no subheadings at all.
- Fix a bug where requiring paper in index.js would fail on case-sensitive systems, props Chris Bosco.
- Fixes a bug where the alt-attribute assessment required all images to have an alt-attribute with the keyword.
- Fixes a bug where one wrong translation could crash all the JavaScript.
- Stopped loading sassdash, when importing the scss files you need to include sassdash yourself.
- Removed all analyses in favor of researches.
- Implement the used keywords assessment as a bundled plugin, this means that an implementation should call the plugin itself.
- Removes
js/config/scoring.js - Removes
js/analyzer.js - Removes
js/analyzescorer.js - Removes
browser.jsas we expect implementations to browserify themselves. - Removes
app.registerTestin favor ofapp.registerAssessment. - Removes
js/scoreFormatter.js
- Introduces several value objects to more easily work with content and results:
Paperto represent the text that is about to be assessed.AssessmentResultto represent the result of a single assessment.
- Implements all value judgements about content as assessments, we introduced the following assessments:
- FleschReadingEaseAssessment
- IntroductionKeywordAssessment
- KeyphraseLengthAssessment
- KeywordDensityAssessment
- KeywordStopWordsAssessment
- MetaDescriptionKeywordAssessment
- MetaDescriptionLengthAssessment
- SubheadingsKeywordAssessment
- TaxonomyTextLengthAssessment
- TextCompetingLinksAssessment
- TextImagesAssessment
- TextLengthAssessment
- TextLinksAssessment
- TextSubheadingsAssessment
- TitleKeywordAssessment
- TitleLengthAssessment
- UrlKeywordAssessment
- UrlLengthAssessment
- UrlStopWordsAssessment
- Implements all statistics about a text as researches, we introduced the following researches. All researches expect a
Paper.- calculateFleschReading
- countLinks
- findKeywordInFirstParagraph
- findKeywordInPageTitle
- getKeywordDensity
- getLinks
- getLinkStatistics
- imageAltTags
- imageCountInText
- keyphraseLength
- keywordCountInUrl
- matchKeywordInSubheadings
- matchSubHeadings
- metaDescriptionKeyword
- metaDescriptionLength
- pageTitleLength
- stopWordsInKeyword
- stopWordsInText
- stopWordsInUrl
- urlIsTooLong
- wordCountInText
- Introduces an
Assessorthat contains a number of assessments and is able to determine a total assessment. - Introduces an
SEOAssessorthat has all the assessments that are currently available. - Introduces an
AssessorPresenterto output the results of anAssessorto the DOM. - Introduces a template to more easily render the assessment results.
- Introduces an
Researchesthat contains a number of researches and is you can retrieve a specific research from. - Rewrites the
Appto make use of the assessor setup. - Introduces
scoreToRatingto transform a score to a rating. - Introduces
InvalidTypeErrorfor passing invalid types to constructors or methods - Introduces
config/presenter.jsto transform a rating into a className or screenreader text. - Exports certain prototypes and functions in an
index.js.
- Improves the contrast between the background and the red circle by choosing a different color red.
- Add a clearfix mixin.
- Switches to ESLint in favor of JSHint, JSONLint, JSValidate and JSCS.
- Switches to a custom grunt script to build the lodash templates,
grunt-lodashis deprecated. - Adds an argument to
stringToRegexto specify whether to replace diacritics before building the regex. - Massively improves test coverage.
- Updates
lodashfrom version 3 to version 4. - Pluralizes certain translations, this makes it possible to correctly translate these strings.
- Adds a sass function for a caret point to the left.
- Removes several
for..incalls that errored when build in prototypes had added methods or properties. - Fixes a bug where accented characters were not correctly matched in subheadings and the snippet editor.
- Passing the title, url and meta description meant for the snippet editor is no longer taken into account. The snippet editor keeps track of these values itself.
callbacks.updateSnippetValueshas been deprecated in favor ofcallback.saveSnippetData. Currently a raw event is passed toupdateSnippetValues. This is undesirable because it couples the callback to the DOM. The newsaveSnippetDatapasses the actual data that the user put in the fields.- The
SnippetPreviewobject now requires an options object instead of anAppobject. TheAppobject should still be passed inside the options object with theanalyzerAppkey. - Removed
SnippetPreviewmethods:setFocushideEditIconshowEditIcontextFeedbackdisableEnter
- Removed
Appmethods:bindSnippetEventsbindEventcreateEditIconcreateSnippetPreviewEditIconcreateSnippetPreviewMetacreateSnippetPreviewUrlcreateSnippetPreviewTitle
- Deprecated
App.createSnippetPreview - Removed
StringHelperprototype. - Removed
PreProcessorprototype.
- Completely redesign the snippet editor editing experience:
- Remove the contenteditable fields
- Add a decoupled form to edit the title, slug and meta description fields.
- Add a button to clearly show how to open the snippet editor.
- Add headings to clearly indicate which part is the snippet preview and which is the editor.
- Add progress bars to show an indication about the length of the title and meta description.
- Add carets before the preview and form fields to show which preview belongs to which input field.
- Introduce modules. All non-trivial modules are moved out of
analyzer.jsand moved to theanalysesfolder as module. Where it makes sense we added astringProcessingfolder with all the string helper modules. - Introduces new SnippetPreview functions:
- toggleEditor
- closeEditor
- openEditor
- updateDataFromDOM
- changedInput
- bindEvents
- updateProgressBars
- validateFields
- callRegisteredEventBinder
- getAnalyzerData
- refresh
- renderTemplate
- Introduce
ScoreFormatter.getUndefinedScoresto retrieve all the undefined scores from a scores array. - Introduce
missingArgumenterror that is thrown when an argument is missing in theApp. - Massively reduce the required config of the
App.
- Start to decouple the SnippetPreview from the scrapers and the analyzer.
- Depend on lodash to improve the readability of our codebase and to standardize certain actions.
- Add an option to the
SnippetPreviewto include a date before the meta description. - Add a
baseURLoption to theSnippetPreviewto change the base URL. - Change the stopwords check to a grey bullet that doesn't count towards the total score.
- By default add a trailing slash to the rendered URL, add an option to the
SnippetPreviewto disable this behaviour. - Show the protocol in the snippet preview if it is HTTPS. Google has this behaviour as well.
- Color the meta description preview gray if the user hasn't set it explicitly.
- Removed
YoastSEO.app.addToQueuemethod. - Removed
YoastSEO.app.removeFromQueuemethod. - Removed
YoastSEO.SnippetPreview.setFocusToEndmethod. - Changed class name of progress bar from
wpseo_msgtoYoastSEO_msg. 3fa27b8 - Changed ID of progress bar from
wpseo-plugin-loadingtoYoastSEO-plugin-loading. 3fa27b8 config.sampleText.urlhas been removed in favor ofconfig.sampleText.baseUrlandconfig.sampleText.snippetCite.YoastSEO.Pluggablenow needs to be instantiated with a validYoastSEO.Appobject. ce32d4a- Removed
YoastSEO.App.initmethod. b720553 - Removed
YoastSEO.App.loadQueuemethod. b720553 - Move
YoastSEO.App.queuetoYoastSEO.App.rawData.queue. b720553 - Removed
YoastSEO.App.defineElementsmethod. b720553 - Removed
YoastSEO.App.showMessagemethod. b720553 - Removed
YoastSEO.initializemethod. b720553 - Removed
YoastSEO.getAnalyzerInputmethod. b596d41 - Removed
YoastSEO.runAnalyzerCallbackmethod. b596d41 - Removed
YoastSEO.noKeywordQueuemethod. b596d41 - Removed
YoastSEO.InputGeneratorin favor ofYoastSEO.ExampleScraper, don't use this! This is only meant as an example. af05e7d - Removed
args.snippetTitle. The snippet title will now always be rendered followingargs.pageTitle. 1cf3e23 - Changed arguments of
YoastSEO.ScoreFormatter116bdfd, 9473dce and 34f7657:args.pageAnalyzerremoved in favor ofargs.scoresandargs.overallScore.args.config.targets.outputremoved in favor ofargs.outputTarget.args.config.targets.overallremoved in favor ofargs.overallTarget.- Introduced
args.keyword. - Introduced
args.saveScores.
- Added
YoastSEO.SnippetPreview.getUnformattedTextand `YoastSEO.SnippetPreview.setUnformattedText, getter and setter for the unformatted text property. 682ec6d - Added fallback for meta description to the text that is analyzed. This is prioritized after the excerpt but before the sample text.
- Added a
config.snippetSuffixto include some text before the snippet title. - Added
YoastSEO.Analyzer.addAnalysisto add an analysis on the analyzer object. ddec6b7 - Added
YoastSEO.AnalyzeScorer.addScoringto add a scoring on the scoring object. ddec6b7 - Added
YoastSEO.App.registerTestto add a new test to the analyzer. ddec6b7 - Added
YoastSEO.AnalyzerScoring.getTotalScoreto retrieve the total score. 72f368a
- Improved default value of the base url in the snippet preview. a1d805a
- Improved handling of the raw snippet preview content so we the user can edit the raw string when clicking on an item in the snippet preview.
- Improved detection of container element, now uses
config.targets.outputinstead of a hardcodedwpseo_meta config.sampleText.baseUrlis no longer required.- Added reference to
Yoast.Appinstance as a parameter tobindElementEventscallback. - Automatically enable no keyword queue if there is no keyword. b596d41
- Increase snippet title length from 40 to 70 characters. 0ad7c1f
- Re-render snippet preview after each analysis. 3d080b8
- Use
inputevent to bind to snippet preview change instead ofchange. 4675a9f - Don't use
args.overallTargetif it isn't set. 7ce7ea4
- Fixed snippet preview so only the full focus keyword is highlighted and not words that contain the focus keyword. 3655d13
- Fixed scoring so 0-3 now mean a bad score and no-keyword is a special score. ad8a085
- Fix scoring for title length.
- Sanitize keyword before using it as a regex to prevent the regex from breaking. 2d95fcb
- Style the snippet title
inline-blockto make the overflow hidden. - Style the snippet site url
inlineto make the overflow hidden.
- Fixes a bug where the slug wasn't taken into account when checking if the url contains the focus keyword.
- Initial beta release