=== Coocadev SEO Suite ===
Contributors: coocadev
Tags: seo, meta tags, schema, sitemap, audit
Requires at least: 6.4
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 0.76.19
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Coocadev SEO Suite helps manage SEO titles, meta descriptions, schema, sitemaps, robots rules, audits, and metadata.

== Description ==

Coocadev SEO Suite is a modular SEO plugin for WordPress. This WordPress.org package focuses on practical SEO essentials: metadata, indexing basics, sitemaps, robots helpers, schema checks, content audits, and bulk metadata workflows.

The goal is simple: help you see what needs attention, make safer SEO changes, and avoid getting lost in every possible advanced option at once.

= What you can do with Coocadev SEO Suite =

* Set SEO titles and meta descriptions.
* Control canonical URLs and robots meta settings.
* Generate and manage XML sitemap output.
* Review robots.txt and URL rules.
* Run SEO audits and see missing metadata.
* Use bulk metadata tools to find pages that need work.
* Validate schema output and review safe schema fixes.
* Use local helper text inside the plugin admin screens.

= Optional integrations =

Some integrations are available only when you explicitly enable or connect them. The plugin does not send data to third-party services just because it is installed.

== External services ==

Coocadev SEO Suite can interact with third-party services only when you enable a related feature, connect the service, or trigger the related action.

= Google Site Kit integration =

The public package can detect an installed Google Site Kit plugin, show its setup status, and open the Site Kit workflow. After the site owner explicitly enables the integration and Site Kit exposes Search Console metrics, the plugin can display supported metrics through Site Kit's internal WordPress REST endpoints. The standalone Coocadev Search Console Hub and direct Google OAuth runtime are not included in this package.

* Service: Google Site Kit; Google Search Console data made available by Site Kit
* Data sent or requested: site URL, property information, and search performance queries for the connected site.
* When it happens: only after the site owner installs and connects Site Kit, grants consent in Coocadev SEO Suite, and opens or refreshes the Site Kit insights screen.
* Optional Google Maps links: when the site owner enables the Local SEO/NAP map link, the plugin can display a link that opens Google Maps in the visitor's browser with the public business address or coordinates configured by the site owner. The plugin does not make a server-side request to Google Maps for this link.
* Terms of service: https://policies.google.com/terms
* Privacy policy: https://policies.google.com/privacy

= IndexNow URL submission =

The plugin can submit public URLs to the IndexNow protocol endpoint when the site owner enables the IndexNow module or manually runs a related ping action. IndexNow is an external search-engine notification protocol used to tell participating search engines that public site URLs were added, updated, or deleted.

* Service: IndexNow
* Endpoint: https://api.indexnow.org/indexnow
* Data sent: the site host, the public URL or URL list being submitted, and the generated IndexNow key/key location used to verify site ownership.
* When it happens: only when IndexNow is enabled and a manual or queued ping is triggered for public content or sitemap updates.
* Terms of service: https://www.indexnow.org/terms
* Privacy information: https://www.indexnow.org/terms

= Sitemap pings and structured-data test links =

When the site owner manually triggers sitemap ping actions, the plugin can send the public sitemap URL to Google and Bing ping endpoints. Schema and rich-results test buttons can also open Google or Schema.org testing pages in a new browser tab.

* Services: Google Search sitemap ping, Bing sitemap ping, Google Rich Results Test, Schema.org validator
* Endpoints: https://www.google.com/ping?sitemap=, https://www.bing.com/ping?sitemap=, https://search.google.com/test/rich-results, https://validator.schema.org/
* Data sent or requested: public sitemap URL or public page URL selected by the site owner.
* When it happens: only when the site owner clicks a related ping or test action, or when sitemap pinging is enabled by the site owner and a public sitemap refresh is queued after public content or term changes. Local-only mode and discouraged indexing settings block these requests.
* Google terms of service: https://policies.google.com/terms
* Google privacy policy: https://policies.google.com/privacy
* Microsoft services agreement: https://www.microsoft.com/servicesagreement
* Microsoft privacy statement: https://privacy.microsoft.com/privacystatement
* Schema.org terms of service: https://schema.org/docs/terms.html
* Schema.org information: https://schema.org/

= Video sitemap media URLs =

When the sitemap video feature detects a YouTube video ID in public content, the plugin can include YouTube embed and thumbnail URLs in the generated XML sitemap. The plugin does not request YouTube server-side for this sitemap output; search engines or visitors reading the sitemap may request those URLs later.

* Service: YouTube / Google
* Endpoints included in sitemap output: https://www.youtube.com/embed/, https://img.youtube.com/vi/
* Data included: public video ID found in public site content.
* When it happens: only when video sitemap output is enabled and public content contains a recognized YouTube video ID.
* YouTube terms of service: https://www.youtube.com/t/terms
* Google privacy policy: https://policies.google.com/privacy

= Slack and custom notification webhooks =

When notification channels are enabled by the site owner, the plugin can send notification messages to a Slack incoming webhook URL or to custom webhook URLs configured in the plugin settings.

* Services: Slack incoming webhooks and custom webhook destinations configured by the site owner.
* Data sent: notification title, message, severity, source/type, related admin or public URL when applicable, and for digest notifications a summary/list of open notification items.
* When it happens: only when the site owner enables Slack notifications or custom webhooks and a notification event or notification digest is queued and processed. Local-only/privacy mode blocks these external webhook requests.
* Slack terms of service: https://slack.com/terms-of-service
* Slack privacy policy: https://slack.com/privacy-policy
* Custom webhook terms and privacy: determined by the destination URL configured by the site owner.

= Optional ChatGPT helper links =

The plugin can display optional helper links that open ChatGPT in a new browser tab. These links are shown only as administrator helpers inside plugin screens.

* Service: OpenAI / ChatGPT.
* Data sent automatically: none. The plugin does not automatically send site data, settings, content, credentials, or prompts to these services.
* Data sent when used: if an administrator manually copies and pastes generated helper text into ChatGPT, only the text the administrator chooses to submit is sent to ChatGPT.
* When it happens: only when an administrator clicks an optional ChatGPT link or manually copies text into an external service.
* Server-side requests: the plugin does not make server-side API requests to ChatGPT for these helper links.
* OpenAI terms of use: https://openai.com/policies/row-terms-of-use/
* OpenAI privacy policy: https://openai.com/policies/row-privacy-policy/

== Installation ==

1. In WordPress admin, go to Plugins -> Add New Plugin.
2. Click Upload Plugin.
3. Choose the Coocadev SEO Suite ZIP file.
4. Click Install Now.
5. Click Activate Plugin.
6. Open Coocadev SEO Suite from the WordPress admin menu.

If you are new to SEO plugins, start with the dashboard and run one audit before changing many settings.

== Frequently Asked Questions ==

= Does Coocadev SEO Suite work without connecting external services? =

Yes. The WordPress.org package can manage local SEO metadata, sitemaps, robots settings, schema checks, and audit screens without connecting external services.

= Does the plugin send my content to Google or another service automatically? =

No. External services are opt-in. Data is sent only when you connect the service and use a related feature.

= Can I disable features I do not need? =

Yes. Coocadev SEO Suite is modular. Its local tools work without an account key or an external account connection.

= What should I configure first? =

Start with titles, meta descriptions, sitemap status, robots basics, and one SEO audit. Advanced settings can wait until you have a real reason to change them.

== Screenshots ==

1. Coocadev SEO Suite dashboard with the recommended next step.
2. Settings screen with local helper text.
3. SEO Audit screen with issue summary.
4. Metadata tools for missing titles and descriptions.
5. Schema Validator screen.

== Changelog ==

= 0.76.19 =
* Fixed stale metadata, sitemap and WooCommerce feed caches after content changes.
* Fixed bulk job initialization, CSV/JSON imports, search URL normalization and plain-permalink breadcrumbs.
* Fixed local audit completion, bulk/low-score table rendering and assets on mirrored admin pages.
* Retained the security and clean-install fixes from 0.76.18 and expanded functional regression coverage.

= 0.76.18 =
* Register modules before their init callbacks so fresh installations create their tables and register metadata correctly.
* Replaced an unavailable inline-style helper with the WordPress registered-style API, fixing admin and sitemap rendering.
* Re-tested the public package on WordPress 7.1.2 and updated the compatibility header.
* Reject malformed array input in scalar admin request fields and onboarding task actions.
* Removed package-tier restrictions from features implemented in this WordPress.org package.
* Made the complete local editor suggestion workflow available and kept optional integrations dependent only on their installed runtime.
* Removed ignored queue controls and the unavailable SQL audit branch.
* Hardened admin handlers so capability and nonce checks happen before request data is read.
* Added strict request-field sanitization to the custom-fields token tester.
* Centralized placeholder-based dynamic SQL preparation and removed inactive account/billing configuration from the public package.
* Removed Search Console routes, settings, editor panels, and onboarding prompts when its optional runtime module is not installed.
* Removed settings, presets, rewrites, builder panels, and notification links owned by optional runtime modules that are not installed.

= 0.76.17 =
* Added targeted Plugin Check annotations for prepared custom-table SQL queries that use plugin-owned tables, whitelisted SQL fragments, and sanitized dynamic values.

= 0.76.16 =
* Fixed Plugin Check database-prepare annotations around dynamic but sanitized custom-table queries.
* Updated Tested up to to WordPress 7.0.
* Replaced version-sensitive list detection helper usage and normalized line endings.
* Kept the background queue runtime on fixed implementation limits.

= 0.76.15 =
* Removed obsolete background processing tuning code paths.
* Removed obsolete background queue tuning controls and kept fixed internal runtime limits.
* Made breadcrumb shortcode and content auto-insert sanitization explicit after the breadcrumbs HTML filter runs.

= 0.76.14 =
* Removed the public directory build's MU-plugin recovery installer and related recovery links.
* Normalized centralized admin request reads before returning values to callers.
* Expanded the IndexNow external-service disclosure with explicit endpoint, submitted data, trigger conditions, and terms/privacy link.

= 0.76.13 =
* Repacked the WordPress.org ZIP with POSIX-safe paths and the final public directory slug.
* Added explicit WordPressCS annotations around safe WordPress inline style/script helper output.
* Hardened inline confirmation output reported by Plugin Check and reran the public package checks.

= 0.76.12 =
* Updated the WordPress.org package name, text domain, and requested slug to Coocadev SEO Suite / coocadev-seo-suite.
* Documented IndexNow as an optional external service and clarified Google terms links.
* Removed non-public account wording from the public readme and hardened review-facing compliance notes.

= 0.76.11 =
* Ran the WordPress.org package through WordPress Plugin Check 1.9.0 and cleaned the reported compatibility issues.
* Added translator notes for dynamic UI strings and tightened safe request handling in the score helper.
* Updated SQL prepare patterns and normalized line endings for WordPress.org checks.

= 0.76.10 =
* Repacked the Free ZIP with POSIX-safe forward-slash paths for clean Linux/WordPress extraction.
* Kept the 0.76.9 UTF-8/mojibake cleanup and Russian stopword restoration.

= 0.76.9 =
* Cleaned remaining mojibake/UTF-8 corruption in Free admin labels, diagnostics, audit, bulk, schema, and helper screens.
* Restored the Russian stopword list used by local keyword suggestions.
* Kept UI copy ASCII-safe where practical so shared hosts and older consoles do not render broken arrows, quotes, dashes, or ellipses.

= 0.76.8 =
* Added content-intent presets and editable analysis thresholds for short pages, normal pages, and long guides.
* Connected editor analysis, audit scans, and bulk checks to the same title, description, keyword-density, and body-length thresholds.
* Added an audit host preset to slow browser polling/pump behavior on constrained shared hosting.
* Added direct "Fix here" links from SEO Audit issues into the editor Analysis panel.
* Hardened post and term bulk CSV imports against empty files, unsupported UTF-16-style encodings, blank rows, and rows with extra cells.

= 0.76.7 =
* Delayed full plugin boot until init to avoid early textdomain notices before HTML, XML, JSON, or AJAX output.
* Added sitemap rewrite self-healing, /wp-sitemap.xml compatibility alias, and canonical /sitemap.xml manual pings.
* Enabled the SEO plugin conflict guard by default and added an admin warning when another SEO plugin can duplicate output.
* Cleaned homepage fallback descriptions, breadcrumb schema duplicates, organization sameAs URL sanitization, and broad schema suggestions.

= 0.76.6 =
* Added contextual analysis evidence: metric value, thresholds, rendered excerpt, why it matters, and next action.
* Added focus keyword density/frequency to the analysis checklist and editor stats.
* Aligned editor analysis title/description thresholds with filterable audit thresholds.
* Made SEO Audit status polling gentler and configurable for constrained hosts.

= 0.76.5 =
* Fixed robots.txt sitemap output so Free publishes one canonical plugin sitemap directive.
* Disabled WordPress core sitemaps while the plugin sitemap module is active.
* Made the admin-ajax disabled notice permanently dismissible per admin user.
* Replaced the Settings page title separator with an ASCII-safe hyphen.

= 0.76.4 =

* Front helper: added on-page SEO title, meta description, focus keyword, and H1-H6 editing for editors.
* Helper blocks: insert, edit, move, view, and remove blocks directly on the page without AJAX.
* Image helper blocks: added visible placeholders plus media upload/choose controls for real images and ALT text.
* Score feedback: every helper save/edit/delete/move now says whether the score changed or stayed the same after recalculation.
* SEO Audit: failed or incomplete worker scans no longer clear live issues or appear as clean zero-issue scans.


= 0.76.3 =

* Free dashboard: added a focused Optimal settings -> audit -> metadata path and reduced quick-action clutter.
* Settings help: refreshed old generic helpers automatically and added richer local guidance for title templates, description templates, and archive overrides.
* Editor sidebar: improved Free guidance for SEO title, meta description, focus keyword, and canonical URL fields.

= 0.76.2 =

* Settings help: restored concrete local guidance for site verification and breadcrumb fields, including Home label, separators, prefixes, display rules, and BreadcrumbList schema.
* Removed the temporary old settings-slug bridge from the WordPress.org package.

= 0.76.0 =

* Started the WordPress.org packaging path and normalized the package text domain.
* Extended centralized admin request handling to remaining public admin modules and normalized line endings.

= 0.75.98 =

* Centralized admin request sanitization across the highest-warning public admin screens.

= 0.75.97 =

* WordPress.org cleanup: documented final diagnostic table-status and admin-only user-meta audit query paths.

= 0.75.96 =

* WordPress.org cleanup: documented early AJAX action reads and remaining controlled sitemap/bulk/index log query paths.

= 0.75.95 =

* WordPress.org cleanup: documented additional controlled custom-table queries and read-only admin context reads without changing SEO behavior.

= 0.75.94 =

* WordPress.org cleanup: documented controlled plugin-owned custom-table SQL and read-only admin filters for Plugin Check.

= 0.75.66 =
* Added optimal settings preset workflow.
* Improved setup guidance for common WordPress SEO configurations.

= 0.75.31 =
* Improved dashboard and module flow for the SEO core.
* Added contextual help foundations for admin screens.

== Upgrade Notice ==

= 0.76.19 =
Fixes functional issues in audits, imports, caches and admin tools; retains the reviewed security fixes.

= 0.76.18 =
Removes review-blocking access restrictions and hardens request authorization and sanitization.
