=== Elevoire SEO Toolkit ===
Contributors: elevoire, hassanraza
Tags: seo, open graph, xml sitemap, schema, redirects
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 8.0
Stable tag: 1.1.1
Author: Elevoire
Author URI: https://elevoire.com
Author Website: https://elevoire.com
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A clean, powerful SEO plugin. Meta tags, Open Graph, Twitter Cards, XML Sitemap, Schema.org JSON-LD, Redirects, and focus-keyword analysis.

== Description ==

Elevoire SEO Toolkit gives you everything you need for on-page SEO without the confusion of heavyweight plugins. No upsells, no redirects to external dashboards, no unnecessary features. Just solid SEO fundamentals that work for any kind of website.

**What it does:**

* **Meta Title & Description** — Per-post and per-page overrides with a live Google preview
* **Focus Keyword & SEO Analysis** — Set a focus keyword per post and get instant checks: keyword in title, first paragraph, meta description, density, word count, and internal links
* **Title Templates** — Use variables like `%title%`, `%sitename%`, `%sep%`, `%category%`, `%author%` across all post types
* **Open Graph tags** — Full `og:` meta support with `og:image:alt` and correct `og:locale` format
* **Twitter / X Cards** — Separate toggle, `twitter:creator` per post and per author profile
* **Canonical URLs** — Global and per-post canonical control, with correct paged archive canonicals
* **Robots Meta** — Per-post noindex/nofollow, plus granular archive rules including a paged-archive toggle
* **XML Sitemap** — Paginated sitemap index with real taxonomy lastmod dates, per-post-type priorities, image support, and XSL stylesheet
* **Schema.org JSON-LD** — WebSite, Organization/Person, WebPage, Article/BlogPosting/NewsArticle, BreadcrumbList, WooCommerce Product
* **Redirect Manager** — Add, enable/disable, and track 301/302/307/308 redirects with hit counters, no extra plugin needed
* **robots.txt Editor** — Append custom directives to your virtual robots.txt from within WordPress
* **hreflang Support** — Automatic alternate link tags when WPML or Polylang is active
* **REST API** — Full computed SEO meta exposed via `/wp-json/elevoire-seo/v1/meta/{id}` for headless WordPress setups
* **Performance Hints** — Preconnect to Google Fonts and DNS prefetch for your CDN
* **Character Counters** — Live visual feedback on title and description length directly in the editor
* **WP Cleanup** — Remove generator tag, RSD link, and shortlink from `<head>`
* **Search Engine Pinging** — Notifies Google and Bing automatically on publish

**No tracking. No telemetry. No accounts required.**

== Installation ==

1. Upload the `enhanceo` folder to `/wp-content/plugins/`
2. Activate the plugin through the **Plugins** menu in WordPress
3. Go to **Elevoire SEO Toolkit** in your admin sidebar to configure settings

**Upgrading from 1.0.0:** Simply update the plugin. All existing settings are preserved automatically. The new redirect manager table is created on first load — no deactivation/reactivation needed.

== Frequently Asked Questions ==

= Does it conflict with other SEO plugins? =
You should only run one SEO plugin at a time. If you have another SEO plugin active, deactivate it before using Elevoire SEO Toolkit to avoid duplicate meta tags.

= Where is my sitemap? =
At `yourdomain.com/sitemap.xml`. You can enable/disable it and choose which post types and taxonomies to include under **Elevoire SEO Toolkit → Sitemap**.

= Can I set a custom title and description per post? =
Yes. A metabox appears on every post/page edit screen with a live Google preview, character counters, focus keyword analysis, and fields for title, description, social image, Twitter creator, robots, and canonical URL.

= Does it support custom post types? =
Yes. Title templates and metaboxes work on all public post types automatically.

= Is it compatible with the block editor (Gutenberg)? =
Yes. The metabox appears in the sidebar for all editors.

= Does it support WooCommerce? =
Yes. When WooCommerce is active, the plugin automatically outputs Product schema with price, availability, and aggregate rating structured data.

= Does it support multilingual sites (WPML / Polylang)? =
Yes. When WPML or Polylang is active, `hreflang` alternate link tags are automatically output for all available translations.

= Can I use it with a headless WordPress setup? =
Yes. All computed SEO meta (title, description, canonical, robots, OG, Twitter, schema type) is available via the REST API at `/wp-json/elevoire-seo/v1/meta/{post_id}`, and as a `seo_meta` field on all standard post endpoints.

= Does it contact any external services? =
When a post or page is published, the plugin optionally notifies Google and Bing of your sitemap URL. This sends only your public sitemap URL to `google.com/ping` and `bing.com/ping` — no personal data, no user data. You can disable this by disabling the sitemap entirely under Elevoire SEO Toolkit → Sitemap.

== External Services ==

This plugin contacts the following external services under specific conditions:

**Google Ping** (`https://www.google.com/ping`)
When a post or page is published, the plugin sends your sitemap URL to Google's ping endpoint to notify it of new content. Only your public sitemap URL is transmitted. No user data or personal information is sent.
- [Google Privacy Policy](https://policies.google.com/privacy)

**Bing Ping** (`https://www.bing.com/ping`)
Same as above, for Bing/Microsoft search.
- [Microsoft Privacy Policy](https://privacy.microsoft.com/en-us/privacystatement)

Both pings can be disabled by turning off the XML Sitemap under **Elevoire SEO Toolkit → Sitemap**.

== Privacy Policy ==

Elevoire SEO Toolkit does not collect, store, or transmit any personal data about site visitors or site administrators. All SEO data (titles, descriptions, redirects, etc.) is stored locally in your WordPress database.

The only external contact this plugin makes is the optional search engine ping described above, which transmits only a public URL.

== Screenshots ==

1. Settings — General (title templates, robots, noindex options)
2. Settings — Social (Open Graph, Twitter Cards — separate toggles)
3. Settings — Sitemap (with per-post-type priorities)
4. Settings — Schema.org (configurable article type)
5. Settings — Redirects (add/manage 301–308 redirects with hit counters)
6. Settings — Advanced (robots.txt editor, performance hints)
7. Post editor metabox with live Google preview, focus keyword analysis, and media picker

== Changelog ==

= 1.1.1 =
* Fixed: Twitter Cards now have their own `twitter_enabled` toggle, independent of Open Graph
* Fixed: Paged archives (page 2+) noindex is now a configurable setting, not hardcoded
* Fixed: Author sitemap entry now respects the "Noindex Author Archives" setting
* Fixed: `get_post_type_archive_link()` received wrong argument type — CPT archive canonicals now resolve correctly
* Fixed: `article:published_time`/`article:modified_time` no longer emitted on pages and products
* Added: `og:image:alt` tag using WordPress media library alt text
* Added: `twitter:creator` per-post field and per-author profile field
* Fixed: `og:locale` now correctly outputs `ll_CC` format for all locales
* Added: `<meta name="author">` on singular posts
* Added: Configurable article schema type (BlogPosting, Article, NewsArticle, TechArticle)
* Fixed: Taxonomy sitemap entries now carry real `lastmod` dates
* Added: Per-post-type sitemap priority overrides
* Added: `hreflang` alternate link tags (WPML and Polylang support)
* Fixed: Paged archives now emit correct paginated canonical URLs
* Added: WordPress media library picker for the Social Image field in the metabox
* Moved all inline styles to admin.css
* Added: Focus keyword field with live SEO analysis (keyword in title, intro, description, density, word count, internal links)
* Added: Redirect Manager (301/302/307/308 with hit counting, enable/disable toggle)
* Added: robots.txt extra rules editor on Advanced settings tab
* Added: Performance hints (preconnect Google Fonts, dns-prefetch CDN)
* Added: REST API endpoint `/wp-json/elevoire-seo/v1/meta/{id}` and `seo_meta` field on post endpoints
* Added: WooCommerce Product schema with Offer, price, availability, and AggregateRating
* Refactored: Class-map autoloader replaces manual require_once chain
* Refactored: Plugin init wrapped in `Enhanceo_SEO_Bootstrap` class, no more global functions
* Added: Schema version + automatic settings migration for future upgrades
* Added: CHANGELOG.md

= 1.0.0 =
* Initial release
