SEOPress – AI SEO Plugin & On-site SEO

WordPress SEO plugin with AI SEO metadata, schema, XML sitemap, redirections & Search Console. Privacy-first, white-label SEO. Now AI-ready.

v10.0Benjamin DenisUpdated 2026-06-18Added Aug 22, 2016300k+ installs96% rating82% support resolved
32
Score
138
Errors
429
Warnings
+0
Change

Category Scores

Security0
Repo100
Performance93
Maintainability39

Top Issues by Category

security288
maintainability266
performance4
i18n1

Issues Details

567 issues found in latest scan

WARNING159
WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound

Global variables defined by a theme/plugin should start with the theme/plugin prefix. Found: "$add_to_cart_option".

ERROR106
WordPress.Security.EscapeOutput.OutputNotEscaped

All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '$backdrop'.

WARNING48
WordPress.Security.NonceVerification.Recommended

Processing form data without nonce verification.

WARNING43
WordPress.Security.ValidatedSanitizedInput.MissingUnslash

$_POST[$value] not unslashed before sanitization. Use wp_unslash() or similar

WARNING38
WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound

Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "postmeta_form_limit".

WARNING28
WordPress.Security.NonceVerification.Missing

Processing form data without nonce verification.

WARNING24
WordPress.DB.DirectDatabaseQuery.DirectQuery

Use of a direct database call is discouraged.

WARNING23
WordPress.Security.ValidatedSanitizedInput.InputNotSanitized

Detected usage of a non-sanitized input variable: $_FILES['import_file']['name']

WARNING20
WordPress.DB.DirectDatabaseQuery.NoCaching

Direct database call without caching detected. Consider using wp_cache_get() / wp_cache_set() or wp_cache_delete().

WARNING14
WordPress.Security.SafeRedirect.wp_redirect_wp_redirect

wp_redirect() found. Using wp_safe_redirect(), along with the "allowed_redirect_hosts" filter if needed, can help avoid any chances of malicious redirects within code. It is also important to remember to call exit() after a redirect so that no other unwanted code is executed.

ERROR10
wp_function_not_compatible_with_requires_wp

Function "wp_get_ability_category()" requires WordPress 6.9.0, but your plugin minimum supported version is WordPress 6.5.0.

ERROR9
WordPress.DB.PreparedSQL.NotPrepared

Use placeholders and $wpdb->prepare(); found $post_types

ERROR6
PluginCheck.Security.DirectDB.UnescapedDBParameter

Unescaped parameter $post_types used in $wpdb->get_results()\n$post_types assigned unsafely at line 31.

WARNING5
WordPress.DB.PreparedSQL.InterpolatedNotPrepared

Use placeholders and $wpdb->prepare(); found interpolated variable $blog_id at "SELECT * FROM $table_name WHERE blog_id = $blog_id"

WARNING5
WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound

Functions declared in the global namespace by a theme/plugin should start with the theme/plugin prefix. Found: "add_bulk_action_filters".

WARNING4
WordPress.DB.SlowDBQuery.slow_db_query_meta_query

Detected usage of meta_query, possible slow query.

WARNING4
WordPress.Security.ValidatedSanitizedInput.InputNotValidated

Detected usage of a possibly undefined superglobal array index: $_FILES['import_file']['name']. Check that the array index exists before using it.

WARNING4
WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_exclude

Using exclusionary parameters, like exclude, in calls to get_posts() should be done with caution, see https://wpvip.com/documentation/performance-improvements-by-removing-usage-of-post__not_in/ for more information.

WARNING2
WordPress.DB.SlowDBQuery.slow_db_query_tax_query

Detected usage of tax_query, possible slow query.

WARNING2
trademarked_term

The plugin name includes a restricted term. Your chosen plugin name - "SEOPress - AI SEO Plugin & On-site SEO" - contains the restricted term "plugin" which cannot be used at all in your plugin name.

WARNING1
PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound

load_plugin_textdomain() has been discouraged since WordPress version 4.6. When your plugin is hosted on WordPress.org, you no longer need to manually include this function call for translations under your plugin slug. WordPress will automatically load the translations for you as needed.

WARNING1
PluginCheck.Security.DirectDB.UnescapedDBParameter

Unescaped parameter $table_name used in $wpdb->get_results()\n$table_name assigned unsafely at line 23.

ERROR1
WordPress.DB.PreparedSQLPlaceholders.LikeWildcardsInQuery

SQL wildcards for a LIKE query should be passed in through a replacement parameter. Found: LIKE '\_%%'.

ERROR1
WordPress.DateTime.RestrictedFunctions.date_date

date() is affected by runtime timezone changes which can cause date/time to be incorrectly displayed. Use gmdate() instead.

WARNING1
WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound

Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "$value['filter']".

Latest Snapshot

Findings

567

Errors

138

Warnings

429

Score History

First score snapshot

First scan completed Jun 19, 2026

v10.0 · Plugin Check 2.0.0 · Model 2026.06-mvp-static-v2

Jun 19, 2026

v10.0

32

Latest

Findings
567
Errors
138
Warnings
429
Plugin Check
2.0.0
Model
2026.06-mvp-static-v2

Related Plugins