Yoast SEO - Version 19.7.1

Version Description

Release Date: September 20th, 2022

Bugfixes:

  • Fixes a bug where a fatal error would be thrown in combination with certain plugins that change the standard login page URL.

Other:

  • Changes the copy in the robots.txt comment.
Download this release

Release Info

Developer Yoast
Plugin Icon 128x128 Yoast SEO
Version 19.7.1
Comparing to
See all releases

Code changes from version 19.7 to 19.7.1

Files changed (68) hide show
  1. css/dist/{admin-global-1970-rtl.css → admin-global-1971-rtl.css} +0 -0
  2. css/dist/{admin-global-1970.css → admin-global-1971.css} +0 -0
  3. css/dist/{adminbar-1970-rtl.css → adminbar-1971-rtl.css} +0 -0
  4. css/dist/{adminbar-1970.css → adminbar-1971.css} +0 -0
  5. css/dist/{alerts-1970-rtl.css → alerts-1971-rtl.css} +0 -0
  6. css/dist/{alerts-1970.css → alerts-1971.css} +0 -0
  7. css/dist/{dashboard-1970-rtl.css → dashboard-1971-rtl.css} +0 -0
  8. css/dist/{dashboard-1970.css → dashboard-1971.css} +0 -0
  9. css/dist/{edit-page-1970-rtl.css → edit-page-1971-rtl.css} +0 -0
  10. css/dist/{edit-page-1970.css → edit-page-1971.css} +0 -0
  11. css/dist/{elementor-1970-rtl.css → elementor-1971-rtl.css} +0 -0
  12. css/dist/{elementor-1970.css → elementor-1971.css} +0 -0
  13. css/dist/{featured-image-1970-rtl.css → featured-image-1971-rtl.css} +0 -0
  14. css/dist/{featured-image-1970.css → featured-image-1971.css} +0 -0
  15. css/dist/{filter-explanation-1970-rtl.css → filter-explanation-1971-rtl.css} +0 -0
  16. css/dist/{filter-explanation-1970.css → filter-explanation-1971.css} +0 -0
  17. css/dist/{icons-1970-rtl.css → icons-1971-rtl.css} +0 -0
  18. css/dist/{icons-1970.css → icons-1971.css} +0 -0
  19. css/dist/{inside-editor-1970-rtl.css → inside-editor-1971-rtl.css} +0 -0
  20. css/dist/{inside-editor-1970.css → inside-editor-1971.css} +0 -0
  21. css/dist/{metabox-1970-rtl.css → metabox-1971-rtl.css} +0 -0
  22. css/dist/{metabox-1970.css → metabox-1971.css} +0 -0
  23. css/dist/{metabox-primary-category-1970-rtl.css → metabox-primary-category-1971-rtl.css} +0 -0
  24. css/dist/{metabox-primary-category-1970.css → metabox-primary-category-1971.css} +0 -0
  25. css/dist/{modal-1970-rtl.css → modal-1971-rtl.css} +0 -0
  26. css/dist/{modal-1970.css → modal-1971.css} +0 -0
  27. css/dist/{monorepo-1970-rtl.css → monorepo-1971-rtl.css} +0 -0
  28. css/dist/{monorepo-1970.css → monorepo-1971.css} +0 -0
  29. css/dist/{new-settings-1970-rtl.css → new-settings-1971-rtl.css} +0 -0
  30. css/dist/{new-settings-1970.css → new-settings-1971.css} +0 -0
  31. css/dist/{notifications-1970-rtl.css → notifications-1971-rtl.css} +0 -0
  32. css/dist/{notifications-1970.css → notifications-1971.css} +0 -0
  33. css/dist/{notifications-new-1970-rtl.css → notifications-new-1971-rtl.css} +0 -0
  34. css/dist/{notifications-new-1970.css → notifications-new-1971.css} +0 -0
  35. css/dist/{schema-blocks-1970-rtl.css → schema-blocks-1971-rtl.css} +0 -0
  36. css/dist/{schema-blocks-1970.css → schema-blocks-1971.css} +0 -0
  37. css/dist/{score_icon-1970-rtl.css → score_icon-1971-rtl.css} +0 -0
  38. css/dist/{score_icon-1970.css → score_icon-1971.css} +0 -0
  39. css/dist/{search-appearance-1970-rtl.css → search-appearance-1971-rtl.css} +0 -0
  40. css/dist/{search-appearance-1970.css → search-appearance-1971.css} +0 -0
  41. css/dist/{structured-data-blocks-1970-rtl.css → structured-data-blocks-1971-rtl.css} +0 -0
  42. css/dist/{structured-data-blocks-1970.css → structured-data-blocks-1971.css} +0 -0
  43. css/dist/{tailwind-1970-rtl.css → tailwind-1971-rtl.css} +0 -0
  44. css/dist/{tailwind-1970.css → tailwind-1971.css} +0 -0
  45. css/dist/{toggle-switch-1970-rtl.css → toggle-switch-1971-rtl.css} +0 -0
  46. css/dist/{toggle-switch-1970.css → toggle-switch-1971.css} +0 -0
  47. css/dist/{tooltips-1970-rtl.css → tooltips-1971-rtl.css} +0 -0
  48. css/dist/{tooltips-1970.css → tooltips-1971.css} +0 -0
  49. css/dist/{workouts-1970-rtl.css → workouts-1971-rtl.css} +0 -0
  50. css/dist/{workouts-1970.css → workouts-1971.css} +0 -0
  51. css/dist/{wpseo-dismissible-1970-rtl.css → wpseo-dismissible-1971-rtl.css} +0 -0
  52. css/dist/{wpseo-dismissible-1970.css → wpseo-dismissible-1971.css} +0 -0
  53. css/dist/{yoast-components-1970-rtl.css → yoast-components-1971-rtl.css} +0 -0
  54. css/dist/{yoast-components-1970.css → yoast-components-1971.css} +0 -0
  55. css/dist/{yoast-extensions-1970-rtl.css → yoast-extensions-1971-rtl.css} +0 -0
  56. css/dist/{yoast-extensions-1970.css → yoast-extensions-1971.css} +0 -0
  57. css/dist/{yst_plugin_tools-1970-rtl.css → yst_plugin_tools-1971-rtl.css} +0 -0
  58. css/dist/{yst_plugin_tools-1970.css → yst_plugin_tools-1971.css} +0 -0
  59. css/dist/{yst_seo_score-1970-rtl.css → yst_seo_score-1971-rtl.css} +0 -0
  60. css/dist/{yst_seo_score-1970.css → yst_seo_score-1971.css} +0 -0
  61. readme.txt +12 -1
  62. src/presenters/robots-txt-presenter.php +2 -2
  63. vendor/autoload.php +1 -1
  64. vendor/composer/autoload_real.php +4 -4
  65. vendor/composer/autoload_static.php +4 -4
  66. vendor/composer/installed.php +2 -2
  67. wp-seo-main.php +2 -10
  68. wp-seo.php +1 -1
css/dist/{admin-global-1970-rtl.css → admin-global-1971-rtl.css} RENAMED
File without changes
css/dist/{admin-global-1970.css → admin-global-1971.css} RENAMED
File without changes
css/dist/{adminbar-1970-rtl.css → adminbar-1971-rtl.css} RENAMED
File without changes
css/dist/{adminbar-1970.css → adminbar-1971.css} RENAMED
File without changes
css/dist/{alerts-1970-rtl.css → alerts-1971-rtl.css} RENAMED
File without changes
css/dist/{alerts-1970.css → alerts-1971.css} RENAMED
File without changes
css/dist/{dashboard-1970-rtl.css → dashboard-1971-rtl.css} RENAMED
File without changes
css/dist/{dashboard-1970.css → dashboard-1971.css} RENAMED
File without changes
css/dist/{edit-page-1970-rtl.css → edit-page-1971-rtl.css} RENAMED
File without changes
css/dist/{edit-page-1970.css → edit-page-1971.css} RENAMED
File without changes
css/dist/{elementor-1970-rtl.css → elementor-1971-rtl.css} RENAMED
File without changes
css/dist/{elementor-1970.css → elementor-1971.css} RENAMED
File without changes
css/dist/{featured-image-1970-rtl.css → featured-image-1971-rtl.css} RENAMED
File without changes
css/dist/{featured-image-1970.css → featured-image-1971.css} RENAMED
File without changes
css/dist/{filter-explanation-1970-rtl.css → filter-explanation-1971-rtl.css} RENAMED
File without changes
css/dist/{filter-explanation-1970.css → filter-explanation-1971.css} RENAMED
File without changes
css/dist/{icons-1970-rtl.css → icons-1971-rtl.css} RENAMED
File without changes
css/dist/{icons-1970.css → icons-1971.css} RENAMED
File without changes
css/dist/{inside-editor-1970-rtl.css → inside-editor-1971-rtl.css} RENAMED
File without changes
css/dist/{inside-editor-1970.css → inside-editor-1971.css} RENAMED
File without changes
css/dist/{metabox-1970-rtl.css → metabox-1971-rtl.css} RENAMED
File without changes
css/dist/{metabox-1970.css → metabox-1971.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1970-rtl.css → metabox-primary-category-1971-rtl.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1970.css → metabox-primary-category-1971.css} RENAMED
File without changes
css/dist/{modal-1970-rtl.css → modal-1971-rtl.css} RENAMED
File without changes
css/dist/{modal-1970.css → modal-1971.css} RENAMED
File without changes
css/dist/{monorepo-1970-rtl.css → monorepo-1971-rtl.css} RENAMED
File without changes
css/dist/{monorepo-1970.css → monorepo-1971.css} RENAMED
File without changes
css/dist/{new-settings-1970-rtl.css → new-settings-1971-rtl.css} RENAMED
File without changes
css/dist/{new-settings-1970.css → new-settings-1971.css} RENAMED
File without changes
css/dist/{notifications-1970-rtl.css → notifications-1971-rtl.css} RENAMED
File without changes
css/dist/{notifications-1970.css → notifications-1971.css} RENAMED
File without changes
css/dist/{notifications-new-1970-rtl.css → notifications-new-1971-rtl.css} RENAMED
File without changes
css/dist/{notifications-new-1970.css → notifications-new-1971.css} RENAMED
File without changes
css/dist/{schema-blocks-1970-rtl.css → schema-blocks-1971-rtl.css} RENAMED
File without changes
css/dist/{schema-blocks-1970.css → schema-blocks-1971.css} RENAMED
File without changes
css/dist/{score_icon-1970-rtl.css → score_icon-1971-rtl.css} RENAMED
File without changes
css/dist/{score_icon-1970.css → score_icon-1971.css} RENAMED
File without changes
css/dist/{search-appearance-1970-rtl.css → search-appearance-1971-rtl.css} RENAMED
File without changes
css/dist/{search-appearance-1970.css → search-appearance-1971.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1970-rtl.css → structured-data-blocks-1971-rtl.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1970.css → structured-data-blocks-1971.css} RENAMED
File without changes
css/dist/{tailwind-1970-rtl.css → tailwind-1971-rtl.css} RENAMED
File without changes
css/dist/{tailwind-1970.css → tailwind-1971.css} RENAMED
File without changes
css/dist/{toggle-switch-1970-rtl.css → toggle-switch-1971-rtl.css} RENAMED
File without changes
css/dist/{toggle-switch-1970.css → toggle-switch-1971.css} RENAMED
File without changes
css/dist/{tooltips-1970-rtl.css → tooltips-1971-rtl.css} RENAMED
File without changes
css/dist/{tooltips-1970.css → tooltips-1971.css} RENAMED
File without changes
css/dist/{workouts-1970-rtl.css → workouts-1971-rtl.css} RENAMED
File without changes
css/dist/{workouts-1970.css → workouts-1971.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1970-rtl.css → wpseo-dismissible-1971-rtl.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1970.css → wpseo-dismissible-1971.css} RENAMED
File without changes
css/dist/{yoast-components-1970-rtl.css → yoast-components-1971-rtl.css} RENAMED
File without changes
css/dist/{yoast-components-1970.css → yoast-components-1971.css} RENAMED
File without changes
css/dist/{yoast-extensions-1970-rtl.css → yoast-extensions-1971-rtl.css} RENAMED
File without changes
css/dist/{yoast-extensions-1970.css → yoast-extensions-1971.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1970-rtl.css → yst_plugin_tools-1971-rtl.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1970.css → yst_plugin_tools-1971.css} RENAMED
File without changes
css/dist/{yst_seo_score-1970-rtl.css → yst_seo_score-1971-rtl.css} RENAMED
File without changes
css/dist/{yst_seo_score-1970.css → yst_seo_score-1971.css} RENAMED
File without changes
readme.txt CHANGED
@@ -5,7 +5,7 @@ License: GPLv3
5
  License URI: http://www.gnu.org/licenses/gpl.html
6
  Tags: SEO, XML sitemap, Content analysis, Readability, Schema
7
  Tested up to: 6.0
8
- Stable tag: 19.7
9
  Requires PHP: 5.6.20
10
 
11
  Improve your WordPress SEO: Write better content and have a fully optimized WordPress site using the Yoast SEO plugin.
@@ -241,6 +241,17 @@ Your question has most likely been answered on our help center: [yoast.com/help/
241
 
242
  == Changelog ==
243
 
 
 
 
 
 
 
 
 
 
 
 
244
  = 19.7 =
245
  Release Date: September 20th, 2022
246
 
5
  License URI: http://www.gnu.org/licenses/gpl.html
6
  Tags: SEO, XML sitemap, Content analysis, Readability, Schema
7
  Tested up to: 6.0
8
+ Stable tag: 19.7.1
9
  Requires PHP: 5.6.20
10
 
11
  Improve your WordPress SEO: Write better content and have a fully optimized WordPress site using the Yoast SEO plugin.
241
 
242
  == Changelog ==
243
 
244
+ = 19.7.1 =
245
+ Release Date: September 20th, 2022
246
+
247
+ Bugfixes:
248
+
249
+ * Fixes a bug where a fatal error would be thrown in combination with certain plugins that change the standard login page URL.
250
+
251
+ Other:
252
+
253
+ * Changes the copy in the `robots.txt` comment.
254
+
255
  = 19.7 =
256
  Release Date: September 20th, 2022
257
 
src/presenters/robots-txt-presenter.php CHANGED
@@ -9,9 +9,9 @@ use Yoast\WP\SEO\Helpers\Robots_Txt_Helper;
9
  */
10
  class Robots_Txt_Presenter extends Abstract_Presenter {
11
 
12
- const YOAST_OUTPUT_BEFORE_COMMENT = "# START YOAST INTERNAL SEARCH BLOCK\n# ---------------------------\n";
13
 
14
- const YOAST_OUTPUT_AFTER_COMMENT = "# ---------------------------\n# END YOAST INTERNAL SEARCH BLOCK";
15
 
16
  /**
17
  * Text to be outputted for the allow directive.
9
  */
10
  class Robots_Txt_Presenter extends Abstract_Presenter {
11
 
12
+ const YOAST_OUTPUT_BEFORE_COMMENT = "# START YOAST BLOCK\n# ---------------------------\n";
13
 
14
+ const YOAST_OUTPUT_AFTER_COMMENT = "# ---------------------------\n# END YOAST BLOCK";
15
 
16
  /**
17
  * Text to be outputted for the allow directive.
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit249f74c598bcfc4f9d71e9dfef01ecfa::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInite0d2ef3e929416e204b70ec415281a04::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit249f74c598bcfc4f9d71e9dfef01ecfa
6
  {
7
  private static $loader;
8
 
@@ -24,15 +24,15 @@ class ComposerAutoloaderInit249f74c598bcfc4f9d71e9dfef01ecfa
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInit249f74c598bcfc4f9d71e9dfef01ecfa', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
- spl_autoload_unregister(array('ComposerAutoloaderInit249f74c598bcfc4f9d71e9dfef01ecfa', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
- call_user_func(\Composer\Autoload\ComposerStaticInit249f74c598bcfc4f9d71e9dfef01ecfa::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInite0d2ef3e929416e204b70ec415281a04
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInite0d2ef3e929416e204b70ec415281a04', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInite0d2ef3e929416e204b70ec415281a04', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
+ call_user_func(\Composer\Autoload\ComposerStaticInite0d2ef3e929416e204b70ec415281a04::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit249f74c598bcfc4f9d71e9dfef01ecfa
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'C' =>
@@ -1107,9 +1107,9 @@ class ComposerStaticInit249f74c598bcfc4f9d71e9dfef01ecfa
1107
  public static function getInitializer(ClassLoader $loader)
1108
  {
1109
  return \Closure::bind(function () use ($loader) {
1110
- $loader->prefixLengthsPsr4 = ComposerStaticInit249f74c598bcfc4f9d71e9dfef01ecfa::$prefixLengthsPsr4;
1111
- $loader->prefixDirsPsr4 = ComposerStaticInit249f74c598bcfc4f9d71e9dfef01ecfa::$prefixDirsPsr4;
1112
- $loader->classMap = ComposerStaticInit249f74c598bcfc4f9d71e9dfef01ecfa::$classMap;
1113
 
1114
  }, null, ClassLoader::class);
1115
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInite0d2ef3e929416e204b70ec415281a04
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'C' =>
1107
  public static function getInitializer(ClassLoader $loader)
1108
  {
1109
  return \Closure::bind(function () use ($loader) {
1110
+ $loader->prefixLengthsPsr4 = ComposerStaticInite0d2ef3e929416e204b70ec415281a04::$prefixLengthsPsr4;
1111
+ $loader->prefixDirsPsr4 = ComposerStaticInite0d2ef3e929416e204b70ec415281a04::$prefixDirsPsr4;
1112
+ $loader->classMap = ComposerStaticInite0d2ef3e929416e204b70ec415281a04::$classMap;
1113
 
1114
  }, null, ClassLoader::class);
1115
  }
vendor/composer/installed.php CHANGED
@@ -5,7 +5,7 @@
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
- 'reference' => 'b12bc9ebb8bcf11694aeca4ddc737dd35efadf36',
9
  'name' => 'yoast/wordpress-seo',
10
  'dev' => false,
11
  ),
@@ -46,7 +46,7 @@
46
  'type' => 'wordpress-plugin',
47
  'install_path' => __DIR__ . '/../../',
48
  'aliases' => array(),
49
- 'reference' => 'b12bc9ebb8bcf11694aeca4ddc737dd35efadf36',
50
  'dev_requirement' => false,
51
  ),
52
  ),
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
+ 'reference' => 'e3b37512b2bef3d106f4023b88936aab05159324',
9
  'name' => 'yoast/wordpress-seo',
10
  'dev' => false,
11
  ),
46
  'type' => 'wordpress-plugin',
47
  'install_path' => __DIR__ . '/../../',
48
  'aliases' => array(),
49
+ 'reference' => 'e3b37512b2bef3d106f4023b88936aab05159324',
50
  'dev_requirement' => false,
51
  ),
52
  ),
wp-seo-main.php CHANGED
@@ -15,7 +15,7 @@ if ( ! function_exists( 'add_filter' ) ) {
15
  * {@internal Nobody should be able to overrule the real version number as this can cause
16
  * serious issues with the options, so no if ( ! defined() ).}}
17
  */
18
- define( 'WPSEO_VERSION', '19.7' );
19
 
20
 
21
  if ( ! defined( 'WPSEO_PATH' ) ) {
@@ -396,15 +396,7 @@ if ( ! $filter_exists ) {
396
  add_action( 'admin_init', 'yoast_wpseo_missing_filter', 1 );
397
  }
398
 
399
- $is_login_page = false;
400
- if ( isset( $_SERVER['SCRIPT_NAME'] ) ) {
401
- $script_name = sanitize_text_field( wp_unslash( $_SERVER['SCRIPT_NAME'] ) );
402
- if ( strlen( $script_name ) > 0 && stripos( wp_login_url(), $script_name ) !== false ) {
403
- $is_login_page = true;
404
- }
405
- }
406
-
407
- if ( ! wp_installing() && ! $is_login_page && ( $spl_autoload_exists && $filter_exists ) ) {
408
  add_action( 'plugins_loaded', 'wpseo_init', 14 );
409
  add_action( 'rest_api_init', 'wpseo_init_rest_api' );
410
 
15
  * {@internal Nobody should be able to overrule the real version number as this can cause
16
  * serious issues with the options, so no if ( ! defined() ).}}
17
  */
18
+ define( 'WPSEO_VERSION', '19.7.1' );
19
 
20
 
21
  if ( ! defined( 'WPSEO_PATH' ) ) {
396
  add_action( 'admin_init', 'yoast_wpseo_missing_filter', 1 );
397
  }
398
 
399
+ if ( ! wp_installing() && ( $spl_autoload_exists && $filter_exists ) ) {
 
 
 
 
 
 
 
 
400
  add_action( 'plugins_loaded', 'wpseo_init', 14 );
401
  add_action( 'rest_api_init', 'wpseo_init_rest_api' );
402
 
wp-seo.php CHANGED
@@ -8,7 +8,7 @@
8
  *
9
  * @wordpress-plugin
10
  * Plugin Name: Yoast SEO
11
- * Version: 19.7
12
  * Plugin URI: https://yoa.st/1uj
13
  * Description: The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.
14
  * Author: Team Yoast
8
  *
9
  * @wordpress-plugin
10
  * Plugin Name: Yoast SEO
11
+ * Version: 19.7.1
12
  * Plugin URI: https://yoa.st/1uj
13
  * Description: The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.
14
  * Author: Team Yoast