[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f52PRIodbYHT-mOoRwVUr1qBMW3PbIFLQcOTUcVUjFo4":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":25,"download_link":26,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30,"vulnerabilities":31,"developer":32,"crawl_stats":29,"alternatives":40,"analysis":157,"fingerprints":257},"similar-post-title-checker","Similar post-title checker","1.0.0","Morteza Geransayeh","https:\u002F\u002Fprofiles.wordpress.org\u002Fman4toman\u002F","\u003Cp>This plugin provides similar posts title to prevent duplicate post title and publish unique post title when adding new post in admin area. When you insert your post title, similar post title will be shown under post title input.\u003C\u002Fp>\n","This plugin provides similar posts title to prevent duplicate post title and publish unique post title when adding new post in admin area.",100,5420,96,9,"2020-05-12T06:00:00.000Z","5.1.0","4.0","",[20,21,22,23,24],"check","checker","shamsi","wp-parsi","wpparsi","http:\u002F\u002Fwp-parsi.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsimilar-post-title-checker.zip",85,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":33,"display_name":7,"profile_url":8,"plugin_count":34,"total_installs":35,"avg_security_score":36,"avg_patch_time_days":37,"trust_score":38,"computed_at":39},"man4toman",6,100370,87,183,70,"2026-04-05T06:45:01.817Z",[41,64,87,112,137],{"slug":42,"name":43,"version":44,"author":45,"author_profile":46,"description":47,"short_description":48,"active_installs":49,"downloaded":50,"rating":51,"num_ratings":52,"last_updated":53,"tested_up_to":54,"requires_at_least":55,"requires_php":56,"tags":57,"homepage":18,"download_link":63,"security_score":11,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"plugin-compatibility-checker","Plugin Compatibility Checker","7.0.4","compatshield","https:\u002F\u002Fprofiles.wordpress.org\u002Fcompatshield\u002F","\u003Cp>The \u003Cstrong>Plugin Compatibility Checker\u003C\u002Fstrong> helps you keep your WordPress site stable and secure by scanning installed plugins for PHP and WordPress version compatibility.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>$1\u002Fmonth License Required (Entry Plan)\u003C\u002Fstrong>\u003Cbr \u002F>\nYou must subscribe to the CompatShield Portal ($1\u002Fmonth recurring) to obtain a \u003Cstrong>license key\u003C\u002Fstrong>. Once activated, you will be able to see plugin compatibility results (up to PHP 8.5) directly inside your WordPress admin.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>📺 Video Tutorial\u003C\u002Fstrong>\u003Cbr \u002F>\nWatch step-by-step how to activate your license & run your first scan:\u003Cbr \u002F>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FPCxhJmO-Tb4?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Quick Setup Steps\u003C\u002Fstrong>\u003Cbr \u002F>\n1) Subscribe \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Get your license key from the Portal\u003Cbr \u002F>\n2) Add your domain inside the License tab\u003Cbr \u002F>\n3) Copy your License Key\u003Cbr \u002F>\n4) Paste License Key inside Plugin Settings in WP Admin\u003Cbr \u002F>\n5) Click \u003Cstrong>Validate License\u003C\u002Fstrong>\u003Cbr \u002F>\n6) Click \u003Cstrong>Save Settings\u003C\u002Fstrong>\u003Cbr \u002F>\n7) Go to Plugin Main Page \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Click \u003Cstrong>Rescan\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Pro Version (Upgrade)\u003C\u002Fstrong>\u003Cbr \u002F>\nUpgrading to Pro unlocks the full CompatShield Portal Dashboard with advanced features — vulnerability summary, detailed scan results, notifications, historic analysis, plugin issues overview, premium ZIP upload scanning, and multi-layer compatibility intelligence.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Subscribe \u002F Upgrade to Pro:\u003C\u002Fstrong> https:\u002F\u002Fwww.compatshield.com\u002F\u003C\u002Fp>\n\u003Ch3>✨ Key Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\n\u003Cp>\u003Cstrong>PHP Compatibility Check\u003C\u002Fstrong> – Scan plugins for PHP compatibility.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>$1\u002Fmonth license: Shows PHP compatibility results directly inside WP Plugin backend (up to PHP 8.5)\u003C\u002Fli>\n\u003Cli>Pro license: Deeper breakdowns, insights, and analysis inside Portal Dashboard\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Plugin Rescan\u003C\u002Fstrong> – Quickly rescan whenever you install or update plugins.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Email Notifications (Pro)\u003C\u002Fstrong> – Get notified when scans complete or risks are detected.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Portal Integration (Pro)\u003C\u002Fstrong> – View full detailed results in the CompatShield Portal Dashboard.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Vulnerability Summary (Pro)\u003C\u002Fstrong> – Basic vulnerability insights available in the Portal.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>“No Data” Plugins Handling\u003C\u002Fstrong> – Easily identify custom\u002Fpremium plugins or removed versions not available on WordPress.org.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>🔑 Entry Plan vs Pro Plan\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\n\u003Cp>\u003Cstrong>PHP Compatibility Check\u003C\u002Fstrong>\u003Cbr \u002F>\n$1 Plan: WP Admin Results up to PHP 8.5\u003Cbr \u002F>\nPro Plan: Detailed compatibility insights in Portal Dashboard\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Vulnerability Summary\u003C\u002Fstrong>\u003Cbr \u002F>\n$1 Plan: Not available\u003Cbr \u002F>\nPro Plan: Available in Portal\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Email Notifications\u003C\u002Fstrong>\u003Cbr \u002F>\n$1 Plan: Not available\u003Cbr \u002F>\nPro Plan: Available\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Portal Dashboard\u003C\u002Fstrong>\u003Cbr \u002F>\n$1 Plan: Not available\u003Cbr \u002F>\nPro Plan: Full access (compatibility + vulnerabilities + detailed summaries + site overview)\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Custom\u002FPremium Plugins ZIP Scanning\u003C\u002Fstrong>\u003Cbr \u002F>\n$1 Plan: Not available\u003Cbr \u002F>\nPro Plan: Supported via Portal ZIP uploader\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n","Scan and check your plugins for PHP and WordPress compatibility. Requires a $1\u002Fmonth Portal subscription to obtain a license key.",8000,85564,76,8,"2025-12-22T15:20:00.000Z","6.9.4","5.0","7.2",[58,59,60,61,62],"php-version","plugin-checker","security","tags-compatibility","vulnerabilities","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fplugin-compatibility-checker.zip",{"slug":65,"name":66,"version":67,"author":68,"author_profile":69,"description":70,"short_description":71,"active_installs":72,"downloaded":73,"rating":74,"num_ratings":14,"last_updated":75,"tested_up_to":76,"requires_at_least":77,"requires_php":78,"tags":79,"homepage":85,"download_link":86,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"toolkit-for-envato","Envato Toolkit","1.4","KestutisIT","https:\u002F\u002Fprofiles.wordpress.org\u002Fkestutisit\u002F","\u003Cp>It is a 3 files library + Visual UI, to validate the purchase codes of your customers, get details about specific Envato user (country, city, total followers, total sales, avatar), get his license purchase and support expiration dates, license type he bought, check for updates of purchased plugins and themes and get the download links for them.\u003C\u002Fp>\n\u003Cp>Plus – this library has Envato Item Id search feature by providing plugin’s or theme’s name and author. So – yes, this is a tool you, as a developer \u002F author, have been looking for months.\u003C\u002Fp>\n\u003Cp>If you are looking for the library-only version to integrate into your plugin \u002F theme, it’s on GitHub:\u003Cbr \u002F>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FKestutisIT\u002FEnvatoToolkit\" title=\"Envato Toolkit (Standalone)\" rel=\"nofollow ugc\">Envato Toolkit (Standalone)\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>The main purpose of this plugin is to help you to start much easier without having a headache trying to understand \u003Ccode>WordPress - Envato Market\u003C\u002Fcode> plugins code, that is the only one built by Envato, and has so complicated and unclear code, that you never get how it works (see example below).\u003C\u002Fp>\n\u003Cp>When I tried to create plugin’s \u003Ccode>[Check for Update]\u003C\u002Fcode> and \u003Ccode>[Validate Purchase Code]\u003C\u002Fcode> feature-buttons in the plugin myself, and I saw the code of the \u003Ccode>WordPress - Envato Market\u003C\u002Fcode> plugin, I was shocked how badly it is written and how you should not to code.\u003C\u002Fp>\n\u003Cp>For example – you would like to give an error message, if Envato user token is empty, which is a required string, i.e. – \u003Ccode>pAA0aBCdeFGhiJKlmNOpqRStuVWxyZ44\u003C\u002Fcode>. If you like K.I.S.S., PSR-2, D.R.Y., clean code coding standards and paradigms, you’d probably just have these five lines of code, so that every developer would get it:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$token = get_user_meta(get_current_user_id(), 'envato_token', TRUE);\nif($token == \"\")\n{\n    return new \\WP_Error('api_token_error', __('An API token is required.', 'envato-toolkit'));\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Now lets see how the same task traceback looks like in \u003Ccode>WordPress - Envato Market\u003C\u002Fcode> plugin:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Ccode>[Api.php -> request(..)]\u003C\u002Fcode> Check if the token is empty:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>if ( empty( $token ) )\n{\n    return new WP_Error( 'api_token_error', __( 'An API token is required.', 'envato-market' ) );\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[Api.php -> request(..)]\u003C\u002Fcode> Parse it from another string:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$token = trim( str_replace( 'Bearer', '', $args['headers']['Authorization'] ) );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[Api.php -> request(..)]\u003C\u002Fcode> Parse it one more time – this time from arguments array:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public function request( $url, $args = array() ) {\n    $defaults = array(\n        'timeout' => 20,\n    );\n    $args = wp_parse_args( $args, $defaults );\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[Api.php -> download(..)]\u003C\u002Fcode> Transfer the token variable one more time – this time via params:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>class Envato_Market_API {\n    public function download( $id, $args = array() ) {\n        $url = 'https:\u002F\u002Fapi.envato.com\u002Fv2\u002Fmarket\u002Fbuyer\u002Fdownload?item_id=' . $id . '&shorten_url=true';\n        return $this->request( $url, $args );\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> maybe_deferred_download(..)]\u003C\u002Fcode> Pass it again – this time get it to args array from another method call:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function maybe_deferred_download( $options ) {\n    $args = $this->set_bearer_args();\n    $options['package'] = envato_market()->api()->download( $vars['item_id'], $args );\n    return $options;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> set_bearer_args(..)]\u003C\u002Fcode> Wrap the token into multi-dimensional string array:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$args = array(\n    'headers' => array(\n        'Authorization' => 'Bearer ' . $token,\n    ),\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> set_bearer_args(..)]\u003C\u002Fcode> Pass the wrapped token one more time – this time get it from get_option:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>foreach ( envato_market()->get_option( 'items', array() ) as $item ) {\n    if ( $item['id'] === $id ) {\n        $token = $item['token'];\n        break;\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> get_option(..)]\u003C\u002Fcode> So what’s in this \u003Ccode>get_option\u003C\u002Fcode>? – Correct, another call to another method – \u003Ccode>get_options()\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public function get_option( $name, $default = '' ) {\n    $options = self::get_options();\n    $name = self::sanitize_key( $name );\n    return isset( $options[ $name ] ) ? $options[ $name ] : $default;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> get_options()]\u003C\u002Fcode> Finally, after almost 10 steps in the tree, we are finally getting the original\u003Cbr \u002F>\nWordPress method call, but now I’m getting confused again – what is that \u003Ccode>option_name\u003C\u002Fcode> variable here:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public function get_options() {\n    return get_option( $this->option_name, array() );\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[envato-market.php -> init_globals()]\u003C\u002Fcode> Here is it is – the \u003Ccode>option name\u003C\u002Fcode> key name is… Oh wait…\u003Cbr \u002F>\nNo it is not here it. It is equals to another variable, who is is put\u003Cbr \u002F>\nin another clean-up function – look like I’m keep seeing this for the 2 time in the tree – the sanitization of sanitization:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$this->option_name = self::sanitize_key( $this->slug );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[envato-market.php -> init_globals()]\u003C\u002Fcode> So the \u003Ccode>option name\u003C\u002Fcode> key name is the name of \u003Ccode>$this->slug\u003C\u002Fcode>.\u003Cbr \u002F>\nNow lets see what is the value of \u003Ccode>$this->slug\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$this->slug        = 'envato-market';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>So it takes \u003Cstrong>eleven (!)\u003C\u002Fstrong> steps to understand one variable. And the whole code of that plugin is like that. The example above was the headache I had, until I realized that I must write a new Envato API Management Toolkit, instead of trying to use what Envato is giving, because otherwise I won’t get anything working ever.\u003C\u002Fp>\n\u003Cp>And, I believe, that many other developers had the same issue when tried to create update check feature for their plugins or themes.\u003C\u002Fp>\n\u003Cp>So instead of using that library for myself, I decided that I want to help all these developers to save their time, and I’m sharing this code with you. I’m releasing it under MIT license, which allows you to use this code in your plugin without any restrictions for both – free and commercial use.\u003C\u002Fp>\n\u003Cp>Plus – I’m giving a promise to you, that this plugin is and will always be 100% free, without any ads, ‘Subscribe’, ‘Follow us’, ‘Check our page’, ‘Get Pro Version’ or similar links.\u003C\u002Fp>\n\u003Cp>If you created in hi-quality code a valuable additional functionality to the library and you want to share it with everyone – I’m open here to support your efforts, and add your code to the plugin’s library, so that we all together make this plugin better for authors – the better is the plugin, the better plugins authors will make for their customers. The better quality products we will have on the internet, the happier people will be all over the world.\u003C\u002Fp>\n\u003Cp>Finally – the code is poetry – \u003Cstrong>the better is the plugin, the happier is the world\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>The pseudo-code of example output of the plugin is this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Details about you:\n----------------------------------------------------------\nList of all different plugins you bought:\n\u003C?php foreach($plugins AS $pluginId => $plugin): ?>\n    \u003C?='Plugin Id: '.$pluginId.', Name: '.$plugin['name'];?>, Licenses:\n    \u003C?php foreach($plugin['licenses'] AS $license): ?>\n        Code: \u003C?=$license['purchase_code'];?>,\n        License: \u003C?=$license['license'];?>,\n        Purchased: \u003C?=$license['license_purchase_date'];?> \u003C?=$license['license_purchase_time'];?>,\n        Expires: \u003C?=$license['support_expiration_date'];?> \u003C?=$license['support_expiration_time'];?>,\n        Support Status: \u003C?=$license['support_active'];?>\n    \u003C?php endforeach; ?>\n\u003C?php endforeach; ?>\n\nList of all different themes you bought:\n\u003C?php foreach($themes AS $themeId => $theme): ?>\n    \u003C?='Theme Id: '.$themeId.', Name: '.$theme['name'];?>, Licenses:\n    \u003C?php foreach($theme['licenses'] AS $license): ?>\n        Code: \u003C?=$license['purchase_code'];?>,\n        License: \u003C?=$license['license'];?>,\n        Purchased: \u003C?=$license['license_purchase_date'];?> \u003C?=$license['license_purchase_time'];?>,\n        Expires: \u003C?=$license['support_expiration_date'];?> \u003C?=$license['support_expiration_time'];?>,\n        Status: \u003C?=$license['support_active'] == 1 ? \"Supported\" : \"Support Expired\";?>\n    \u003C?php endforeach; ?>\n\u003C?php endforeach; ?>\n\nYour summary:\nYour location is \u003C?=$authorCity;?>, \u003C?=$authorCountry;?>.\nYou've sold your items \u003C?=$authorSales;?> times and you have \u003C?=$authorFollowers;?> followers on Envato.\n\n1. Your Customer's License Details\n----------------------------------------------------------\nPurchase Code: \u003C?=$targetPurchaseCode;?>\nIs Valid License: \u003C?=$isValidTargetLicense ? 'Yes' : 'No';?>\nBuyer Username: \u003C?=$targetLicenseBuyer;?>\nLicense Type: \u003C?=$targetLicenseType;?>\nPurchased At: \u003C?=$targetLicensePurchasedAt;?>\nSupported Until: \u003C?=$targetLicenseSupportedUntil;?>\nSupport Status: \u003C?=$targetLicenseSupportActive == 1 ? \"Supported\" : \"Support Expired\";?>\n\n2. Details About Target Envato User - \u003C?=$targetUsername;?>\n----------------------------------------------------------\n\u003C?=$targetUsername;?> is located in \u003C?=$targetUserCity;?>, \u003C?=$targetUserCountry;?>.\nHe sold his items \u003C?=$targetUserSales;?> times and has \u003C?=$targetUserFollowers;?> followers on Envato.\n\n3. Status of Purchased Plugin ID - \u003C?=$targetPluginId;?>\n----------------------------------------------------------\nPlugin Name: \u003C?=$nameOfTargetPluginId;?>\nPlugin Update Available: \u003C?=$pluginUpdateAvailable ? 'Yes' : 'No';?>\nInstalled Plugin Version: \u003C?=$installedPluginVersion;?>\nAvailable Plugin Version: \u003C?=$availablePluginVersion;?>\nPlugin Update Download URL:\n\u003Ca href=\"\u003C?=$pluginUpdateDownloadUrl;?>\" target=\"_blank\" title=\"Download newest version\">Download newest version\u003C\u002Fa>\n\n4. Status of Purchased Theme ID - \u003C?=$targetThemeId;?>:\n----------------------------------------------------------\nTheme Name: \u003C?=$nameOfTargetThemeId;?>\nTheme Update Available: \u003C?=$themeUpdateAvailable ? 'Yes' : 'No';?>\nInstalled Theme Version: \u003C?=$installedThemeVersion;?>\nAvailable Theme Version: \u003C?=$availableThemeVersion;?>\nTheme Update Download URL:\n\u003Ca href=\"\u003C?=$themeUpdateDownloadUrl;?>\" target=\"_blank\" title=\"Download newest version\">Download newest version\u003C\u002Fa>\n\n5. Envato Item Id of Purchased Plugin\n----------------------------------------------------------\nSearched for Name: \u003C?=$targetPluginName;?>\nSearched for Author: \u003C?=$targetPluginAuthor;?>\nFound Plugin Id: \u003C?=$foundPluginId;?>\n\n6. Envato Item Id of Purchased Theme\n----------------------------------------------------------\nSearched for Name: \u003C?=$targetThemeName;?>\nSearched for Author: \u003C?=$targetThemeAuthor;?>\nFound Theme Id: \u003C?=$foundThemeId;?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>And the example input of the output above, it this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$objToolkit = new EnvatoAPIManager($toolkitSettings);\n\n\u002F\u002F Details about you\n$purchasedPlugins = $objToolkit->getPurchasedPluginsWithDetails();\n$plugins = array();\nforeach($purchasedPlugins AS $pluginId => $purchasedPlugin)\n{\n    $purchasedPlugin['licenses'] = $objToolkit->getLicensesByItemId($pluginId);\n    $plugins[$pluginId] = $purchasedPlugin;\n}\n\n$purchasedThemes = $objToolkit->getPurchasedThemesWithDetails();\n$themes = array();\nforeach($purchasedThemes AS $themeId => $purchasedTheme)\n{\n    $purchasedTheme['licenses'] = $objToolkit->getLicensesByItemId($themeId);\n    $themes[$themeId] = $purchasedTheme;\n}\n\n$authorDetails = $objToolkit->getUserDetails($sanitizedEnvatoUsername);\n\u002F\u002F View vars\n$view->plugins = $plugins;\n$view->themes = $themes;\nif($authorDetails != FALSE)\n{\n    $view->authorCity = $authorDetails['city'];\n    $view->authorCountry = $authorDetails['country'];\n    $view->authorSales = $authorDetails['sales'];\n    $view->authorFollowers = $authorDetails['followers'];\n} else\n{\n    $view->authorCity = '';\n    $view->authorCountry = '';\n    $view->authorSales = 0;\n    $view->authorFollowers = 0;\n}\n\n\u002F\u002F 1. Details About Target Purchase Code\n$targetLicenseDetails = $objToolkit->getLicenseDetails($sanitizedTargetPurchaseCode);\n\u002F\u002F View vars\n$view->targetPurchaseCode = esc_html($sanitizedTargetPurchaseCode); \u002F\u002F Ready for print\n$view->isValidTargetLicense = $objToolkit->isValidLicense($sanitizedTargetPurchaseCode);\n$view->targetLicenseBuyer = $targetLicenseDetails['buyer_username'];\n$view->targetLicense = $targetLicenseDetails['license'];\n$view->targetLicensePurchasedAt = $targetLicenseDetails['license_purchase_date'].' '.$targetLicenseDetails['license_purchase_time'];\n$view->targetLicenseSupportedUntil = $targetLicenseDetails['support_expiration_date'].' '.$targetLicenseDetails['support_expiration_time'];\n$view->targetLicenseSupportActive = $targetLicenseDetails['support_active'];\n\n\u002F\u002F 2. Details About Target Envato User\n$targetUserDetails = $objToolkit->getUserDetails($sanitizedTargetUsername);\n\u002F\u002F View vars\n$view->targetUsername = esc_html($sanitizedTargetUsername); \u002F\u002F Ready for print\n$view->targetUserCity = $targetUserDetails['city'];\n$view->targetUserCountry = $targetUserDetails['country'];\n$view->targetUserSales = $targetUserDetails['sales'];\n$view->targetUserFollowers = $targetUserDetails['followers'];\n\n\u002F\u002F 3. Status of Purchased Plugin ID\n$availablePluginVersion = $objToolkit->getAvailableVersion($sanitizedTargetPluginId);\n$pluginUpdateAvailable = version_compare($sanitizedInstalledPluginVersion, $availablePluginVersion, '\u003C');\n\u002F\u002F View vars\n$view->targetPluginId = intval($sanitizedTargetPluginId); \u002F\u002F Ready for print\n$view->installedPluginVersion = esc_html($sanitizedInstalledPluginVersion); \u002F\u002F Ready for print\n$view->nameOfTargetPluginId = esc_html($objToolkit->getItemName($sanitizedTargetPluginId));\n$view->availablePluginVersion = $availablePluginVersion;\n$view->pluginUpdateAvailable = $pluginUpdateAvailable;\n$view->pluginUpdateDownloadUrl = $pluginUpdateAvailable ? $objToolkit->getDownloadUrlIfPurchased($sanitizedTargetPluginId) : '';\n\n\u002F\u002F 4. Status of Purchased Theme ID\n$availableThemeVersion = $objToolkit->getAvailableVersion($sanitizedTargetThemeId);\n$themeUpdateAvailable = version_compare($sanitizedInstalledThemeVersion, $availableThemeVersion, '\u003C');\n\u002F\u002F View vars\n$view->targetThemeId = intval($sanitizedTargetThemeId); \u002F\u002F Ready for print\n$view->installedThemeVersion = esc_html($sanitizedInstalledThemeVersion); \u002F\u002F Ready for print\n$view->nameOfTargetThemeId = esc_html($objToolkit->getItemName($sanitizedTargetThemeId));\n$view->availableThemeVersion = $availableThemeVersion;\n$view->themeUpdateAvailable = $themeUpdateAvailable;\n$view->themeUpdateDownloadUrl = $themeUpdateAvailable ? $objToolkit->getDownloadUrlIfPurchased($sanitizedTargetThemeId) : '';\n\n\u002F\u002F 5. Envato Item Id of Purchased Plugin\n$view->targetPluginName = esc_html($sanitizedTargetPluginName); \u002F\u002F Ready for print\n$view->targetPluginAuthor = esc_html($sanitizedTargetPluginAuthor); \u002F\u002F Ready for print\n$view->foundPluginId = $objToolkit->getItemIdByPluginAndAuthorIfPurchased($sanitizedTargetPluginName, $sanitizedTargetPluginAuthor);\n\n\u002F\u002F 6. Envato Item Id of Purchased Theme\n$view->targetThemeName = esc_html($sanitizedTargetThemeName); \u002F\u002F Ready for print\n$view->targetThemeAuthor = esc_html($sanitizedTargetThemeAuthor); \u002F\u002F Ready for print\n$view->foundThemeId = $objToolkit->getItemIdByThemeAndAuthorIfPurchased($sanitizedTargetThemeName, $sanitizedTargetThemeAuthor);\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Validate purchase code, check for item update & support expiration, download newest version, lookup for user details, search for Envato item id & more",6000,126000,56,"2021-04-26T18:00:00.000Z","5.7.15","4.6","5.4",[80,81,82,83,84],"api","envato","license","purchase-validator","update-checker","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Ftoolkit-for-envato\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ftoolkit-for-envato.zip",{"slug":88,"name":89,"version":90,"author":91,"author_profile":92,"description":93,"short_description":94,"active_installs":95,"downloaded":96,"rating":97,"num_ratings":98,"last_updated":99,"tested_up_to":54,"requires_at_least":55,"requires_php":100,"tags":101,"homepage":107,"download_link":108,"security_score":109,"vuln_count":110,"unpatched_count":28,"last_vuln_date":111,"fetched_at":30},"wp24-domain-check","WP24 Domain Check","1.12.0","WP24","https:\u002F\u002Fprofiles.wordpress.org\u002Fwp24dotorg\u002F","\u003Cp>WP24 Domain Check allows users to check domains if they are free for registration. The responsive form could be easily intregrated via shortcode or widget. Labels and colors are customizeable through the settings page.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Features\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Easy integration via shortcode or widget\u003C\u002Fli>\n\u003Cli>Ajax based search (no page reload required)\u003C\u002Fli>\n\u003Cli>Define a list of testable TLDs\u003C\u002Fli>\n\u003Cli>Drop-down list (select the TLD from predefinded list)\u003C\u002Fli>\n\u003Cli>Free text input (type TLD into domain name field)\u003C\u002Fli>\n\u003Cli>Over 1,600 supported TLDs\u003C\u002Fli>\n\u003Cli>Add custom whois servers\u003C\u002Fli>\n\u003Cli>Possibility of checking every TLD\u003C\u002Fli>\n\u003Cli>Internationalized domain name (IDN) support\u003C\u002Fli>\n\u003Cli>Check all TLDs simultaneously (asynchronous)\u003C\u002Fli>\n\u003Cli>Show detailed whois information (if domain is registered)\u003C\u002Fli>\n\u003Cli>Provide price and purchase link for each TLD\u003C\u002Fli>\n\u003Cli>WooCommerce integration\u003C\u002Fli>\n\u003Cli>Responsive design\u003C\u002Fli>\n\u003Cli>Bot protection with Google reCAPTCHA or Cloudflare Turnstile\u003C\u002Fli>\n\u003Cli>Customization of labels and colors\u003C\u002Fli>\n\u003Cli>WPML and Polylang compatible\u003C\u002Fli>\n\u003C\u002Ful>\n","Check (whois) domain names for availability. Easy integration via shortcode or widget.",5000,118926,86,32,"2026-01-11T10:24:00.000Z","7.0.0",[102,103,104,105,106],"domain","domain-check","domain-checker","domaincheck","whois","https:\u002F\u002Fwp24.org\u002Fplugins\u002Fdomain-check","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp24-domain-check.1.12.0.zip",99,2,"2024-12-26 00:00:00",{"slug":113,"name":114,"version":115,"author":116,"author_profile":117,"description":118,"short_description":119,"active_installs":120,"downloaded":121,"rating":122,"num_ratings":123,"last_updated":124,"tested_up_to":125,"requires_at_least":126,"requires_php":18,"tags":127,"homepage":132,"download_link":133,"security_score":134,"vuln_count":135,"unpatched_count":28,"last_vuln_date":136,"fetched_at":30},"link-checker","Link Checker Professional","1.18.7","Marco Beierer","https:\u002F\u002Fprofiles.wordpress.org\u002Fmbsec\u002F","\u003Cp>The \u003Ca href=\"https:\u002F\u002Fwww.marcobeierer.com\u002Fwordpress-plugins\u002Flink-checker\" rel=\"nofollow ugc\">Link Checker\u003C\u002Fa> for WordPress uses an external service to crawl your website and find broken links and images on your website.\u003C\u002Fp>\n\u003Cp>In contrast to search engine tools like the Google Search Console, which only show if a URL on your website is not reachable, it does not matter for the Link Checker if the links leads to an internal or external URL. The Link Checker will find all dead links.\u003C\u002Fp>\n\u003Cp>The Link Checker works for every plugin out of the box. The computation costs for your website is also very low because the crawler does the heavy work and just acts like a normal visitor, who visits all pages of you website once.\u003C\u002Fp>\n\u003Ch4>Out of service\u003C\u002Fh4>\n\u003Cp>It’s no longer possible to purchase tokens for the Link Checker as of mid-January 2023.\u003C\u002Fp>\n\u003Cp>The service is still available for all users that have already purchased a token and will be shutdown when the last issued token expires mid-January 2024.\u003C\u002Fp>\n\u003Ch4>Paid plugin\u003C\u002Fh4>\n\u003Cp>Please note that the Link Checker requires a paid token to operate. The free version is no longer offered.\u003C\u002Fp>\n\u003Ch4>Videos\u003C\u002Fh4>\n\u003Cp>You can find videos about the Link Checker on the \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=8rUFDp09tjs&list=PL5VYcNma6nfxIrlbpz0f1avXT_JIrUZA1\" rel=\"nofollow ugc\">Link Checker for WordPress playlist on YouTube\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002F8rUFDp09tjs?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent&listType=playlist&list=PL5VYcNma6nfxIrlbpz0f1avXT_JIrUZA1\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Simple setup\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Works out of the box\u003C\u002Fstrong> with all WordPress plugins.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Low computation costs\u003C\u002Fstrong> for your webserver.\u003C\u002Fli>\n\u003Cli>Lists all broken links and redirects on your website.\u003C\u002Fli>\n\u003Cli>Support for Polylang (probably also WPML) sites.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Technical Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Respects your robots.txt file (also the crawl-delay directive).\n\u003Cul>\n\u003Cli>You can use the user-agents MB-LinkChecker to control the crawler.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Additional Features of the Professional Version\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Check if embedded internal and external \u003Cstrong>images\u003C\u002Fstrong> are broken.\u003C\u002Fli>\n\u003Cli>Check if embedded \u003Cstrong>YouTube videos\u003C\u002Fstrong> are broken.\u003C\u002Fli>\n\u003Cli>Scheduler to \u003Cstrong>automatically check a website\u003C\u002Fstrong> once a day and get a summary report by email.\u003C\u002Fli>\n\u003Cli>The result can be exported as CSV file.\u003C\u002Fli>\n\u003Cli>Form login support to check protected pages like membership areas.\u003C\u002Fli>\n\u003Cli>The result is saved on the Link Checker server so that it can be fetched multiple times without requiring a recheck. For example from different users or with different browsers.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Upcoming Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Support for checking the availability of videos, CSS files and JS files.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Technical Requirements\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Works with \u003Cstrong>PHP 5.6 and 7\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Is the service free of charge?\u003C\u002Fh4>\n\u003Cp>The Link Checker Professional is a paid plugin. A free version was offered for many years, but since August 2022 only a paid version is available.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.marcobeierer.com\u002Fwordpress-plugins\u002Flink-checker-professional\" rel=\"nofollow ugc\">Link Checker Professional\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Use of an External Server\u003C\u002Fh4>\n\u003Cp>The Link Checker uses an external server, operated by the developer of the plugin, to crawl your website and detect broken links. This means, that there is some communication between your website and the server. The only data that is communicated to the external server by your website is the URL of your website and the fact that you are using WordPress. The server than crawlers your website (as a normal visitor does) and answers with a list of the found broken links.\u003C\u002Fp>\n","An easy to use link checker for WordPress to detect broken links and images on your website.",4000,207049,64,30,"2023-01-14T03:03:00.000Z","6.0.11","4.5",[128,113,129,130,131],"broken-link-checker","links","maintenance","seo","https:\u002F\u002Fwww.marcobeierer.com\u002Fwordpress-plugins\u002Flink-checker","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flink-checker.1.18.7.zip",84,1,"2019-03-22 00:00:00",{"slug":138,"name":139,"version":140,"author":141,"author_profile":142,"description":143,"short_description":144,"active_installs":145,"downloaded":146,"rating":11,"num_ratings":110,"last_updated":147,"tested_up_to":54,"requires_at_least":148,"requires_php":149,"tags":150,"homepage":155,"download_link":156,"security_score":11,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"seo-repair-kit","SEO Repair Kit – AI Chatbot, Schema Manager, SEO Content Monitoring, GSC Integration, Keyword & Rank Tracking","2.1.4","TorontoDigits","https:\u002F\u002Fprofiles.wordpress.org\u002Ftorontodigits\u002F","\u003Cp>\u003Cstrong>SEO Repair Kit v2.1.4\u003C\u002Fstrong> by \u003Ca href=\"https:\u002F\u002Fwww.torontodigits.com\" rel=\"nofollow ugc\">TorontoDigits\u003C\u002Fa> is an advanced WordPress SEO plugin designed to automate and simplify technical SEO. It combines \u003Cstrong>AI-powered assistance, smart meta management, schema generation, keyword tracking, and site monitoring tools\u003C\u002Fstrong> to help you identify issues, fix SEO problems, and improve your website’s search engine visibility.\u003C\u002Fp>\n\u003Ch4>Key Features\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>🧠 AI Chatbot (Pro Feature)\u003C\u002Fstrong>\u003Cbr \u002F>\nA built-in AI assistant trained to help users improve SEO performance, fix content issues, and receive real-time suggestions — all directly within the WordPress dashboard.\u003Cbr \u002F>\n* Context-aware SEO optimization guidance\u003Cbr \u002F>\n* Automated troubleshooting support\u003Cbr \u002F>\n* Real-time Q&A for schema, redirection, and keyword tracking\u003C\u002Fp>\n\u003Cp>\u003Cstrong>🧩 Schema Manager (Pro Feature)\u003C\u002Fstrong>\u003Cbr \u002F>\nA complete schema management that enables users to automatically generate, validate, and manage schema markups for their content. Supports 15+ schema types including Article, Blog Posting, News Article, FAQ, How To, Video Object, Product, Job Posting, Event, Course, Review, Recipe, Local Business, Organization, Corporation, Reservation, Medical Condition, Medical Web Page, Aggregate Rating, and Website.\u003C\u002Fp>\n\u003Cp>The Schema Manager allows users to visually configure, preview, and deploy JSON-LD markups across any post type, ensuring SEO compliance and rich results visibility on search engines.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>🔗 Broken Link Scanner\u003C\u002Fstrong>\u003Cbr \u002F>\nAdvanced link scanning functionality that detects broken internal and external links across your website. Features include:\u003Cbr \u002F>\n* Scans all post types for broken links\u003Cbr \u002F>\n* Real-time HTTP status code checking\u003Cbr \u002F>\n* CSV export for broken links\u003Cbr \u002F>\n* Direct edit and redirection options\u003Cbr \u002F>\n* Scheduled automatic scanning (weekly\u002Fmonthly)\u003Cbr \u002F>\n* Progress tracking during scans\u003C\u002Fp>\n\u003Cp>\u003Cstrong>📊 KeyTrack – Keyword Performance Tracking\u003C\u002Fstrong>\u003Cbr \u002F>\nComprehensive keyword tracking system integrated with Google Search Console via Google Site Kit plugin:\u003Cbr \u002F>\n* Track keyword positions, impressions, CTR, and clicks\u003Cbr \u002F>\n* Visual performance insights with interactive charts\u003Cbr \u002F>\n* Overview, Pages, Queries, and Settings tabs\u003Cbr \u002F>\n* Customizable date ranges for performance analysis\u003Cbr \u002F>\n* Threshold settings for custom performance monitoring\u003Cbr \u002F>\n* Email reports based on user preferences\u003Cbr \u002F>\n* Advanced insights for all pages and queries\u003C\u002Fp>\n\u003Cp>\u003Cstrong>🖼️ Alt Text Manager\u003C\u002Fstrong>\u003Cbr \u002F>\nEfficient management of image alt text for improved SEO and accessibility:\u003Cbr \u002F>\n* Scans all media images for missing alt text\u003Cbr \u002F>\n* Bulk update functionality for multiple images\u003Cbr \u002F>\n* Dedicated page for alt text repair\u003Cbr \u002F>\n* Add or update alt text for individual images\u003Cbr \u002F>\n* Automatic detection of images without alt attributes\u003C\u002Fp>\n\u003Cp>\u003Cstrong>🔄 Redirection Manager\u003C\u002Fstrong>\u003Cbr \u002F>\nProfessional URL redirection management system:\u003Cbr \u002F>\n* Create 301 and 302 redirects\u003Cbr \u002F>\n* Track redirect hits and performance\u003Cbr \u002F>\n* Active\u002Finactive redirect status management\u003Cbr \u002F>\n* Most hit redirect analytics\u003Cbr \u002F>\n* Regex pattern support for advanced redirects\u003Cbr \u002F>\n* Position-based redirect ordering\u003C\u002Fp>\n\u003Cp>\u003Cstrong>🚫 404 Error Monitor\u003C\u002Fstrong>\u003Cbr \u002F>\nAutomatic tracking and logging of 404 errors:\u003Cbr \u002F>\n* Real-time 404 error detection\u003Cbr \u002F>\n* Detailed logging with referrer, user agent, and IP address\u003Cbr \u002F>\n* 404 error analytics and reporting\u003Cbr \u002F>\n* Easy redirect creation from 404 logs\u003Cbr \u002F>\n* Domain-based error tracking\u003C\u002Fp>\n\u003Cp>\u003Cstrong>📄 Meta Manager\u003C\u002Fstrong>\u003Cbr \u002F>\nPowerful on-page SEO meta controls for every major content surface in WordPress:\u003Cbr \u002F>\n* Global Settings for title separator, homepage meta, templates, and organization data\u003Cbr \u002F>\n* Content Types controls for post type-level title, description, robots, and advanced options\u003Cbr \u002F>\n* Taxonomies controls for category\u002Ftag\u002Fcustom taxonomy SEO templates and robots directives\u003Cbr \u002F>\n* Archives controls for author\u002Fdate\u002Fsearch archive metadata and robots behavior\u003Cbr \u002F>\n* Advanced robots controls with preview for noindex\u002Fnofollow\u002Fnoarchive, max-snippet, max-image-preview, and max-video-preview directives\u003Cbr \u002F>\n* Dynamic SEO variables support including \u003Ccode>%title%\u003C\u002Fcode>, \u003Ccode>%excerpt%\u003C\u002Fcode>, \u003Ccode>%site_title%\u003C\u002Fcode>, \u003Ccode>%sep%\u003C\u002Fcode>, \u003Ccode>%date%\u003C\u002Fcode>, \u003Ccode>%day%\u003C\u002Fcode>, \u003Ccode>%month%\u003C\u002Fcode>, and \u003Ccode>%year%\u003C\u002Fcode>\u003Cbr \u002F>\n* Per-post SEO meta fields (title, description, robots, canonical) with safe fallback behavior\u003Cbr \u002F>\n* Built-in search result preview for SEO titles and descriptions\u003Cbr \u002F>\n* Fully integrated with Gutenberg Block Editor, and Elementor page builder for easy metadata management while editing content\u003C\u002Fp>\n\u003Cp>\u003Cstrong>🤖 Bot Manager\u003C\u002Fstrong>\u003Cbr \u002F>\nComprehensive control over search engine and AI crawler access:\u003Cbr \u002F>\n* Manage robots.txt file with visual editor\u003Cbr \u002F>\n* Generate and manage llms.txt file for AI model discovery\u003Cbr \u002F>\n* Control which AI bots can access your content\u003Cbr \u002F>\n* Block or allow specific AI crawlers (ChatGPT, Claude, Google Bard, etc.)\u003Cbr \u002F>\n* Server-level bot access control with 403 responses\u003Cbr \u002F>\n* Automatic robots.txt rules for blocked bots\u003Cbr \u002F>\n* LLMs.txt generator with post type and taxonomy selection\u003Cbr \u002F>\n* Real-time validation and preview\u003Cbr \u002F>\n* Enhanced robots.txt with security and SEO best practices\u003C\u002Fp>\n\u003Cp>\u003Cstrong>📧 Weekly SEO Summary Email\u003C\u002Fstrong>\u003Cbr \u002F>\nAutomated weekly email reports with comprehensive SEO insights:\u003Cbr \u002F>\n* Search performance metrics (KeyTrack data)\u003Cbr \u002F>\n* Broken links analysis and health scores\u003Cbr \u002F>\n* Image alt text optimization status\u003Cbr \u002F>\n* Redirection statistics and analytics\u003Cbr \u002F>\n* Pro plan status and upgrade reminders\u003Cbr \u002F>\n* Beautiful HTML email templates\u003C\u002Fp>\n\u003Cp>\u003Cstrong>⚙️ Settings & Configuration\u003C\u002Fstrong>\u003Cbr \u002F>\nComprehensive settings management:\u003Cbr \u002F>\n* Post type selection for scanning\u003Cbr \u002F>\n* 404 monitoring enable\u002Fdisable toggle\u003Cbr \u002F>\n* Weekly report email preferences\u003Cbr \u002F>\n* Last report status tracking\u003Cbr \u002F>\n* Customizable plugin behavior\u003C\u002Fp>\n\u003Cp>\u003Cstrong>📱 Interactive Dashboard\u003C\u002Fstrong>\u003Cbr \u002F>\nCentralized dashboard for all SEO operations:\u003Cbr \u002F>\n* Site SEO analysis with issue detection\u003Cbr \u002F>\n* Quick access to all plugin features\u003Cbr \u002F>\n* Real-time status widgets\u003Cbr \u002F>\n* SEO health score calculations\u003Cbr \u002F>\n* Issue severity categorization (critical, warning, suggestion)\u003C\u002Fp>\n\u003Cp>\u003Cstrong>🎯 Onboarding Flow\u003C\u002Fstrong>\u003Cbr \u002F>\nUser-friendly guided setup wizard:\u003Cbr \u002F>\n* Multi-step configuration process\u003Cbr \u002F>\n* Post type selection\u003Cbr \u002F>\n* Feature enablement (KeyTrack, Schema, Notifications)\u003Cbr \u002F>\n* Link scanning schedule setup\u003Cbr \u002F>\n* Email notification preferences\u003Cbr \u002F>\n* One-time setup completion\u003C\u002Fp>\n\u003Ch4>Additional Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>License management system for Pro features\u003C\u002Fli>\n\u003Cli>Google Search Console integration via Site Kit\u003C\u002Fli>\n\u003Cli>Database migration system for version updates\u003C\u002Fli>\n\u003Cli>Comprehensive error logging and debugging\u003C\u002Fli>\n\u003Cli>Admin notices and status tracking\u003C\u002Fli>\n\u003Cli>REST API endpoints for subscription management\u003C\u002Fli>\n\u003Cli>Responsive and modern UI design\u003C\u002Fli>\n\u003Cli>Full WordPress coding standards compliance\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Configurations & Use\u003C\u002Fh3>\n\u003Ch4>Initial Setup & Onboarding\u003C\u002Fh4>\n\u003Col>\n\u003Cli>After activating the plugin, you’ll be guided through an interactive onboarding process.\u003C\u002Fli>\n\u003Cli>During onboarding, you can configure:\n\u003Cul>\n\u003Cli>Post types to scan for broken links\u003C\u002Fli>\n\u003Cli>Enable\u002Fdisable KeyTrack feature\u003C\u002Fli>\n\u003Cli>Set up link scanning schedule (manual, weekly, or monthly)\u003C\u002Fli>\n\u003Cli>Select default schema types to use\u003C\u002Fli>\n\u003Cli>Configure notification preferences (weekly reports, KeyTrack alerts, broken links notifications)\u003C\u002Fli>\n\u003Cli>Enable alt text scanning\u003C\u002Fli>\n\u003Cli>Enable redirection management\u003C\u002Fli>\n\u003Cli>Set notification email address\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Complete the onboarding to save your preferences, or skip and configure later in Settings.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Dashboard Overview\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Navigate to “SEO Repair Kit” in your WordPress admin menu to access the main dashboard.\u003C\u002Fli>\n\u003Cli>The dashboard provides:\n\u003Cul>\n\u003Cli>Site SEO Analysis with issue detection (critical, warning, suggestion)\u003C\u002Fli>\n\u003Cli>Quick access widgets for all major features\u003C\u002Fli>\n\u003Cli>Real-time status updates\u003C\u002Fli>\n\u003Cli>SEO health score calculations\u003C\u002Fli>\n\u003Cli>Direct links to fix identified issues\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Use the “Re-check Status” button to refresh the analysis.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Broken Link Scanner\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Go to “SEO Repair Kit” > “Link Scanner” in the admin menu.\u003C\u002Fli>\n\u003Cli>Select a post type from the dropdown (configured in Settings).\u003C\u002Fli>\n\u003Cli>Click “Scan Links” to start the scanning process.\u003C\u002Fli>\n\u003Cli>Monitor the progress bar and real-time statistics during scanning.\u003C\u002Fli>\n\u003Cli>Review the results table showing:\n\u003Cul>\n\u003Cli>Post ID, title, and type\u003C\u002Fli>\n\u003Cli>Link URL and HTTP status code\u003C\u002Fli>\n\u003Cli>Link text context\u003C\u002Fli>\n\u003Cli>Direct edit and redirect options\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Export broken links to CSV for external analysis.\u003C\u002Fli>\n\u003Cli>Create redirects directly from the scan results.\u003C\u002Fli>\n\u003Cli>Schedule automatic scans in Settings (weekly or monthly).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Alt Text Manager\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Navigate to “SEO Repair Kit” > “Image Alt Missing” in the admin menu.\u003C\u002Fli>\n\u003Cli>View all images missing alt text with their details.\u003C\u002Fli>\n\u003Cli>Update alt text individually:\n\u003Cul>\n\u003Cli>Click on an image to edit\u003C\u002Fli>\n\u003Cli>Enter descriptive alt text\u003C\u002Fli>\n\u003Cli>Save changes\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Use bulk update feature to update multiple images at once.\u003C\u002Fli>\n\u003Cli>Filter and search images by post type or status.\u003C\u002Fli>\n\u003Cli>Monitor alt text optimization progress and statistics.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Redirection Manager\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Go to “SEO Repair Kit” > “Redirection” in the admin menu.\u003C\u002Fli>\n\u003Cli>Create a new redirect:\n\u003Cul>\n\u003Cli>Enter source URL (old URL)\u003C\u002Fli>\n\u003Cli>Enter target URL (new URL)\u003C\u002Fli>\n\u003Cli>Select redirect type (301 Permanent or 302 Temporary)\u003C\u002Fli>\n\u003Cli>Optionally enable regex pattern matching\u003C\u002Fli>\n\u003Cli>Set redirect status (active\u002Finactive)\u003C\u002Fli>\n\u003Cli>Save the redirect\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>View all redirects in a comprehensive table showing:\n\u003Cul>\n\u003Cli>Source and target URLs\u003C\u002Fli>\n\u003Cli>Redirect type and status\u003C\u002Fli>\n\u003Cli>Hit count and last hit timestamp\u003C\u002Fli>\n\u003Cli>Position for ordering\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Edit or delete existing redirects.\u003C\u002Fli>\n\u003Cli>Monitor most active redirects with hit analytics.\u003C\u002Fli>\n\u003Cli>Use the redirect logs to track redirect performance.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>404 Error Monitor\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Navigate to “SEO Repair Kit” > “404 Manager” (or access via Link Scanner).\u003C\u002Fli>\n\u003Cli>Enable 404 monitoring in Settings if not already enabled.\u003C\u002Fli>\n\u003Cli>View all 404 errors with details:\n\u003Cul>\n\u003Cli>Requested URL\u003C\u002Fli>\n\u003Cli>Referrer information\u003C\u002Fli>\n\u003Cli>User agent and IP address\u003C\u002Fli>\n\u003Cli>Access count and timestamps\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Create redirects directly from 404 logs:\n\u003Cul>\n\u003Cli>Select a 404 error\u003C\u002Fli>\n\u003Cli>Choose target URL\u003C\u002Fli>\n\u003Cli>Create redirect with one click\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Filter 404 errors by domain, date, or count.\u003C\u002Fli>\n\u003Cli>Monitor 404 trends and patterns.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Bot Manager\u003C\u002Fh4>\n\u003Col>\n\u003Cli>\n\u003Cp>Navigate to “SEO Repair Kit” > “Bot Manager” in the admin menu.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>LLMs.txt Management\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Generate an llms.txt file for AI model discovery\u003C\u002Fli>\n\u003Cli>Select post types and taxonomies to include\u003C\u002Fli>\n\u003Cli>Allow or block specific AI bots\u003C\u002Fli>\n\u003Cli>Preview and edit the generated file\u003C\u002Fli>\n\u003Cli>Your file will be available at: yoursite.com\u002Fllms.txt\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Robots.txt Management\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Edit robots.txt using the visual editor\u003C\u002Fli>\n\u003Cli>Validate syntax and preview changes\u003C\u002Fli>\n\u003Cli>Apply enhanced SEO and security rules\u003C\u002Fli>\n\u003Cli>Reset to WordPress recommended defaults\u003C\u002Fli>\n\u003Cli>Available at: yoursite.com\u002Frobots.txt\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>AI Bot Access Control\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Allow or block AI crawlers such as GPTBot, Claude, Gemini, Perplexity, Bing Chat, and others\u003C\u002Fli>\n\u003Cli>Blocked bots receive a 403 response\u003C\u002Fli>\n\u003Cli>Blocking rules are automatically added to robots.txt\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Additional Features\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Real-time robots.txt validation\u003C\u002Fli>\n\u003Cli>Automatic sitemap detection\u003C\u002Fli>\n\u003Cli>Built-in security rules\u003C\u002Fli>\n\u003Cli>Easy reset to default configuration\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>KeyTrack – Keyword Performance Tracking\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Install and activate Google Site Kit plugin (required for KeyTrack).\u003C\u002Fli>\n\u003Cli>Connect Google Site Kit to your Google Search Console account.\u003C\u002Fli>\n\u003Cli>Go to “SEO Repair Kit” > “KeyTrack” in the admin menu.\u003C\u002Fli>\n\u003Cli>Create a KeyTrack configuration:\n\u003Cul>\n\u003Cli>Enter a name for your KeyTrack\u003C\u002Fli>\n\u003Cli>Select keywords to track\u003C\u002Fli>\n\u003Cli>Choose date range for analysis\u003C\u002Fli>\n\u003Cli>Configure threshold settings (optional)\u003C\u002Fli>\n\u003Cli>Save configuration\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>View performance data in multiple tabs:\n\u003Cul>\n\u003Cli>\u003Cstrong>Overview\u003C\u002Fstrong>: Summary metrics (clicks, impressions, CTR, average position)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Pages\u003C\u002Fstrong>: Top performing pages with detailed metrics\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Queries\u003C\u002Fstrong>: Top search queries with performance data\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Settings\u003C\u002Fstrong>: Manage KeyTrack configurations\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Set up email reports:\n\u003Cul>\n\u003Cli>Configure threshold alerts\u003C\u002Fli>\n\u003Cli>Set report frequency\u003C\u002Fli>\n\u003Cli>Add recipient email addresses\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Analyze trends with interactive line charts.\u003C\u002Fli>\n\u003Cli>Export data for external analysis.\u003C\u002Fli>\n\u003Cli>Watch the demo video: \u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FuiWgcazUDcc?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Schema Manager (Pro Feature)\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Ensure you have an active Pro license (required for Schema Manager).\u003C\u002Fli>\n\u003Cli>Navigate to “SEO Repair Kit” > “Schema Manager” in the admin menu.\u003C\u002Fli>\n\u003Cli>Select a schema type from the available options (15+ types supported).\u003C\u002Fli>\n\u003Cli>Configure schema assignment:\n\u003Cul>\n\u003Cli>Choose post types to apply the schema\u003C\u002Fli>\n\u003Cli>Map content fields to schema properties\u003C\u002Fli>\n\u003Cli>Enable\u002Fdisable specific schema fields\u003C\u002Fli>\n\u003Cli>Preview the JSON-LD output\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Save the schema configuration.\u003C\u002Fli>\n\u003Cli>The schema will automatically be injected into your pages as JSON-LD markup.\u003C\u002Fli>\n\u003Cli>Validate schema using Google’s Rich Results Test tool.\u003C\u002Fli>\n\u003Cli>Manage multiple schema types for different content types.\u003C\u002Fli>\n\u003Cli>Use the visual field mapper to easily configure complex schemas.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Meta Manager\u003C\u002Fh4>\n\u003Col>\n\u003Cli>\n\u003Cp>Navigate to “SEO Repair Kit” > “Meta Manager”.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Configure SEO using these tabs:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Global Meta\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Set title separator, homepage SEO title & description\u003C\u002Fli>\n\u003Cli>Configure default SEO templates and knowledge graph\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Content Types\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Define title and description templates for posts, pages, and CPTs\u003C\u002Fli>\n\u003Cli>Configure robots directives\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Taxonomies\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Set SEO templates for categories, tags, and custom taxonomies\u003C\u002Fli>\n\u003Cli>Control indexing behavior\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Archives\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Manage SEO settings for author, date, and search archives\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Advanced Settings\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Configure robots directives (index\u002Fnoindex, follow\u002Fnofollow, preview limits)\u003C\u002Fli>\n\u003Cli>Default robots: \u003Ccode>index, follow, max-image-preview:large\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Disable default to manually select directives\u003C\u002Fli>\n\u003Cli>Respects WordPress \u003Cstrong>Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Reading \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Discourage search engines\u003C\u002Fstrong> option\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Save settings to apply SEO metadata automatically.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Override metadata per post\u002Fpage using the \u003Cstrong>SEO Repair Kit Meta Manager\u003C\u002Fstrong> box.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Editor Support\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Works with Gutenberg and Elementor editors.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Per-page options include:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Custom SEO title\u003C\u002Fli>\n\u003Cli>Meta description\u003C\u002Fli>\n\u003Cli>Robots directives\u003C\u002Fli>\n\u003Cli>Canonical URL\u003C\u002Fli>\n\u003Cli>Search result preview\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>If custom metadata is not defined, Meta Manager automatically applies the global template settings as a fallback.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>AI Chatbot (Pro Feature)\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Ensure you have an active Pro license.\u003C\u002Fli>\n\u003Cli>Navigate to “SEO Repair Kit” > “AI Chatbot”.\u003C\u002Fli>\n\u003Cli>Ask the AI assistant for SEO guidance, troubleshooting, and optimization tips.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>The chatbot can help with:\u003Cbr \u002F>\n* Meta Manager configuration and SEO metadata guidance\u003Cbr \u002F>\n* Schema Manager setup\u003Cbr \u002F>\n* Redirection and broken link fixes\u003Cbr \u002F>\n* KeyTrack keyword tracking insights\u003Cbr \u002F>\n* General SEO best practices\u003C\u002Fp>\n\u003Cp>It provides context-aware responses and real-time suggestions directly inside the WordPress dashboard.\u003C\u002Fp>\n\u003Ch4>Settings Configuration\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Go to “SEO Repair Kit” > “Settings” in the admin menu.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Post Types Settings\u003C\u002Fstrong>:\n\u003Cul>\n\u003Cli>Select which post types to scan for broken links\u003C\u002Fli>\n\u003Cli>Choose from all public post types\u003C\u002Fli>\n\u003Cli>Save your selection\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>404 Monitoring Settings\u003C\u002Fstrong>:\n\u003Cul>\n\u003Cli>Enable or disable automatic 404 error tracking\u003C\u002Fli>\n\u003Cli>404 errors will be logged when enabled\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Weekly Report Email Settings\u003C\u002Fstrong>:\n\u003Cul>\n\u003Cli>Enable or disable weekly SEO summary emails\u003C\u002Fli>\n\u003Cli>View last report status and timestamp\u003C\u002Fli>\n\u003Cli>Reports are sent to your admin email address\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Save all settings to apply changes.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Weekly SEO Summary Email\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Enable weekly reports in Settings (enabled by default).\u003C\u002Fli>\n\u003Cli>Reports are automatically sent every week to your admin email.\u003C\u002Fli>\n\u003Cli>Each report includes:\n\u003Cul>\n\u003Cli>Search performance metrics from KeyTrack\u003C\u002Fli>\n\u003Cli>Broken links analysis and health scores\u003C\u002Fli>\n\u003Cli>Image alt text optimization status\u003C\u002Fli>\n\u003Cli>Redirection statistics and analytics\u003C\u002Fli>\n\u003Cli>Pro plan status and upgrade information\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Reports are sent in beautiful HTML format with:\n\u003Cul>\n\u003Cli>Visual charts and metrics\u003C\u002Fli>\n\u003Cli>Actionable insights\u003C\u002Fli>\n\u003Cli>Direct links to fix issues\u003C\u002Fli>\n\u003Cli>Dashboard access links\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>View the last report status in Settings to verify delivery.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Advanced Features\u003C\u002Fh4>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>Analytics & Reporting\u003C\u002Fstrong>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Track redirect hit counts\u003C\u002Fli>\n\u003Cli>Monitor 404 error patterns\u003C\u002Fli>\n\u003Cli>Analyze KeyTrack performance trends\u003C\u002Fli>\n\u003Cli>View comprehensive SEO health scores\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Bot Management\u003C\u002Fstrong>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Control AI crawler access to your content\u003C\u002Fli>\n\u003Cli>Generate llms.txt files for AI model discovery\u003C\u002Fli>\n\u003Cli>Manage robots.txt with visual editor\u003C\u002Fli>\n\u003Cli>Block or allow specific AI bots\u003C\u002Fli>\n\u003Cli>Server-level access control\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Integration\u003C\u002Fstrong>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Google Site Kit integration for KeyTrack\u003C\u002Fli>\n\u003Cli>Google Search Console data access\u003C\u002Fli>\n\u003Cli>REST API endpoints for external integrations\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Troubleshooting\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>If KeyTrack doesn’t show data, ensure Google Site Kit is installed and connected.\u003C\u002Fli>\n\u003Cli>If weekly emails aren’t sending, check your server’s mail configuration and email settings.\u003C\u002Fli>\n\u003Cli>If schema isn’t appearing, verify your Pro license is active and schema is properly configured.\u003C\u002Fli>\n\u003Cli>If links aren’t being detected, ensure the post type is selected in Settings.\u003C\u002Fli>\n\u003Cli>Check the plugin’s debug logs for detailed error information.\u003C\u002Fli>\n\u003C\u002Ful>\n","The ultimate WordPress plugin for SEO automation - from link fixing to AI-powered schema generation and chatbot support.",3000,23614,"2026-03-12T17:33:00.000Z","5.0.0","7.4.3",[151,152,128,153,154],"301-redirection","404-monitor","schema-markup","seo-chatbot","https:\u002F\u002Fseorepairkit.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fseo-repair-kit.2.1.4.zip",{"attackSurface":158,"codeSignals":193,"taintFlows":206,"riskAssessment":242,"analyzedAt":256},{"hooks":159,"ajaxHandlers":180,"restRoutes":190,"shortcodes":191,"cronEvents":192,"entryPointCount":110,"unprotectedCount":110},[160,166,170,176],{"type":161,"name":162,"callback":163,"file":164,"line":165},"action","plugins_loaded","sp_load_textdomain","similar-post-title-checker.php",13,{"type":161,"name":167,"callback":168,"file":164,"line":169},"admin_enqueue_scripts","load_sp_wp_admin_scripts",27,{"type":171,"name":172,"callback":173,"priority":174,"file":164,"line":175},"filter","set-screen-option","sp_set_option",10,65,{"type":171,"name":177,"callback":178,"priority":174,"file":164,"line":179},"screen_settings","sp_show_screen_options",69,[181,186],{"action":182,"nopriv":183,"callback":184,"hasNonce":183,"hasCapCheck":183,"file":164,"line":185},"sp_ajax_hook_sc",false,"sp_process_sc",28,{"action":187,"nopriv":183,"callback":188,"hasNonce":183,"hasCapCheck":183,"file":164,"line":189},"sp_ajax_hook","sp_process",29,[],[],[],{"dangerousFunctions":194,"sqlUsage":195,"outputEscaping":200,"fileOperations":28,"externalRequests":28,"nonceChecks":28,"capabilityChecks":28,"bundledLibraries":205},[],{"prepared":28,"raw":135,"locations":196},[197],{"file":164,"line":198,"context":199},46,"$wpdb->get_results() with variable interpolation",{"escaped":28,"rawEcho":135,"locations":201},[202],{"file":164,"line":203,"context":204},58,"raw output",[],[207,231],{"entryPoint":208,"graph":209,"unsanitizedCount":110,"severity":230},"sp_process_sc (similar-post-title-checker.php:92)",{"nodes":210,"edges":227},[211,216,221,225],{"id":212,"type":213,"label":214,"file":164,"line":215},"n0","source","$_POST['splimit']",94,{"id":217,"type":218,"label":219,"file":164,"line":215,"wp_function":220},"n1","sink","update_option() [Settings Manipulation]","update_option",{"id":222,"type":213,"label":223,"file":164,"line":224},"n2","$_POST['spminchar']",95,{"id":226,"type":218,"label":219,"file":164,"line":224,"wp_function":220},"n3",[228,229],{"from":212,"to":217,"sanitized":183},{"from":222,"to":226,"sanitized":183},"low",{"entryPoint":232,"graph":233,"unsanitizedCount":110,"severity":230},"\u003Csimilar-post-title-checker> (similar-post-title-checker.php:0)",{"nodes":234,"edges":239},[235,236,237,238],{"id":212,"type":213,"label":214,"file":164,"line":215},{"id":217,"type":218,"label":219,"file":164,"line":215,"wp_function":220},{"id":222,"type":213,"label":223,"file":164,"line":224},{"id":226,"type":218,"label":219,"file":164,"line":224,"wp_function":220},[240,241],{"from":212,"to":217,"sanitized":183},{"from":222,"to":226,"sanitized":183},{"summary":243,"deductions":244},"The \"similar-post-title-checker\" plugin exhibits a concerning security posture due to its unprotected entry points and a lack of essential security checks.  The static analysis reveals two AJAX handlers that lack any authentication or authorization checks, presenting a significant attack surface. Furthermore, the plugin fails to implement nonce checks for these handlers, making them vulnerable to Cross-Site Request Forgery (CSRF) attacks.  The presence of a raw SQL query without prepared statements is another critical flaw, exposing the plugin to SQL injection vulnerabilities. While the plugin has no recorded vulnerability history, this does not indicate good security practices but rather a potential lack of scrutiny or a history of being overlooked. The absence of output escaping is also a concern, potentially leading to Cross-Site Scripting (XSS) vulnerabilities if user-supplied data is displayed without proper sanitization.",[245,247,249,251,254],{"reason":246,"points":174},"Unprotected AJAX handlers",{"reason":248,"points":174},"Missing nonce checks on AJAX",{"reason":250,"points":174},"Raw SQL without prepared statements",{"reason":252,"points":253},"Unescaped output",5,{"reason":255,"points":52},"Flows with unsanitized paths","2026-03-16T21:06:44.340Z",{"wat":258,"direct":268},{"assetPaths":259,"generatorPatterns":262,"scriptPaths":263,"versionParams":265},[260,261],"\u002Fwp-content\u002Fplugins\u002Fsimilar-post-title-checker\u002Fasset\u002Fcss\u002Fadmin.css","\u002Fwp-content\u002Fplugins\u002Fsimilar-post-title-checker\u002Fasset\u002Fjs\u002Fajax.js",[],[264],"asset\u002Fjs\u002Fajax.js",[266,267],"similar-post-title-checker\u002Fasset\u002Fcss\u002Fadmin.css?ver=1.0.0","similar-post-title-checker\u002Fasset\u002Fjs\u002Fajax.js?ver=1.0.0",{"cssClasses":269,"htmlComments":273,"htmlAttributes":274,"restEndpoints":281,"jsGlobals":282,"shortcodeOutput":283},[270,271,272],"sp_custom_fields","sp-screen-options-apply","sp_wp_admin_css",[],[275,276,277,278,279,280],"id='sp_screen_options_limit'","name='sp_screen_options_limit'","id='sp_screen_options_minchar'","name='sp_screen_options_minchar'","id='sp-screen-options-apply'","name='sp-screen-options-apply'",[],[],[]]