{"id":327619,"date":"2026-06-26T05:15:48","date_gmt":"2026-06-26T05:15:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ghost-blog-connector\/"},"modified":"2026-10-19T13:54:47","modified_gmt":"2026-10-19T13:54:47","slug":"ghost-blog-connector","status":"publish","type":"plugin","link":"https:\/\/az.wordpress.org\/plugins\/ghost-blog-connector\/","author":23517969,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.1.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"SEO Connector for Ghost.blog","header_author":"ghost.blog","header_description":"Lets ghost.blog push SEO metadata (title, description, focus keyword, OG image) into Yoast SEO, Rank Math, or All in One SEO when it publishes articles to this site.","assets_banners_color":"","last_updated":"2026-10-19 13:54:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ghost.blog\/wordpress-connector","header_author_uri":"https:\/\/ghost.blog","rating":5,"author_block_rating":0,"active_installs":10,"downloads":715,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"devf36c6ea5cc31","date":"2026-06-26 05:15:17","revision":3586772},"1.1.0":{"tag":"1.1.0","author":"devf36c6ea5cc31","date":"2026-10-07 07:00:12","revision":3731992},"1.2.0":{"tag":"1.2.0","author":"devf36c6ea5cc31","date":"2026-10-12 08:31:24","revision":3740839},"1.3.0":{"tag":"1.3.0","author":"devf36c6ea5cc31","date":"2026-10-18 08:13:57","revision":3752740},"1.4.0":{"tag":"1.4.0","author":"devf36c6ea5cc31","date":"2026-10-19 13:54:47","revision":3754885}},"upgrade_notice":{"1.4.0":"<p>Adds a Brand profile tab to the Ghost.blog panel and a ghost.blog menu icon.<\/p>","1.3.0":"<p>Adds an opt-in ghost.blog control panel to wp-admin. Nothing changes until an administrator connects the site.<\/p>","1.2.0":"<p>You no longer need Yoast, Rank Math or AIOSEO. Sites without an SEO plugin now get their SEO tags rendered by the connector. No configuration needed.<\/p>","1.1.0":"<p>Adds \/llms.txt serving. No configuration needed.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3586772,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3586772,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.2.0","1.3.0","1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3586772,"resolution":"1","location":"assets","locale":"","width":1266,"height":732},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3752740,"resolution":"2","location":"assets","locale":"","width":2560,"height":1720},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3752740,"resolution":"3","location":"assets","locale":"","width":2560,"height":1720},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3752740,"resolution":"4","location":"assets","locale":"","width":2560,"height":2120}},"screenshots":{"1":"Managing the WordPress connection and SEO connector from the Ghost.blog dashboard \u2014 download the plugin, pick the target SEO plugin, and re-detect.","2":"The Ghost.blog control panel in wp-admin: credits, automation status and site health.","3":"Generating an article from wp-admin, with live progress.","4":"Creating a publishing schedule and skipping a single upcoming article."}},"plugin_section":[],"plugin_tags":[210509,181641,174175,186,2227],"plugin_category":[55],"plugin_contributors":[268939],"plugin_business_model":[],"class_list":["post-327619","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-writing","plugin_tags-content-automation","plugin_tags-rank-math","plugin_tags-seo","plugin_tags-yoast","plugin_category-seo-and-marketing","plugin_contributors-devf36c6ea5cc31","plugin_committers-devf36c6ea5cc31"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ghost-blog-connector\/assets\/icon-128x128.png?rev=3586772","icon_2x":"https:\/\/ps.w.org\/ghost-blog-connector\/assets\/icon-256x256.png?rev=3586772","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ghost-blog-connector\/assets\/screenshot-1.png?rev=3586772","caption":"Managing the WordPress connection and SEO connector from the Ghost.blog dashboard \u2014 download the plugin, pick the target SEO plugin, and re-detect."},{"src":"https:\/\/ps.w.org\/ghost-blog-connector\/assets\/screenshot-2.png?rev=3752740","caption":"The Ghost.blog control panel in wp-admin: credits, automation status and site health."},{"src":"https:\/\/ps.w.org\/ghost-blog-connector\/assets\/screenshot-3.png?rev=3752740","caption":"Generating an article from wp-admin, with live progress."},{"src":"https:\/\/ps.w.org\/ghost-blog-connector\/assets\/screenshot-4.png?rev=3752740","caption":"Creating a publishing schedule and skipping a single upcoming article."}],"raw_content":"<!--section=description-->\n<h4>Run ghost.blog from WordPress<\/h4>\n\n<p>Since 1.3.0 the plugin adds a <strong>Ghost.blog<\/strong> menu to wp-admin. Connect your\nsite once and, without leaving WordPress, you can:<\/p>\n\n<ul>\n<li>see your credit balance and what's scheduled next;<\/li>\n<li>generate an article and watch it being written, then open the draft in the editor;<\/li>\n<li>browse every article ghost.blog wrote for this site;<\/li>\n<li>edit your brand profile: name, tagline, description, audience and voice;<\/li>\n<li>edit your ghost writers' voice, audience and default keywords;<\/li>\n<li>create, pause and skip publishing schedules. Schedules run on ghost.blog, so\narticles keep arriving even when nobody is logged in.<\/li>\n<\/ul>\n\n<p>The control panel is opt-in. Until an administrator presses\n\"Connect to ghost.blog\", it sends nothing anywhere. ghost.blog is a paid\nservice: generating articles uses credits from your ghost.blog account (new\naccounts include free credits). Buying credits and managing your team happen\non ghost.blog.<\/p>\n\n<p>Only administrators can connect the site or change writers and schedules,\nbecause those spend your team's credits. Users who can publish posts can\ngenerate articles, and anyone who can edit posts can view the panel.<\/p>\n\n<h4>SEO metadata<\/h4>\n\n<p>When ghost.blog publishes an article to your WordPress site, this connector\nwrites the AI-generated SEO title, meta description, focus keyword, and Open\nGraph image into whichever SEO plugin you use:<\/p>\n\n<ul>\n<li>Yoast SEO<\/li>\n<li>Rank Math<\/li>\n<li>All in One SEO (AIOSEO)<\/li>\n<\/ul>\n\n<p><strong>No SEO plugin? You no longer need one.<\/strong> Since 1.2.0 the connector keeps the\nmetadata itself and writes the title, meta description and Open Graph \/ Twitter\ntags into your pages directly. It does this only while no dedicated SEO plugin\nis active - install one at any time and the connector stops rendering and hands\nthe metadata over to it instead, so your pages never carry duplicate tags.<\/p>\n\n<p>The built-in renderer stays deliberately small: a title, a description and\nsocial tags on single posts ghost.blog wrote. It does not touch canonicals\n(WordPress already emits those), robots rules or sitemaps. If you want those,\ninstall a full SEO plugin - the connector will feed it.<\/p>\n\n<p>The plugin exposes three authenticated REST endpoints under <code>\/wp-json\/ghost-blog\/v1\/<\/code>:<\/p>\n\n<ul>\n<li><code>GET \/info<\/code> \u2014 reports the connector version and which SEO plugin is active.<\/li>\n<li><code>POST \/seo-meta<\/code> \u2014 writes SEO fields to a post.<\/li>\n<li><code>POST \/llms-txt<\/code> \u2014 stores the brand summary this site then serves at <code>\/llms.txt<\/code>.<\/li>\n<\/ul>\n\n<p>They require a logged-in user with the <code>edit_posts<\/code> capability (<code>publish_pages<\/code>\nto replace llms.txt), using the same application-password credentials you\nalready configured in ghost.blog. The one file the plugin serves publicly is\n    \/llms.txt, which is meant to be read by answer engines.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to <strong>ghost.blog<\/strong> (https:\/\/ghost.blog), an AI content\nservice operated by the plugin's author, but only after an administrator\nconnects the site from the Ghost.blog menu in wp-admin. Nothing is sent before\nthat.<\/p>\n\n<p>What is sent, and when:<\/p>\n\n<ul>\n<li><strong>When connecting:<\/strong> the site's home URL, sent once to exchange a one-time\napproval code for an access token. The token is stored in this site's\ndatabase and is never shown in the browser.<\/li>\n<li><strong>While you use the panel:<\/strong> requests made on your behalf to load your\naccount, credits, brand, articles, writers and schedules, plus whatever you\nsubmit: article topics and keywords, brand and writer settings, and schedule\nsettings.<\/li>\n<li><strong>On disconnect:<\/strong> a request that revokes the access token.<\/li>\n<\/ul>\n\n<p>ghost.blog also calls this site's REST API, using an Application Password you\napprove, to publish articles and write SEO metadata. You can revoke it at any\ntime under Users \u2192 Profile \u2192 Application Passwords.<\/p>\n\n<ul>\n<li>Terms of Service: https:\/\/ghost.blog\/terms<\/li>\n<li>Privacy Policy: https:\/\/ghost.blog\/privacy-policy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin, go to Plugins \u2192 Add New and search for\n\"SEO Connector for Ghost.blog\".<\/li>\n<li>Click Install Now, then Activate.<\/li>\n<li>Back in ghost.blog, open the SEO Engine tab and click \"Re-detect\" \u2014 your SEO\nplugin should now show as connected.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20seo%20plugin%20installed%3F\"><h3>Do I need an SEO plugin installed?<\/h3><\/dt>\n<dd><p>No, not since 1.2.0. If Yoast SEO, Rank Math or All in One SEO is active the\nconnector writes into it. If none is, the connector stores the metadata itself\nand renders it into your pages.<\/p>\n\n<p>The one case that still needs attention: if you run a dedicated SEO plugin the\nconnector has no adapter for - SEOPress, The SEO Framework, Slim SEO or\nSquirrly - it steps aside to avoid duplicate tags, and metadata is not written.\nThose plugins own your site's head, and the connector will not fight them.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20my%20content%20anywhere%3F\"><h3>Does the plugin send my content anywhere?<\/h3><\/dt>\n<dd><p>Only if you connect the control panel, and then only what's listed under\nExternal services. Without connecting, the plugin just responds to\nauthenticated REST requests from ghost.blog and never initiates a request\nitself. <code>\/llms.txt<\/code> is a public summary of your brand that ghost.blog pushes to\nthe site for answer engines to read; it contains nothing you have not already\npublished.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20keep%20wp-admin%20open%20for%20schedules%20to%20run%3F\"><h3>Do I have to keep wp-admin open for schedules to run?<\/h3><\/dt>\n<dd><p>No. Schedules run on ghost.blog's servers. They stop only if your credits run\nout (unless auto top-up is on), or if the Application Password ghost.blog\npublishes with is revoked.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20disconnect%3F\"><h3>What happens if I disconnect?<\/h3><\/dt>\n<dd><p>The control panel stops working until you connect again. Existing schedules\nkeep running and ghost.blog can still publish to the site. To stop those, remove\nthe site in ghost.blog or revoke its Application Password.<\/p><\/dd>\n<dt id=\"how%20does%20it%20authenticate%3F\"><h3>How does it authenticate?<\/h3><\/dt>\n<dd><p>ghost.blog's requests to this site use the WordPress application-password\ncredentials you approve in ghost.blog. The control panel's requests to\nghost.blog use an access token created when an administrator connects the site.\nThat token covers only the brand this site publishes for.<\/p><\/dd>\n<dt id=\"my%20theme%20ignores%20the%20seo%20title.%20why%3F\"><h3>My theme ignores the SEO title. Why?<\/h3><\/dt>\n<dd><p>The built-in renderer sets the title through WordPress's own\n    pre_get_document_title filter, which only applies to themes that declare\n    title-tag support - effectively every theme written in the last decade. A\ntheme that hardcodes its own <code>&lt;title&gt;<\/code> tag will keep winning. The meta\ndescription and social tags still apply there.<\/p><\/dd>\n<dt id=\"which%20seo%20plugin%20does%20it%20write%20to%20if%20i%20have%20more%20than%20one%20active%3F\"><h3>Which SEO plugin does it write to if I have more than one active?<\/h3><\/dt>\n<dd><p>The connector resolves a single adapter in priority order (Yoast SEO, then Rank\nMath, then All in One SEO) and writes to the first supported plugin it detects.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New Brand profile tab: edit the brand's name, tagline, description, website, audience, voice and location from wp-admin, and see its logo and colours. Administrators only can edit.<\/li>\n<li>The Ghost.blog menu now uses the ghost.blog ghost icon, recoloured to match your admin colour scheme.<\/li>\n<li>The Dashboard's credits button now reads \"Buy credits\".<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New Ghost.blog menu in wp-admin: connect your site, then generate articles, browse them, edit ghost writers and manage publishing schedules without leaving WordPress. Opt-in; requires WordPress 6.6+ (the SEO connector features still work on 5.6+).<\/li>\n<li><code>GET \/info<\/code> reports whether the control panel is connected.<\/li>\n<li>Replacing llms.txt now requires the <code>publish_pages<\/code> capability (Editors and above) instead of <code>edit_posts<\/code>.<\/li>\n<li>Deleting the plugin keeps your SEO metadata, llms.txt and control-panel connection, so ghost.blog's automatic updates (which reinstall the plugin) never strip them. Use Disconnect in the panel to end the connection.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>An SEO plugin is now optional: when none is active, the connector stores SEO metadata itself and renders the title, meta description and Open Graph \/ Twitter tags.<\/li>\n<li>Steps aside automatically for Yoast, Rank Math, AIOSEO, SEOPress, The SEO Framework, Slim SEO and Squirrly, and leaves Open Graph alone when Jetpack is already emitting it, so pages never carry duplicate tags.<\/li>\n<li><code>GET \/info<\/code> now reports whether the built-in renderer is active and, if not, which plugin is handling the head.<\/li>\n<li>Purge page caches after writing SEO metadata or llms.txt, so LiteSpeed, WP Rocket and W3 Total Cache stop serving the previous version.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Serve a brand llms.txt at \/llms.txt, generated and pushed by Ghost.blog for AI search engines.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release. Yoast SEO, Rank Math, and AIOSEO support.<\/li>\n<\/ul>","raw_excerpt":"Run ghost.blog from wp-admin: generate articles and keep a publishing schedule going. Also feeds SEO metadata to Yoast, Rank Math or AIOSEO.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/327619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=327619"}],"author":[{"embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/devf36c6ea5cc31"}],"wp:attachment":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=327619"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=327619"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=327619"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=327619"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=327619"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=327619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}