{"id":303612,"date":"2026-08-07T08:33:48","date_gmt":"2026-08-07T08:33:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ranki-publisher\/"},"modified":"2026-08-07T09:01:05","modified_gmt":"2026-08-07T09:01:05","slug":"ranki-publisher","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ranki-publisher\/","author":23486135,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.6","stable_tag":"1.7.6","tested":"7.0.3","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Ranki Publisher","header_author":"Ranki","header_description":"Connects your WordPress site to Ranki for automated AI SEO content publishing. Install this plugin, then copy your secret key from Settings \u2192 Ranki Publisher into your Ranki admin panel.","assets_banners_color":"","last_updated":"2026-08-07 09:01:05","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/rankiaeo\/ranki-wordpress-plugin","header_author_uri":"https:\/\/ranki.com.au","rating":0,"author_block_rating":0,"active_installs":0,"downloads":41,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.7.5":{"tag":"1.7.5","author":"rankiseo","date":"2026-08-07 08:33:12"},"1.7.6":{"tag":"1.7.6","author":"rankiseo","date":"2026-08-07 09:01:05"}},"upgrade_notice":{"1.7.6":"<p>Security update, please update as soon as possible.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.7.5","1.7.6"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The Settings page showing your Site URL and Secret Key, ready to copy into Ranki."}},"plugin_section":[],"plugin_tags":[2353,569,529,7143,186],"plugin_category":[55],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-303612","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-automation","plugin_tags-content","plugin_tags-publishing","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_committers-rankiseo"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/ranki-publisher.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Ranki Publisher<\/strong> is the WordPress bridge for the <a href=\"https:\/\/ranki.com.au\">Ranki<\/a> AI SEO platform. Once installed, Ranki can automatically publish SEO-optimised blog posts to your WordPress site \u2014 including the featured image, focus keyword, meta title, meta description, and schema JSON-LD markup \u2014 without any manual work.<\/p>\n\n<p><strong>How it works<\/strong><\/p>\n\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>Settings \u2192 Ranki Publisher<\/strong> and copy your Site URL and Secret Key.<\/li>\n<li>Paste them into your Ranki admin panel.<\/li>\n<li>Ranki will start publishing content to your site automatically.<\/li>\n<\/ol>\n\n<p><strong>Key features<\/strong><\/p>\n\n<ul>\n<li><strong>Pull-queue cron<\/strong> \u2014 WordPress polls Ranki every 5 minutes for pending jobs. All connections are outbound from your server, which bypasses hosting firewalls that block inbound REST API calls (SiteGround, Cloudflare, etc.).<\/li>\n<li><strong>REST API endpoint<\/strong> \u2014 for hosts that allow inbound REST calls, Ranki can push content directly via <code>\/wp-json\/ranki\/v1\/publish<\/code>.<\/li>\n<li><strong>Featured image upload<\/strong> \u2014 images are uploaded to your media library and set as the post featured image automatically.<\/li>\n<li><strong>SEO plugin support<\/strong> \u2014 writes focus keyword, meta title, and meta description for both Rank Math and Yoast SEO.<\/li>\n<li><strong>Smart category assignment<\/strong> \u2014 matches or creates a post category based on the focus keyword.<\/li>\n<li><strong>Schema JSON-LD<\/strong> \u2014 injects structured data markup into <code>&lt;head&gt;<\/code> for posts that include it.<\/li>\n<\/ul>\n\n<p><strong>Requirements<\/strong><\/p>\n\n<ul>\n<li>A <a href=\"https:\/\/ranki.com.au\">Ranki<\/a> account (the plugin alone does nothing without one).<\/li>\n<li>WordPress 5.6 or higher.<\/li>\n<li>PHP 7.4 or higher.<\/li>\n<\/ul>\n\n<h3>Third-Party Services<\/h3>\n\n<p>This plugin communicates with the <strong>Ranki<\/strong> backend service to function. Specifically:<\/p>\n\n<ul>\n<li><strong>Polling for jobs<\/strong> \u2014 every 5 minutes, the plugin calls <code>https:\/\/ranki-backend-production.up.railway.app\/wp-sync\/poll<\/code> to check for pending content publishing jobs. The request includes your site's secret key in a header (never in the URL).<\/li>\n<li><strong>Reporting job results<\/strong> \u2014 after processing each job, the plugin calls <code>https:\/\/ranki-backend-production.up.railway.app\/wp-sync\/done<\/code> to report success or failure, including the published post ID and URL.<\/li>\n<\/ul>\n\n<p><strong>Data transmitted:<\/strong> your site's secret key (as an authentication header), the result of each publishing job (post ID, post URL, error message if applicable). No personal user data is transmitted.<\/p>\n\n<ul>\n<li>Ranki Terms of Service: https:\/\/ranki.com.au\/terms<\/li>\n<li>Ranki Privacy Policy: https:\/\/ranki.com.au\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Automatic (recommended)<\/h4>\n\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>Ranki Publisher<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Go to <strong>Settings \u2192 Ranki Publisher<\/strong> and copy your credentials into your Ranki admin panel.<\/li>\n<\/ol>\n\n<h4>Manual<\/h4>\n\n<ol>\n<li>Download the plugin ZIP.<\/li>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Upload the ZIP file and click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Go to <strong>Settings \u2192 Ranki Publisher<\/strong> and copy your credentials into your Ranki admin panel.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20ranki%20account%3F\"><h3>Do I need a Ranki account?<\/h3><\/dt>\n<dd><p>Yes. This plugin is a connector for the <a href=\"https:\/\/ranki.com.au\">Ranki<\/a> AI SEO platform. It does not function as a standalone plugin.<\/p><\/dd>\n<dt id=\"is%20my%20secret%20key%20stored%20securely%3F\"><h3>Is my secret key stored securely?<\/h3><\/dt>\n<dd><p>Your secret key is stored in your WordPress database (wp_options table) using WordPress's standard <code>update_option()<\/code> function \u2014 the same way WordPress stores all plugin settings. It is never exposed in page source, logs, or URLs.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20my%20hosting%20blocks%20external%20rest%20api%20requests%3F\"><h3>What happens if my hosting blocks external REST API requests?<\/h3><\/dt>\n<dd><p>The plugin includes a pull-queue cron system as a fallback. WordPress polls the Ranki API every 5 minutes for pending jobs and processes them locally. All connections are outbound from your server, so firewall rules blocking inbound requests do not affect it.<\/p><\/dd>\n<dt id=\"which%20seo%20plugins%20are%20supported%3F\"><h3>Which SEO plugins are supported?<\/h3><\/dt>\n<dd><p>Rank Math and Yoast SEO. The plugin writes the standard meta fields used by each: focus keyword, meta title, and meta description.<\/p><\/dd>\n<dt id=\"can%20i%20change%20which%20author%20is%20used%20for%20published%20posts%3F\"><h3>Can I change which author is used for published posts?<\/h3><\/dt>\n<dd><p>Yes. By default, posts are attributed to user ID 1 (the first administrator). You can override this using the <code>ranki_post_author<\/code> filter:<\/p>\n\n<pre><code>add_filter( 'ranki_post_author', function() { return 5; } );\n<\/code><\/pre><\/dd>\n<dt id=\"how%20do%20i%20regenerate%20my%20secret%20key%3F\"><h3>How do I regenerate my secret key?<\/h3><\/dt>\n<dd><p>Go to <strong>Settings \u2192 Ranki Publisher<\/strong> and click <strong>Regenerate Secret Key<\/strong>. Then update the key in your Ranki admin panel. The old key stops working immediately.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.7.6<\/h4>\n\n<ul>\n<li>Security hardening: stricter file-content validation on image uploads. Recommended update for all sites.<\/li>\n<li>Added rate limiting to the visitor-facing lead tracking endpoint.<\/li>\n<\/ul>\n\n<h4>1.7.5<\/h4>\n\n<ul>\n<li>Removed the plugin's own self-update checker. WordPress.org does not permit directory-hosted plugins to run a custom updater alongside its own update system. Updates now come through the standard WordPress.org update notice once this version is live in the directory.<\/li>\n<\/ul>\n\n<h4>1.7.4<\/h4>\n\n<ul>\n<li>Removed an unneeded translation-loading call (not required for directory-hosted plugins since WP 4.6).<\/li>\n<\/ul>\n\n<h4>1.7.3<\/h4>\n\n<ul>\n<li>Featured image upload failures (host disk quota, permissions) are now reported back to Ranki instead of silently publishing the post without an image.<\/li>\n<\/ul>\n\n<h4>1.7.2<\/h4>\n\n<ul>\n<li>One-click auto-update is now active \u2014 new plugin versions appear in the standard WordPress update notice, no more manual zip uploads.<\/li>\n<li>Schema now defers to Rank Math or Yoast when present (keeps FAQ schema, avoids duplicate structured data).<\/li>\n<li>Removed self-reported review stars from post schema (ineligible in Google, avoids manual-action risk).<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Fixed Hebrew\/Arabic post URLs redirecting to homepage \u2014 rewrite rules now hard-flushed after publish.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Lead and call tracking: form submissions (CF7, WPForms, Gravity Forms, Elementor, HTML) and phone link clicks are now captured automatically and shown in the Ranki dashboard under Leads &amp; Calls.<\/li>\n<li>No configuration needed - tracking activates as soon as this update is installed.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Fixed API base URL \u2014 pull-queue poll was hitting the wrong path (missing \/api prefix).\nQueue jobs now process correctly on all WordPress hosts.<\/li>\n<li>Bumped tested-up-to to WordPress 6.9.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Added update-content endpoint for refreshing existing post content.<\/li>\n<li>Added direct endpoint fallback for hosts that block REST API calls.<\/li>\n<li>Improved category auto-detection from focus keyword.<\/li>\n<li>Added MIME type verification before image upload.<\/li>\n<li>Schema JSON-LD now stored in post meta and injected into <code>&lt;head&gt;<\/code> (prevents content stripping by wp_kses_post).<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Added schema JSON-LD support.<\/li>\n<li>Added Yoast SEO meta field support alongside Rank Math.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added pull-queue cron system as a fallback for restricted hosting environments.<\/li>\n<li>Added upload-image endpoint for separate image uploads.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added smart category assignment from focus keyword.<\/li>\n<li>Added featured image upload via base64.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added Rank Math SEO meta fields (focus keyword, title, description).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added ping endpoint for connection testing.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Connects your WordPress site to Ranki for automated AI SEO content publishing \u2014 posts, images, and SEO metadata, hands-free.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/303612","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=303612"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rankiseo"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=303612"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=303612"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=303612"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=303612"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=303612"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=303612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}