=== ABDS SEO === Contributors: abdsseo Tags: seo, content analysis, rank tracking, schema, gutenberg Requires at least: 6.8 Tested up to: 7.1 Requires PHP: 8.0 Stable tag: 0.9.3 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Technical + content SEO with block-level recommendations in Gutenberg, one-click migration from other SEO plugins, and optional AI on your own key. == Description == ABDS SEO analyzes your site both technically and by content, and gives you concrete, actionable recommendations — down to the individual Gutenberg block, not just the meta fields. The whole free feature set works with no account, no external service, and no API key. Optional integrations (AI, SERP data, Search Console) are strictly bring-your-own-key: your site talks to the provider you chose, with your own credentials, and never through a vendor proxy. **Free features** * Technical SEO audit via an internal scanner (WP_Query) — no mandatory external crawler. * One-click migration of existing SEO data from Yoast SEO, Rank Math, and All in One SEO — nothing is deleted without your confirmation. * Rule-based content analysis right in the editor: focus-keyword density and placement, readability, and a pixel-accurate Google snippet preview. * Block-level recommendations in the Gutenberg sidebar — with a Classic Editor fallback (meta box + post-list SEO score column) for sites that don't use the block editor. * Meta title / description / focus-keyword editor with a changes log for the fields the plugin owns. * Schema (JSON-LD) validation during scanning. * All heavy work runs asynchronously in the background via Action Scheduler, so the plugin never slows down the front end. **Pro / Business / Agency features (a separate add-on)** These come with ABDS SEO Pro — a separate plugin you download from your ABDS account after buying a plan and activate with your license key. This free plugin contains none of the paid code; installing that add-on is what enables the features below. * AI assistance (BYOK): rewrite titles/descriptions and fix content issues using your own OpenAI-compatible, Anthropic, or Google Gemini key, with an enforced spend limit. * SERP competitor analysis and content-gap detection (BYOK: SerpApi). * Keyword volume/difficulty and backlink data before you commit to a focus keyword (BYOK: DataForSEO). * Local rank tracking with location support, decay detection, and drop alerts. * Local SEO: NAP consistency checker and LocalBusiness JSON-LD validation. * Google Search Console integration (your own account) for real search-analytics-driven priorities. * Internal-linking suggestions (orphan detection) and site-vs-site competitive analysis. * Behavioral analytics (CRO): cookieless click/scroll heatmaps, rage-click detection, a guardrailed popup builder, and sequential meta-CTR tests. Off by default. * Monthly white-label-ready reports and a weekly e-mail digest of the top priority actions. * Agency: push a multi-site overview to the ABDS agency cabinet. The free plugin is fully functional on its own; the paid tiers add capabilities, they do not cripple the free ones. == Installation == 1. Install and activate the plugin from the Plugins screen in wp-admin. 2. If Yoast SEO, Rank Math, or AIOSEO is active, the plugin offers a migration wizard to import your existing data. 3. After migration (or right away, if no other SEO plugin is found) the first site scan starts in the background. No account or key is required for the free features. == Frequently Asked Questions == = Do I need an API key to use the plugin? = No. Everything in this free plugin — the technical audit, rule-based content analysis, migration, and snippet preview — works with no key and no third-party service. The optional integrations that use your own API keys (AI, SERP, DataForSEO, Google Search Console) are part of the separate ABDS SEO Pro add-on, not this free plugin (see "External services"). = What happens to my Yoast / Rank Math data when I activate ABDS SEO? = Nothing is deleted automatically. The plugin offers to import your data via the migration wizard and only deactivates the old plugin after you confirm. = Does the free version phone home or send my data anywhere? = Only in one narrow, anonymous way, as of 0.9.0: opening the plugin's own Settings screen fetches the current subscription prices from the ABDS license server, so the upgrade options it shows are accurate. That request carries no license key, no site URL, and nothing else about your site — it's the same public price list anyone could load in a browser — and it's cached, so it doesn't repeat on every visit; if it ever fails, Settings just falls back to the plugin's built-in prices instead of breaking. Every OTHER third-party call — the actual license check — still only happens after you enter a license key. A free install that never opens Settings and never enters a key makes no license-related contact at all. The paid integrations that would send data elsewhere live in the separate ABDS SEO Pro add-on, not here (see "External services"). = How are paid features unlocked and updated? = Buy a plan, then install the separate ABDS SEO Pro add-on (downloaded from your ABDS account) and activate your license key. The paid features live entirely in that add-on — this free plugin ships none of them. This free plugin always updates from WordPress.org like any other plugin; the Pro add-on delivers its own updates from the ABDS license server once activated. == External services == This free plugin contacts exactly one third-party service, and only when you choose to activate a license: * **ABDS License Server** (https://license.abds-seo.com) — contacted in two cases. (1) Opening the plugin's Settings screen fetches the current subscription prices, an anonymous public request that sends no license key, site URL, or any other site-identifying data; the result is cached, so this isn't repeated on every visit, and a failed request just falls back to the plugin's built-in prices. (2) Activating a license key (to validate it), or the ABDS SEO Pro add-on checking your license and fetching its own updates — these send your license key, your site URL, and a random per-install identifier (not derived from any WordPress secret). A free install that never opens Settings and never enters a license key makes no contact at all. Governed by the ABDS Terms of Service (https://abds-seo.com/en/terms) and Privacy Policy (https://abds-seo.com/en/privacy). Nothing else in this free plugin makes third-party network calls. The technical audit, rule-based content analysis, migration, and snippet preview all run locally, and the scanner only fetches your own site's pages (a same-site loopback request) to inspect their markup. The optional paid integrations — AI assistants (OpenAI-compatible, Anthropic, Google Gemini), SERP/competitor analysis, DataForSEO keyword and backlink data, Google Search Console, and the agency multi-site cabinet — are **not part of this free plugin**. They live in the separate ABDS SEO Pro add-on and connect to their own services only after you enable each one there with your own credentials; those services are documented with that add-on. == Source code == The JavaScript and CSS in the `build/` folder are compiled with [@wordpress/scripts](https://www.npmjs.com/package/@wordpress/scripts) (webpack). The uncompiled, human-readable sources are included in this package under `/src` (`admin.js`, `index.js`, `sidebar.js`, `snippet-width.js`, `style.css`). To rebuild them, run `npm install` and then `npm run build` in the plugin folder. == Screenshots == 1. Dashboard with the overall SEO score and the attention list. 2. Block-level recommendations in the Gutenberg sidebar. 3. Pixel-accurate Google snippet preview. 4. Migration wizard importing data from another SEO plugin. 5. Settings, organized as per-provider cards. 6. Reports overview. == Changelog == = 0.9.3 = * Content score recalibrated against Yoast SEO and Rank Math on a real side-by-side test (same post, same content, all three plugins measuring it): our score used to land noticeably off from the other two on well-optimized content. Two real bugs were the cause — the H1 check was looking for a literal `