=== Your SEO Squad ===
Tags: seo, metadata, content, connector
Requires at least: 6.8
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 1.12.2
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html

Connect WordPress to Your SEO Squad to apply individually approved SEO changes, with revision checks and guarded undo.

== Description ==

Your SEO Squad connects your WordPress website to the [Your SEO Squad service](https://yourseosquad.com/). The service scans public pages, prepares SEO recommendations and reviewed drafts, and manages approvals and verification. A Your SEO Squad account and paid service access are required for remote work. The connector code is free software; it does not impose a local trial, quota or license-key paywall.

After you connect your account, the connector lets the service read supported page information and apply changes you approve individually in the dashboard:

* Search titles and meta descriptions on public posts, pages and supported category archives.
* New sections, internal links, image descriptions, heading corrections and broken-link corrections in supported block-editor content.
* Individually approved passage changes in supported block-editor and classic text, with guarded passage undo.
* Confirmed business structured data on the front page.
* Removal of a page's own noindex setting in Yoast SEO, Rank Math, SEOPress, The SEO Framework and supported Squirrly SEO versions. This is unavailable for All in One SEO and native WordPress output.
* New unpublished pages, only after you separately enable draft creation in WordPress.

Changes use revision checks and operation identifiers. A newer edit blocks a stale apply or undo. The service checks the normal public visitor URL after a change. Draft pages remain unpublished for you to review and publish yourself.

= SEO plugins and supported websites =

Without an SEO plugin, title and description overrides use WordPress title-tag and head output. A theme supporting title-tag or a block theme is required.

The connector writes plugin-owned metadata fields for Yoast SEO, Rank Math, All in One SEO, SEOPress, The SEO Framework and Squirrly. It preserves unrelated canonical, social, schema and plugin settings. Supported versions start at Yoast 14.0, Rank Math 1.0.40, All in One SEO 4.0, SEOPress 5.0 and The SEO Framework 4.0. Squirrly is limited to 14.2.6 to 14.2.8 with metadata output enabled. Runtime configuration checks may prevent a change. Multiple active SEO plugins disable automated metadata changes. Category metadata is supported by native output, Rank Math, SEOPress and the supported Squirrly versions.

For Squirrly SEO 14.2.6 to 14.2.8, page search-visibility changes turn off only an existing page-level noindex flag, with exact prior-value undo. Squirrly's metadata and noindex output must be enabled. A post-type automation rule that hides the page, or disables Squirrly SEO for it, blocks this change; site-wide settings are never changed.

HTTPS, a single-site installation and InnoDB storage are required. Multisite, custom database drop-ins, password-protected or unpublished existing pages, tags, author/date/search archives and paginated category archives are unsupported. Block content changes are limited to the post's own supported content. Site-wide search visibility is never changed. The connector does not install, replace or deactivate other plugins.

After committing a change, the connector clears the changed page in common caching plugins and hosts when they are active; it does not clear unrelated URLs or change cache settings. Public verification still determines whether visitors receive the change.

= External service and privacy =

This plugin relies on Your SEO Squad, operated at [yourseosquad.com](https://yourseosquad.com/) and [app.yourseosquad.com](https://app.yourseosquad.com/). You opt in by creating a connection key under Settings > Your SEO Squad and entering it in your service account. Activation alone does not connect the service or send data to it. The plugin makes no scheduled outbound HTTP requests and loads no external scripts or assets. The service sends authenticated HTTPS requests to this website's REST API after you connect it.

Authenticated responses can include the site identity and root URL; connector, theme and installed-plugin information; supported public post/page content and metadata; supported category information; business structured data; per-page search visibility; and information about drafts created by this connector. Requests from the service include the chosen target, approved replacement content, change identifiers and revision checks. Approved changes and their prior values are stored locally for guarded undo; the service also maintains its change history. The connection key grants access to the supported connector endpoints. Keep it private and never share it in chat, email or screenshots.

The service performs scans, AI-assisted drafting and public verification on its own infrastructure. This connector does not contact an AI provider, send email, place external links for sale, or execute remotely supplied PHP or JavaScript. Any service-side processing and retention are governed by the service's policies:

* [Your SEO Squad Terms of Service](https://yourseosquad.com/terms/)
* [Your SEO Squad Privacy Policy](https://yourseosquad.com/privacy/)

= Disconnecting and stored data =

Click Disconnect under Settings > Your SEO Squad to revoke this website's key, and disconnect the website in the service dashboard too. Replacing a key immediately revokes the old key. Ordinary plugin updates preserve the connection and site identity.

Disconnecting, deactivating or deleting the plugin does not undo changes or erase its stored options, metadata and change history. Undo changes in the dashboard before disconnecting if you want them removed. Deactivation stops native connector metadata and business-markup output. SEO-plugin fields and edits already made to page content remain in WordPress. The plugin deliberately preserves these records for reconnection and guarded undo.

= Source and license =

The complete, unminified PHP source is included in this package. No build tools, bundled third-party libraries, remote updater or compiled assets are required to use or modify it. This package retains the GPLv2-or-later license declared by the connector since version 1.0.0; see LICENSE.txt.

== Installation ==

1. Upload the ZIP through Plugins > Add Plugin > Upload Plugin, then activate Your SEO Squad.
2. Open Settings > Your SEO Squad on your HTTPS website.
3. Create a connection key and enter it privately in your Your SEO Squad dashboard's WordPress connection settings. No general WordPress password is needed.
4. Review each proposed change in the dashboard before approving it.
5. If you want new pages saved as unpublished drafts, separately enable that option under Settings > Your SEO Squad.

== Frequently Asked Questions ==

= Does activation authorize changes? =

No. Remote access starts only after you create a key and enter it in the service. Each website change requires approval in Your SEO Squad. New draft creation also requires a separate WordPress setting.

= Do I need a paid account? =

A Your SEO Squad account with paid service access is required for recommendations, drafting and remote approved changes. Native overrides can also be edited in the connector's WordPress editor box when no recognized SEO plugin is active.

= Can I undo a change? =

The dashboard offers undo while the affected state still matches the connector's recorded change. Later owner edits block stale undo. A created page can be moved to the trash only while it remains an untouched unpublished draft.

= Does it replace my SEO plugin or publish new pages? =

It preserves your supported SEO plugin's own fields and controls. It does not replace plugins or publish newly created draft pages.

== Changelog ==

= 1.12.2 =
* Supports native metadata on block themes without title-tag support.
* Refuses text that an SEO plugin cannot store or would change when displayed, without changing the page.

= 1.12.1 =
* Preserve backslashes, quotes and Unicode in new-draft search titles and descriptions.

= 1.12.0 =
* Approved passage changes can update supported text blocks and classic paragraphs while preserving their links and formatting. Unsupported page builders and shared blocks need a developer.
* Undo restores the changed passage while its wording and surrounding content still match.
* Supports Squirrly SEO 14.2.8 for title, description and page search-visibility changes.

= 1.11.6 =
* Images: can describe one specific image whose alt text is empty, such as an image used as a link, after you approve that exact change. Every other image stays as it is, and undo restores the empty alt text.

= 1.11.5 =
* Page drafts: the connector no longer removes a draft it created with version 1.10.4 or earlier, because those versions did not record everything an owner can add to a draft (custom fields, social or schema settings). Review and remove such drafts yourself in WordPress. Drafts created with this version are still protected and removable exactly as before.
* Caches: the connector no longer reports a Cloudflare purge it cannot confirm. It still clears the page in the other supported caching plugins, and the public-page check still confirms what visitors see.

= 1.11.4 =
* Images: a lazy-loaded image whose address is in data-src (or data-lazy-src, data-original) can have its approved description added.

= 1.11.3 =
* Text changes: save notices now run before the change is committed, so a post-save change by another plugin is told apart from an owner editing the page at the same moment; undo never overwrites the owner's edit.

= 1.11.2 =
* Caches: after a change or undo, the connector also clears the page in common caching plugins and hosts when they are active, and notes which ones ran.

= 1.11.1 =
* Text changes: if another plugin changes the page during WordPress's save notices, undo still restores the earlier text; that plugin's change is kept and its exact result is recorded as plugin-side, never as an owner edit.
* Public pages: the connector's own title and description support, including category checks, is worked out once per request and kept for five minutes, so a visitor's page doesn't repeat the checks.

= 1.11.0 =
* Image descriptions: a picture used more than once can be described on the copy the owner approved, leaving the other copies as they are.
* Add confirmed address parts and opening hours to business markup.
* Save draft titles and descriptions in All in One SEO and check both saved fields.
* Links: a page-relative link already on the page ("repair/") is read from that page's own address, so it isn't added twice.

= 1.10.5 =
* Draft pages: removal keeps a draft whose All in One SEO settings the owner changed in any way (robots, social, schema), and a draft made by an older connector is removed only while it has no SEO plugin record the older check couldn't see; a draft's SEO title and description count as saved only when they read back exactly.
* Text changes: words and links are inserted literally (a "$100" is never read as a pattern), and WordPress's save notices are sent after a change so other plugins learn of it.
* Public pages: the connector's own title/description support is worked out once per request and cached for five minutes.

= 1.10.4 =
* Image descriptions: images written with relative addresses or single-quoted attributes are matched, existing and decorative (alt="") descriptions are always kept, and nothing is changed unless every approved image is found.
* Draft pages: removal also keeps a draft whose password, page order or SEO plugin record (All in One SEO, Squirrly) the owner changed.

= 1.10.3 =
* A draft page is saved only at a free address, and is removed only while untouched: a featured image, page template, excerpt or any custom field the owner adds keeps it.

= 1.10.2 =
* Use the unique yourseosquad prefix for connector code and stored data. Existing connections, permissions, overrides, drafts and operation history are preserved during upgrade.
* Pause writes if stored namespaces conflict; preserve unambiguous public SEO output while the upgrade is repaired.

= 1.10.1 =
* Complete WordPress.org headers, service and privacy disclosures, installation instructions and license packaging.
* Omit the optional plugin-page URL when no separate plugin page exists; validate submission metadata before packaging.
* Handle a missing Authorization header without PHP deprecation notices.
* Prepare dynamic SQL identifiers and preserve native metadata updates through the WordPress database API.
* Preserve endpoint protocol 1, current SEO-plugin adapters, connection keys and the 1.10.0 database schema.

= 1.10.0 =
* Add guarded Squirrly SEO page-level noindex removal and exact stored-value undo; refuse pages hidden by site-wide Squirrly rules.

= 1.9.0 =
* Add guarded page-level search visibility changes and block-editor heading and link corrections.

= 1.8.0 =
* Refine confirmed business structured data and its guarded changes.

= 1.7.0 =
* Add confirmed business details to the homepage.

= 1.6.0 =
* Add internal links and image descriptions.

= 1.5.0 =
* Save approved new pages as unpublished drafts when enabled.

= 1.4.0 =
* Add approved sections to supported pages with guarded undo.

= 1.3.0 =
* Add metadata adapters for Yoast SEO, Rank Math, All in One SEO, SEOPress and The SEO Framework.

= 1.2.2 =
* Preserve scoped cache invalidation after approved metadata changes.
