=== SEO Connector for Ghost.blog ===
Contributors: devf36c6ea5cc31
Tags: seo, yoast, rank math, aioseo, automation
Requires at least: 5.6
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.2.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Lets ghost.blog push SEO metadata into Yoast SEO, Rank Math or All in One SEO - or render it itself when you have no SEO plugin.

== Description ==

When ghost.blog publishes an article to your WordPress site, this connector
writes the AI-generated SEO title, meta description, focus keyword, and Open
Graph image into whichever SEO plugin you use:

* Yoast SEO
* Rank Math
* All in One SEO (AIOSEO)

**No SEO plugin? You no longer need one.** Since 1.2.0 the connector keeps the
metadata itself and writes the title, meta description and Open Graph / Twitter
tags into your pages directly. It does this only while no dedicated SEO plugin
is active - install one at any time and the connector stops rendering and hands
the metadata over to it instead, so your pages never carry duplicate tags.

The built-in renderer stays deliberately small: a title, a description and
social tags on single posts ghost.blog wrote. It does not touch canonicals
(WordPress already emits those), robots rules or sitemaps. If you want those,
install a full SEO plugin - the connector will feed it.

The plugin exposes three authenticated REST endpoints under `/wp-json/ghost-blog/v1/`:

* `GET /info` — reports the connector version and which SEO plugin is active.
* `POST /seo-meta` — writes SEO fields to a post.
* `POST /llms-txt` — stores the brand summary this site then serves at `/llms.txt`.

All three require a logged-in user with the `edit_posts` capability, using the
same application-password credentials you already configured in ghost.blog. The
plugin never phones home — it acts only in response to these authenticated
requests. The one file it serves publicly is `/llms.txt`, which is meant to be
read by answer engines.

== Installation ==

1. In your WordPress admin, go to Plugins → Add New and search for
   "SEO Connector for Ghost.blog".
2. Click Install Now, then Activate.
3. Back in ghost.blog, open the SEO Engine tab and click "Re-detect" — your SEO
   plugin should now show as connected.

== Frequently Asked Questions ==

= Do I need an SEO plugin installed? =

No, not since 1.2.0. If Yoast SEO, Rank Math or All in One SEO is active the
connector writes into it. If none is, the connector stores the metadata itself
and renders it into your pages.

The one case that still needs attention: if you run a dedicated SEO plugin the
connector has no adapter for - SEOPress, The SEO Framework, Slim SEO or
Squirrly - it steps aside to avoid duplicate tags, and metadata is not written.
Those plugins own your site's head, and the connector will not fight them.

= Does the plugin send my content anywhere? =

No. The plugin only responds to authenticated REST requests from ghost.blog. It
does not phone home or transmit any data on its own. The single exception is
`/llms.txt`, a public summary of your brand that ghost.blog pushes to the site
for answer engines to read; it contains nothing you have not already published.

= How does it authenticate? =

Requests use the WordPress application-password credentials you configure in the
ghost.blog WordPress integration. Every endpoint requires a user with the
`edit_posts` capability.

= My theme ignores the SEO title. Why? =

The built-in renderer sets the title through WordPress's own
`pre_get_document_title` filter, which only applies to themes that declare
`title-tag` support - effectively every theme written in the last decade. A
theme that hardcodes its own `<title>` tag will keep winning. The meta
description and social tags still apply there.

= Which SEO plugin does it write to if I have more than one active? =

The connector resolves a single adapter in priority order (Yoast SEO, then Rank
Math, then All in One SEO) and writes to the first supported plugin it detects.

== Screenshots ==

1. Managing the WordPress connection and SEO connector from the Ghost.blog dashboard — download the plugin, pick the target SEO plugin, and re-detect.

== Changelog ==

= 1.2.0 =
* 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.
* 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.
* `GET /info` now reports whether the built-in renderer is active and, if not, which plugin is handling the head.
* Purge page caches after writing SEO metadata or llms.txt, so LiteSpeed, WP Rocket and W3 Total Cache stop serving the previous version.

= 1.1.0 =
* Serve a brand llms.txt at /llms.txt, generated and pushed by Ghost.blog for AI search engines.

= 1.0.0 =
* Initial release. Yoast SEO, Rank Math, and AIOSEO support.

== Upgrade Notice ==

= 1.2.0 =
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.

= 1.1.0 =
Adds /llms.txt serving. No configuration needed.

= 1.0.0 =
Initial release.
