=== SAEC SEO ===
Contributors: saec
Tags: seo, saec, metadata, wp-cli
Requires at least: 6.0
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 1.1.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html

Automatic SEO management for WordPress.

== Description ==
SAEC SEO provides read-only SEO audit, SEO override fields, optional SEO logs, and WP-CLI tooling for operational workflows.

Company information:
- SAEC Holding
- https://saec.me
- info@saec.me

== External Services ==

This plugin can connect to Google Search Console using Google APIs if (and only if) an administrator enables the feature and completes the OAuth authorization flow.

* Service: Google Search Console API (Google APIs)
* Purpose: retrieve Search Analytics metrics (pages, clicks, impressions, CTR, position) to display inside WordPress.
* When data is sent: only when you click “Connect” / “Pull” in the Search Console tab (manual action).
* Data sent to Google: your configured property URL (site URL) and the selected date range/row limit used for the Search Analytics request.
* Data stored locally: OAuth token data is stored in a WordPress option; retrieved metrics are cached in WordPress options for display/export.

Relevant policies:
* Google API Services User Data Policy: https://developers.google.com/terms/api-services-user-data-policy
* Google APIs Terms of Service: https://developers.google.com/terms
* Google Privacy Policy: https://policies.google.com/privacy

== Installation ==
1. Upload the plugin to /wp-content/plugins/ or install via ZIP upload.
2. Activate the plugin through the 'Plugins' menu in WordPress.
== Changelog ==
= 2.4.10 =
* Admin: redesigned Sitemap tab layout (WP-native cards/grid).

= 2.4.8 =
* Remove all remaining Pro/Agency limitation references and related settings.
* Remove WP-CLI integration from WP.org build.
* Remove bundled translation files (handled by WordPress.org translation system).

* 2.3.1
- Fix: strict tab-save sanitization against defaults schema; avoid processing entire $_POST/$_REQUEST.
- Fix: admin assets use wp_register_* + wp_enqueue_*; nonce action aligned with save endpoint.
- Fix: remove HTML-wrapped translation string in Help tab; add missing translators comments.
- Fix: additional wp_unslash/sanitize handling for editor AJAX saves.

* 2.3.0
- Fix: load admin CSS/JS via wp_register_* and wp_enqueue_*; move inline CSS to enqueued stylesheet.
- Fix: add nonce and capability checks; sanitize/validate inputs; escape output for key admin/front-end renders.
- Fix: secure SQL queries with $wpdb->prepare() and escaped allowlisted table names.
- Fix: remove direct file writes for robots/sitemap actions; use dynamic generation.
- Docs: document Google Search Console external service usage.


= 2.2.4 =
* Add a small in-plugin (settings page only) link to SAEC SEO information.
* Fix admin permission message string.

= 2.2.2 =
* Rebuilt Help tab: exhaustive documentation of all plugin features (fully translatable).


= 2.2.1 =
* WordPress.org: remove runtime translation generation; ship compiled .mo files.
* Admin: load assets only on SAEC SEO admin page.
* Readme: Tested up to 6.9.

= 2.1.9 =
* Fix: Scores "Quick fix" button now triggers AJAX action and shows status/log.


= 2.1.8 =
* System alerts: optional orphan pages threshold triggers an email notification.
* Fix: orphan scan suggestions query now uses a defined post type list (prevents PHP notices).

= 2.1.7 =
* System: orphan hints now include inbound/depth and suggested internal link sources.
* Admin: improved orphan list rendering.


= 2.1.6 =
* Fix: prevent fatal by implementing Runtime::filter_wp_sitemaps_enabled() (used to disable WordPress core sitemaps when configured).
* UI: Dashboard layout updated (key blocks now span full width where appropriate; improved spacing).

= 2.1.5 =
* Sitemap: option to disable WordPress core sitemap (wp-sitemap.xml) and use SAEC sitemap only.

= 2.1.4 =
* System: improved orphan page detection (internal links extraction + inbound count + approximate depth from menus).
* Export: system scan JSON/CSV and Search Console snapshots/deltas export.

= 2.1.3 =
* UI: wider admin container for clearer 50/50 grid on the Dashboard.

= 2.1.2 =
* Add: system alerts (HTTP errors/latency thresholds) with email notifications and cooldown.

= 2.1.1 =
* Fix: register admin-post action for “Run system scan”.
* Add: daily systemic scan cron.

= 2.1.0 =
* Add: System tab (basic) with local-only systemic SEO checks (HTTP availability for key endpoints, orphan page hints, SAEC Perf bridge presence).
* Add: Manual “Run system scan” action storing last results (UTC timestamp).

= 2.0.10 =
* Fix: PHP fatal "Multiple access type modifiers" (removed stray orphan modifier before render_tab_sitemap).

= 2.0.9 =
* Fix: add missing render_tab_sitemap() to prevent fatal when opening Sitemap tab.

= 2.0.8 =
* Fix: remove stray tokens in admin class that could break admin rendering.
* Fix: ensure AJAX save handler is a proper class method.
* Sitemap: add transient cache for sitemap responses (configurable TTL).
* Sitemap: exclude password-protected content from sitemap.

= 2.0.7 =
* Fix: admin settings save fallback via admin-post.php when admin-ajax.php returns 400.
* UI: Automation + Redirects forms switched to POST fallback while keeping AJAX when available.
* Add: Sitemap tab (URLs, settings, rebuild).

= 2.0.6 =
* Fix: PHP parse error in includes/class-db.php (activation rewrite hook).


= 2.0.3 =
* Fix: removed extra closing tags causing WordPress footer to appear mid-page (Automation / Redirects tabs).
* Fix: Automation tab settings now save (AJAX tab key supported).
* Fix: Run-now AJAX uses correct parameter (run) and supports existing buttons.
* UI: Two-column admin layout on all tabs except Scores.
* i18n: force plugin-generated MO file (from shipped PO) to avoid mojibake when third-party translation files exist.

= 2.0.2 =
* Add: Google Search Console OAuth (connect/disconnect) and API pull for page metrics.
* Add: Search Console settings (Client ID/Secret, property, days, row limit) with AJAX save.
* Fix: i18n robustness — .mo files rebuilt from .po at runtime (removed packaged .mo to avoid mojibake).

= 2.0.1 =
* Fix: admin.js restored as real JavaScript (AJAX save/run).
* Fix: .mo recompiled from .po (UTF-8) to remove mojibake.
* Fix: Automation tab markup (removed stray closing label).
* Improvement: clearer AJAX error handling.

= 1.9.5 =
* Add: Regression detection (local baseline) via daily job and history/log entries.
* Add: Settings for regression scan scheduling and score-drop threshold.

= 1.9.4 =
* Packaging: repackaged release (new ZIP).
* Version: bump to 1.9.4.

= 1.9.3 =
* Fix: i18n – recompiled all .mo files from .po (UTF-8) to prevent mojibake in admin UI.

= 1.9.1 =
* Fix: i18n – regenerated .mo files from .po and completed missing admin strings translations.

= 1.8.3 =
* Fix: PHP fatal error (duplicate access modifier) in SEO logs.
* Fix: WP-CLI audit argument parsing.
* Add: WP-CLI command `saec-seo gsc list`.
* Add: WP-CLI command `saec-seo logs purge` (with --dry-run).
* Add: readme.txt with GPLv2 or later reference and SAEC Holding information.

== License ==
This plugin is licensed under the GNU General Public License v2 or later.


== More Features ==
A non-limited edition is available from the editor website: https://saec.me/suite-saec
