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