{"id":396866,"date":"2026-11-11T09:19:17","date_gmt":"2026-11-11T09:19:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/rankzoro-ai-seo\/"},"modified":"2026-11-13T02:07:39","modified_gmt":"2026-11-13T02:07:39","slug":"rankzoro-ai-seo","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/rankzoro-ai-seo\/","author":23597228,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.10.5","stable_tag":"2.10.5","tested":"7.1.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"RankZoro AI SEO","header_author":"RankZoro","header_description":"Connect WordPress to RankZoro for reviewed SEO updates, content publishing, internal linking, schema tools, and optional scheduled automation.","last_updated":"2026-11-13 02:07:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/rankzoro.co\/features\/wordpress-plugin\/","header_author_uri":"https:\/\/rankzoro.co","rating":0,"author_block_rating":0,"active_installs":0,"downloads":127,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.10.5":{"tag":"2.10.5","author":"rankzoro","date":"2026-11-13 02:07:39","revision":3799541}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.10.5"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,529,6681,1117,186],"plugin_category":[55],"plugin_contributors":[292013],"plugin_business_model":[],"class_list":["post-396866","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-content","plugin_tags-internal-links","plugin_tags-schema","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-rankzoro","plugin_committers-rankzoro"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/rankzoro-ai-seo.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>The SEO &amp; Store Workbench includes an AI SEO Agent chat. Ask about SEO tasks, optionally share the inspected page, and request a supported proposal for metadata, content refresh, internal links, FAQs or product-category guidance. Proposal generation uses 30 credits; applying any generated change remains a separate review and approval.<\/p>\n\n<p>Free SEO Tools works without a RankZoro account: browse posts\/pages\/products,\nwrite title and supported SEO metadata changes, preview exact fields, approve\nlocally and restore when no newer edits intervened. WordPress administrator\npermission and nonces remain mandatory. Local edits do not authorize remote\npublishing. A native title\/description fallback runs only when no other detected\nSEO plugin owns those fields. Other SEO plugins remain in control.<\/p>\n\n<p>The free browser toolkit adds local text\/HTML\/schema\/robots\/image\/CSV utilities.\nLimited free AI requires explicit excerpt submission and has network\/shared caps.\nLocal data is not automatically contributed to shared model training.<\/p>\n\n<p>The RankZoro WordPress plugin creates a secure, API-key-authenticated bridge between your WordPress site and your RankZoro account.<\/p>\n\n<p><strong>What RankZoro can do once connected:<\/strong><\/p>\n\n<ul>\n<li>Create and publish AI-generated articles after the site owner enables and configures publishing<\/li>\n<li>Schedule articles for chosen publication dates; scheduled autopilot requires the enabled automation add-on and available credits<\/li>\n<li>Apply internal links to existing posts with one click<\/li>\n<li>Apply AI SEO fixes \u2014 title, meta description, focus keyword, slug, canonical, status \u2014 on command<\/li>\n<li>Apply multiple SEO fixes in a single bulk request<\/li>\n<li>Inject JSON-LD schema markup (Article, FAQPage, HowTo, Product, etc.) into any post \u2014 outputs in &lt;head&gt; automatically<\/li>\n<li>Register webhooks \u2014 WordPress fires instant POST notifications to RankZoro on post.published, post.updated, or post.deleted<\/li>\n<li>Content decay monitoring \u2014 optional daily WP-Cron reports of stale-post metadata, enabled separately by an administrator<\/li>\n<li>Fetch posts for analysis, internal link mapping, and content decay audits<\/li>\n<li>Find internal backlinks \u2014 which posts on this site link to a given post<\/li>\n<li>Filter posts by category, tag, author, post type<\/li>\n<li>List all registered public custom post types (CPTs)<\/li>\n<li>List authors with avatar URLs and post counts<\/li>\n<li>Set Yoast SEO, RankMath, and SEOPress meta fields automatically when publishing<\/li>\n<li>Upload and set featured images; upload standalone media to the media library<\/li>\n<li>Report full site info \u2014 active SEO plugin, theme, post counts, PHP version, timezone<\/li>\n<\/ul>\n\n<p>Scheduled AI generation and publishing are off until a site owner explicitly\nenables and configures them. Scheduled automation requires the RankZoro\nautomation add-on and available generation credits. Connecting a site alone\ndoes not grant permission to publish.<\/p>\n\n<h3>External Services and Privacy<\/h3>\n\n<p>Free manual SEO tools run on your WordPress site without a RankZoro account.\nCloud AI, research, proposal generation, content generation and optional\nautomation are provided by the RankZoro service. These service features may\nrequire an account, credits or a paid subscription; they are not a time-limited\ntrial of the local plugin tools.<\/p>\n\n<h4>RankZoro<\/h4>\n\n<p>The plugin communicates with https:\/\/rankzoro.co after you approve a connection\nor explicitly request a connected feature. Connection requests include the\nsite URL, authentication details and plugin\/account information. Requested\ncloud actions can include selected post, page, product or category identifiers,\ntitles, URLs, metadata, content and proposed changes. AI chat sends your question;\ninspected page text is included only when you choose that option.<\/p>\n\n<p>Daily stale-content reporting is off by default, including after an account is\nconnected. If an administrator enables it, WP-Cron sends the site URL and up to\n100 stale published posts' identifiers, titles, URLs, publication\/modification\ndates and word counts to RankZoro each day. Post bodies are not included in\nthese reports. \"Run Scan Now\" sends one report without enabling recurring\nreports. Disconnecting disables recurring stale-content reports.<\/p>\n\n<p>Scheduled growth\/content workflows require separate configuration and may send\nthe content and resource data needed to perform those chosen workflows.\nAI generation is performed by RankZoro's cloud services, not downloaded PHP or\nJavaScript code. See the service's <a href=\"https:\/\/rankzoro.co\/terms\">Terms of Service<\/a>\nand <a href=\"https:\/\/rankzoro.co\/privacy\">Privacy Policy<\/a>.<\/p>\n\n<h4>IndexNow<\/h4>\n\n<p>Only when you request an IndexNow submission, the plugin verifies your site's\npublic key URL and sends the site's hostname, key, key location and selected\npage URL to https:\/\/api.indexnow.org\/indexnow. This is a submission request,\nnot confirmation of indexing. See https:\/\/www.indexnow.org\/ for the protocol\nand participating services. <a href=\"https:\/\/www.indexnow.org\/terms\">IndexNow Terms<\/a>\ndescribe the service conditions.<\/p>\n\n<h4>Administrator-configured webhooks<\/h4>\n\n<p>No webhook destination is configured by default. If you configure one,\nWordPress sends the selected publish, update or deletion events, site URL and\nassociated post data to that URL. Only configure destinations you trust and\nhave permission to send this data to. Remove the webhook to stop delivery.<\/p>\n\n<p>The external browser toolkit is opened only when you follow its link. Local\ntool inputs stay in that browser until you explicitly confirm a service request.\nThe plugin does not automatically contribute site content to shared model training.<\/p>\n\n<h3>Support<\/h3>\n\n<p>For plugin support, email support@rankzoro.co. Once the plugin is listed,\nWordPress-specific issues can also be reported using its WordPress.org\nSupport tab. Do not post connection tokens, API keys, private content or\naccount credentials in public support requests.<\/p>\n\n<h3>License<\/h3>\n\n<p>The distributed plugin source is licensed under the GNU General Public License,\nversion 2 or any later version (GPL-2.0-or-later). The full version 2 license is\nincluded in LICENSE.txt. The separately hosted RankZoro service has its own\nTerms of Service; those terms do not restrict your GPL rights in this plugin.<\/p>\n\n<h3>Source Code<\/h3>\n\n<p>The plugin-specific JavaScript and CSS are included in this plugin package as\nhuman-readable, editable source files. The files enqueued by the plugin are\n    admin-settings.js, <code>content-admin.js<\/code>, <code>site-pairing.js<\/code>, and <code>workbench.js<\/code>,\nwith their corresponding CSS files. These are distributed directly; they are\nnot minified or transpiled, and the plugin does not bundle third-party\nJavaScript or CSS libraries. No JavaScript or CSS build step is required.<\/p>\n\n<p>See <code>SOURCE.md<\/code> in the plugin directory for a source-file overview and release\npackaging notes.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>rankzoro<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, OR install via WordPress Admin \u2192 Plugins \u2192 Upload Plugin.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Go to the <strong>RankZoro<\/strong> menu item in your WordPress admin sidebar.<\/li>\n<li>Use Free SEO Tools without connecting an account, or optionally connect for cloud service features.<\/li>\n<\/ol>\n\n<p>Recommended connection: in RankZoro \u2192 CMS Connections, enter your exact HTTPS\nWordPress site URL, open WordPress, and approve the read-only connection.\nEach approval expires after ten minutes and can be used once. Publishing\nrequires a separate permission in WordPress \u2192 RankZoro.<\/p>\n\n<p>Manual connection fallback:\n1. Paste your Plugin Token from rankzoro.co \u2192 Settings \u2192 WordPress Plugin Token into the plugin's connection form.\n2. Click Connect, then copy the Site URL and API Key shown.\n3. In RankZoro \u2192 CMS Connections \u2192 Add Connection \u2192 WordPress (Plugin), enter those details.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20secure%3F\"><h3>Is this secure?<\/h3><\/dt>\n<dd><p>Local administration actions require WordPress capabilities and nonces.\nRemote site operations require an authenticated connection key. Read-only\npairing does not enable publishing; writing requires separate permission.\nKeys are stored in your WordPress options, so keep your site and database\naccess protected. You can disconnect or regenerate the connection key from\nthe plugin settings page.<\/p><\/dd>\n<dt id=\"which%20seo%20plugins%20are%20supported%3F\"><h3>Which SEO plugins are supported?<\/h3><\/dt>\n<dd><p>Yoast SEO, RankMath, and SEOPress. The plugin auto-detects which is active and reads\/writes the correct meta keys for each. If none are installed, standard WordPress fields are used.<\/p><\/dd>\n<dt id=\"how%20do%20webhooks%20work%3F\"><h3>How do webhooks work?<\/h3><\/dt>\n<dd><p>Register a webhook URL via <code>POST \/webhooks<\/code>. WordPress then fires an instant HTTP POST to that URL whenever a post is published, updated, or deleted \u2014 so RankZoro never needs to poll for changes. Webhooks can be listed (<code>GET \/webhooks<\/code>) and removed (<code>DELETE \/webhooks\/{id}<\/code>) via API or from the admin settings page.<\/p><\/dd>\n<dt id=\"how%20does%20content%20decay%20monitoring%20work%3F\"><h3>How does content decay monitoring work?<\/h3><\/dt>\n<dd><p>Daily reporting is off by default. An administrator can enable it in the\nContent Decay Monitor. When enabled, a daily WP-Cron callback reports metadata\nfor up to 100 published posts older than the configured update threshold\n(default: 90 days). You can also request a one-time report with \"Run Scan Now\".\nSee External Services and Privacy for the fields sent to RankZoro.<\/p><\/dd>\n<dt id=\"what%20schema%20types%20are%20supported%20for%20json-ld%20injection%3F\"><h3>What schema types are supported for JSON-LD injection?<\/h3><\/dt>\n<dd><p>Article, FAQPage, HowTo, WebPage, BlogPosting, Product, BreadcrumbList, LocalBusiness, Person, Organization, Event. The JSON-LD block is output in &lt;head&gt; automatically on the post's singular page.<\/p><\/dd>\n<dt id=\"what%20wordpress%20rest%20api%20endpoints%20does%20this%20add%3F\"><h3>What WordPress REST API endpoints does this add?<\/h3><\/dt>\n<dd><p>All endpoints are under <code>\/wp-json\/rankzoro\/v1\/<\/code>:<\/p>\n\n<p><strong>Info<\/strong>\n- <code>GET \/status<\/code> \u2014 health check, plugin version, plan, SEO plugin, webhook count\n- <code>GET \/site-info<\/code> \u2014 site name, WP\/PHP version, active theme, all active plugins, post counts, timezone, decay settings<\/p>\n\n<p><strong>Posts<\/strong>\n- <code>GET \/posts<\/code> \u2014 list posts (params: <code>type<\/code>, <code>status<\/code>, <code>per_page<\/code>, <code>page<\/code>, <code>search<\/code>, <code>category<\/code>, <code>tag<\/code>, <code>author<\/code>, <code>orderby<\/code>, <code>order<\/code>)\n- <code>POST \/posts<\/code> \u2014 create a post (title, content, excerpt, status, type, date, slug, author, categories, tags, featured_image_url, meta_title, meta_description, focus_keyword, canonical)\n- <code>GET \/posts\/{id}<\/code> \u2014 get single post with full content + schema\n- <code>PUT|PATCH \/posts\/{id}<\/code> \u2014 update post\n- <code>DELETE \/posts\/{id}<\/code> \u2014 delete post (<code>?force=true<\/code> for permanent)\n- <code>POST \/posts\/{id}\/apply-links<\/code> \u2014 inject internal links into content\n- <code>POST \/posts\/{id}\/apply-fix<\/code> \u2014 single SEO fix (types: title, content, slug, excerpt, status, meta_title, meta_description, focus_keyword, canonical)\n- <code>POST \/posts\/{id}\/bulk-fix<\/code> \u2014 multiple fixes: <code>{\"fixes\":[{\"type\":\"meta_title\",\"value\":\"...\"},{\"type\":\"focus_keyword\",\"value\":\"...\"}]}<\/code>\n- <code>POST \/posts\/{id}\/apply-schema<\/code> \u2014 inject JSON-LD schema: <code>{\"schema\":{\"@type\":\"FAQPage\",\"mainEntity\":[...]}}<\/code> | <code>{\"action\":\"delete\"}<\/code> to remove\n- <code>GET \/posts\/{id}\/backlinks<\/code> \u2014 find all published posts on this site that link to this post<\/p>\n\n<p><strong>Taxonomy &amp; Structure<\/strong>\n- <code>GET \/pages<\/code> \u2014 list published pages\n- <code>GET \/categories<\/code> \u2014 list all categories\n- <code>GET \/tags<\/code> \u2014 list all post tags\n- <code>GET \/authors<\/code> \u2014 list authors (admin, editor, author, contributor) with avatar URLs and post counts\n- <code>GET \/post-types<\/code> \u2014 list all public registered post types with label, singular, supports, and published count<\/p>\n\n<p><strong>Media<\/strong>\n- <code>POST \/media<\/code> \u2014 upload media from URL to WP media library: <code>{\"url\":\"...\",\"filename\":\"...\"}<\/code><\/p>\n\n<p><strong>Webhooks<\/strong>\n- <code>GET \/webhooks<\/code> \u2014 list registered webhooks\n- <code>POST \/webhooks<\/code> \u2014 register: <code>{\"url\":\"https:\/\/...\",\"events\":[\"post.published\",\"post.updated\",\"post.deleted\"]}<\/code>\n- <code>DELETE \/webhooks\/{id}<\/code> \u2014 remove a webhook<\/p><\/dd>\n<dt id=\"can%20i%20revoke%20access%3F\"><h3>Can I revoke access?<\/h3><\/dt>\n<dd><p>Yes. Click <strong>Regenerate API Key<\/strong> on the plugin settings page and update the key in RankZoro's CMS Connections.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.10.5<\/h4>\n\n<ul>\n<li>Distribute administrator JavaScript and CSS as readable, editable source.<\/li>\n<li>Document the source files and clarify that no JavaScript\/CSS compilation is required.<\/li>\n<\/ul>\n\n<h4>2.10.4<\/h4>\n\n<ul>\n<li>Load administrator JavaScript and styles through WordPress enqueue APIs.<\/li>\n<li>Use unique rankzoro identifiers for callbacks, settings, AJAX actions, metadata and private proposals.<\/li>\n<li>Preserve earlier settings, metadata, proposals and schedules during upgrades without enabling publishing or reporting.<\/li>\n<\/ul>\n\n<h4>2.10.3<\/h4>\n\n<ul>\n<li>Resolve Plugin Check findings for timezone-safe dates, escaping, URL parsing and temporary-file cleanup.<\/li>\n<li>Align the text domain with the WordPress.org plugin slug and remove a deprecated multisite parameter.<\/li>\n<\/ul>\n\n<h4>2.10.2<\/h4>\n\n<ul>\n<li>Include the full GPLv2 license and clarify GPLv2-or-later licensing.<\/li>\n<li>Document external services, data transfers, service terms and support.<\/li>\n<li>Require separate opt-in for daily stale-content metadata reports.<\/li>\n<li>Safely encode JSON-LD output so schema text cannot terminate its script tag.<\/li>\n<\/ul>\n\n<h4>2.10.1<\/h4>\n\n<ul>\n<li>Keep Agent proposals bound to the page inspected for that conversation request.<\/li>\n<li>Recover from stalled requests, malformed replies and expired sessions.<\/li>\n<li>Support separate WordPress installation and public-site hosts.<\/li>\n<li>Hide unsupported variation and review-FAQ actions before charging.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>Added in-WordPress article generation, editable cloud drafts and a date-grouped content calendar.<\/li>\n<li>Added explicit opt-in recurring generation and publishing using the connected RankZoro project and credits.<\/li>\n<li>Added duplicate-safe new-post publishing with draft verification and active SEO-plugin metadata adapters.<\/li>\n<li>Added pause, cancellation, rescheduling and truthful error states; interrupted operations are not silently retried.<\/li>\n<li>Reliable automatic schedules require an always-on cloud worker or an externally scheduled worker; idle Autoscale timers are not sufficient.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Added authenticated lookup and current-field snapshot for a WordPress post by its own-site URL.<\/li>\n<li>Added reviewed change application with a page-revision check and a post-save verification response.<\/li>\n<li>Reviewed edits write metadata only to the active Yoast, RankMath or SEOPress plugin, without removing or replacing it.<\/li>\n<li>Content edits are blocked when WordPress would sanitize the approved content or existing content differently, to protect reversibility.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Added <code>POST \/posts\/{id}\/apply-schema<\/code> \u2014 inject JSON-LD structured data (Article, FAQPage, HowTo, Product, etc.) into any post; outputs via wp_head on singular pages<\/li>\n<li>Added <code>GET \/posts\/{id}\/backlinks<\/code> \u2014 searches post_content across all published posts to find internal backlinks to a given URL<\/li>\n<li>Added <code>GET \/authors<\/code> \u2014 lists authors (admin\/editor\/author\/contributor) with display name, avatar URL, post count<\/li>\n<li>Added <code>GET \/post-types<\/code> \u2014 lists all registered public CPTs with label, singular, hierarchical, supports, and published count<\/li>\n<li>Added <code>GET \/webhooks<\/code>, <code>POST \/webhooks<\/code>, <code>DELETE \/webhooks\/{id}<\/code> \u2014 register URLs to receive instant POST notifications on post.published, post.updated, post.deleted events<\/li>\n<li>Added content decay cron \u2014 daily WP_Cron job finds posts not updated within configurable threshold and POSTs report to RankZoro cloud<\/li>\n<li>Added content decay settings to admin UI (threshold, last run date, stale count, manual trigger)<\/li>\n<li>Added registered webhooks table to admin UI with per-webhook remove button<\/li>\n<li>Updated <code>GET \/posts<\/code> to accept any public registered post type via <code>type<\/code> param (not just post\/page)<\/li>\n<li>Updated <code>POST \/posts<\/code> to accept any public registered post type<\/li>\n<li>Added <code>has_schema<\/code> and <code>schema_type<\/code> fields to all post list\/get responses<\/li>\n<li>Added full <code>schema<\/code> object to <code>GET \/posts\/{id}<\/code> response when schema is set<\/li>\n<li>Added <code>webhooks_count<\/code> and <code>decay_days<\/code>\/<code>decay_last_run<\/code> fields to <code>\/status<\/code> response<\/li>\n<li>Added activation hook to register content decay cron and initialize webhooks option<\/li>\n<li>Added deactivation hook to clear cron schedule<\/li>\n<li>Updated capabilities list in admin connected screen<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Added GET \/site-info, GET \/tags, POST \/posts\/{id}\/bulk-fix, POST \/media<\/li>\n<li>Added category, tag, author, orderby, order filters to GET \/posts<\/li>\n<li>Fixed meta field reads for RankMath and SEOPress sites; fixed canonical for all SEO plugins<\/li>\n<li>Fixed post_author hardcoded to 1; added categories+tags to post responses<\/li>\n<li>SEO plugin detection badge in admin UI; seo_plugin in \/status<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Full rewrite with cloud token auth (rzwp_ tokens) and two-factor connection flow<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Connect WordPress to RankZoro for reviewed SEO updates, content publishing, internal linking, schema tools, and optional scheduled automation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/396866","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=396866"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rankzoro"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=396866"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=396866"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=396866"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=396866"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=396866"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=396866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}