=== RezaTain SEO ===
Contributors: rezatain
Tags: seo, schema, sitemap, redirects, breadcrumbs
Requires at least: 6.8
Tested up to: 7.0
Stable tag: 1.0.27
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Modulares SEO-Plugin: Titel & Meta, Schema, Sitemaps, Weiterleitungen, interne Verlinkung, LLM-Crawler-Steuerung und lokale Analyse — schnell und datensparsam.

== Description ==

RezaTain SEO ist ein modulares, selbst gehostetes SEO-Plugin für WordPress. Alle Funktionen laufen lokal auf deiner Website — ohne Konto, ohne externe Pflicht-Dienste.

**Funktionen**

* **Titel & Meta-Beschreibungen** mit Variablen-System (Vorlagen je Beitragstyp, Begriff, Autor).
* **OpenGraph & Twitter Cards** für Social-Media-Vorschauen.
* **Schema/Structured Data** (16 Typen: Article, FAQ, HowTo, Recipe, Product, Event, LocalBusiness u. a.) mit automatischer Typ-Erkennung.
* **XML- & HTML-Sitemaps** inkl. News- und Video-Sitemap.
* **Weiterleitungen & 404-Monitor** mit eigener Verwaltung.
* **Broken-Link-Checker** und **Thin-Content-Erkennung**.
* **Interne Verlinkung** mit Vorschlägen.
* **Breadcrumbs**, **Hreflang**, **robots.txt-Editor**, **Crawl-Cleanup**.
* **LLM-SEO**: `llms.txt`-Generator und Steuerung von KI-Crawlern.
* **Besucher-Statistik** (datensparsam, DSGVO-freundlich, cookielose Basis-Stufe).
* **Import** bestehender SEO-Daten von Rank Math.
* **Block-Editor-Integration**: SEO-, Social-, Analyse- und Schema-Panels sowie FAQ-/HowTo-/Inhaltsverzeichnis-Blöcke.

**Pro-Erweiterung (optional)**

KI-gestützte Funktionen (Chat-Assistent, MCP-Schnittstelle, Autoposter, Artikel-Refresh, WP Advisor, Google-Search-Console-Integration) sind als separates Add-on „AI Aide" erhältlich. Der freie Kern funktioniert vollständig ohne dieses Add-on.

== External services ==

Der freie Kern arbeitet lokal. Vier optionale, datensparsame Funktionen können externe Dienste kontaktieren:

1. **Sitemap-Ping (Google & Bing):** Wenn aktiviert, wird bei einer Inhaltsänderung die URL deiner XML-Sitemap an Google (`https://www.google.com/ping`) bzw. Bing (`https://www.bing.com/ping`) gemeldet, damit Suchmaschinen Änderungen schneller finden. Übertragen wird ausschließlich die öffentliche Sitemap-URL deiner Website.
   Google: Datenschutz https://policies.google.com/privacy · Bedingungen https://policies.google.com/terms
   Bing/Microsoft: Datenschutz https://privacy.microsoft.com/privacystatement · Bedingungen https://www.microsoft.com/en-us/servicesagreement

2. **IndexNow:** Wenn aktiviert, werden geänderte URLs über das offene IndexNow-Protokoll (`https://api.indexnow.org`) an teilnehmende Suchmaschinen gemeldet. Übertragen werden die öffentliche URL und ein zufällig erzeugter Schlüssel.
   IndexNow: https://www.indexnow.org · Microsoft-Datenschutz https://privacy.microsoft.com/privacystatement

3. **Vimeo oEmbed (Video-Sitemap/-Schema):** Enthält ein Beitrag ein Vimeo-Video, ruft das Plugin die öffentliche Vimeo-oEmbed-Schnittstelle (`https://vimeo.com/api/oembed.json`) auf, um Video-Metadaten (Titel, Vorschaubild, Dauer) für Sitemap und Schema zu ermitteln. Übertragen wird nur die im Beitrag eingebettete Vimeo-URL.
   Vimeo: Datenschutz https://vimeo.com/privacy · Bedingungen https://vimeo.com/terms

4. **Broken-Link-Checker (Link-Prüfung):** Wenn aktiviert, prüft das Plugin die in deinen Beiträgen verlinkten Adressen, indem es an die jeweilige Ziel-URL eine ausgehende HTTP-Anfrage (zunächst HEAD, bei Bedarf GET) sendet und den Antwort-Status auswertet, um defekte Links (z. B. 404) zu erkennen. Kontaktiert werden ausschließlich die in deinen eigenen Inhalten bereits vorhandenen Ziel-Adressen; übertragen wird nur die jeweilige Link-URL (keine Besucher- oder personenbezogenen Daten). Einen festen Drittanbieter gibt es nicht — die kontaktierten Server ergeben sich aus den von dir gesetzten Links.

Diese Funktionen sind optional und können in den Einstellungen deaktiviert werden.

== Installation ==

1. Plugin im WordPress-Adminbereich unter „Plugins → Installieren" hochladen oder aus dem Verzeichnis installieren.
2. Aktivieren.
3. Den Einrichtungs-Assistenten durchlaufen (optional: vorhandene Rank-Math-Daten importieren).

== Frequently Asked Questions ==

= Brauche ich ein Konto oder eine Lizenz? =
Nein. Der freie Kern funktioniert vollständig lokal ohne Konto. Nur das optionale Pro-Add-on „AI Aide" nutzt KI-Dienste.

= Sendet das Plugin meine Daten an Dritte? =
Der freie Kern arbeitet lokal. Lediglich die vier optionalen Funktionen (Sitemap-Ping, IndexNow, Vimeo-oEmbed, Broken-Link-Checker) kontaktieren externe Dienste — siehe Abschnitt „External services".

== Screenshots ==

1. SEO sidebar in the block editor with live Google snippet preview and character counters.
2. Dashboard with modular feature toggles — switch off whatever you do not need.
3. Built-in content analysis: SEO score with concrete, actionable improvement hints.
4. Schema markup per post — 16 types including Article, FAQ, HowTo, Product and LocalBusiness.
5. Bulk SEO editor for titles, descriptions and keywords, with CSV import and export.

== Changelog ==

= 1.0.27 =
* Fehlerbehebung (Datenmigration): Die einmalige Präfix-Migration erfasste geschützte Meta-Schlüssel mit führendem Unterstrich (`_ai_aide_*`) nicht. Betroffen waren unter anderem die KI-Kennzeichnung, der Redaktions-Status, die Herkunft automatisch erzeugter Beiträge, die Abschaltung der internen Verlinkung je Beitrag und das seitenbezogene CSS. Ein Nachtrags-Lauf überführt diese Schlüssel verlustfrei; die Daten waren nie gelöscht, sondern nur unter dem alten Namen abgelegt.

= 1.0.26 =
* Sicherheit (WordPress.org-Review): Berechtigungsprüfungen für beitragsbezogene REST-Endpunkte und Post-Meta prüfen jetzt die objektbezogene Fähigkeit (`edit_post` für genau diesen Beitrag) statt der allgemeinen `edit_posts`-Fähigkeit.
* Sicherheit: Die Besucher-Auswertung (Geräte/Browser/Länder) bindet Spalten- und Tabellennamen über sichere Platzhalter (`%i`).

= 1.0.25 =
* Sicherheit (WordPress.org-Review): JSON- und JSON-LD-Ausgaben (Schema/Structured Data) verwenden jetzt die WordPress-Kernfunktion `wp_print_inline_script_tag()` / `wp_get_inline_script_tag()` statt direkter Ausgabe.
* Sicherheit: Die einmalige Datenmigration bindet Tabellennamen über sichere Platzhalter (`%i` in `wpdb::prepare()`).
* readme: Feature-Liste bereinigt (der .htaccess-Editor wurde bereits in 1.0.20 entfernt).

= 1.0.24 =
* Neu: Der Besucher-Report (Insights-Export) unterscheidet jetzt Inhalts-Segmente „News" und „Evergreen" und markiert Top-Seiten entsprechend — für einen direkten Vergleich der Bereiche. Rein aggregierte Kennzahlen, keine personenbezogenen Daten. Die News-Kategorie stammt aus den Sitemap-Einstellungen (bzw. einer Kategorie „News").

= 1.0.23 =
* Fix: Nach einem Update konnte der Browser (oder ein Caching-Plugin) ein zwischengespeichertes älteres Admin-Skript weiterverwenden, weil sich die Cache-Kennung nicht immer änderte — dadurch liefen im Einstellungen-Bereich REST-Aufrufe der Vorversion ins Leere („keine passende Route"). Die Cache-Kennung der Admin-/Editor-Skripte ist jetzt an die Plugin-Version gekoppelt, sodass jedes Update zuverlässig die neuen Skripte lädt.

= 1.0.22 =
* Fix: Im Zusammenspiel mit dem kostenpflichtigen Add-on liefen dessen REST-Aufrufe im Einstellungen-Bereich (Lizenz-Aktivierung, Google Search Console, MCP-Server, Autoposter) ins Leere („Es wurde keine passende Route gefunden"). Der Build hatte den Add-on-Namensraum fälschlich umgeschrieben; die Add-on-Routen bleiben nun unverändert. Betrifft nur Installationen mit aktivem Add-on.

= 1.0.21 =
* WordPress.org-Review: Alle plugin-eigenen Bezeichner nutzen jetzt durchgängig den eindeutigen Präfix „rezatain" — Options-, Post-/Benutzer-/Term-Meta-Schlüssel, Transients, Cron-Ereignisse, Fähigkeiten (Capabilities), Datenbank-Tabellen, Shortcodes, Block-Namensraum (rezatain-seo/*) und JavaScript-Objekte. Der frühere generische „ai"-Präfix wurde entfernt.
* Automatische, verlustfreie Datenmigration: Vorhandene Einstellungen, Meta-Daten, Fähigkeiten und Tabellen werden beim Update einmalig auf den neuen Präfix überführt — ohne Datenverlust.
* Sicherheit: Zusätzliche Ausgabe-Absicherung — script-sicheres JSON in Debug-Daten-Inseln (JSON_HEX_TAG), Escaping des KI-Hinweis-Textes im Beitragsinhalt und der JSON-Nutzlast in Admin-Schaltflächen.
* Der Beispiel-Platzhalter für die Standard-Sharing-Bild-URL nutzt jetzt example.com.
* Verbesserung: Die automatisch erzeugte Meta-Beschreibung (auch og:/twitter:description) entfernt jetzt Shortcodes — es erscheinen keine unverarbeiteten Kürzel mehr in Suchmaschinen- und Social-Media-Vorschauen.

= 1.0.20 =
* WordPress.org-Review: .htaccess-Editor aus dem freien Kern entfernt (kein Speichern beliebiger Server-Direktiven).
* REST-Berechtigungen verschärft: post-bezogene Endpunkte prüfen jetzt die post-spezifische Capability (edit_post).
* External-Services-Link (Bing/Microsoft-Bedingungen) korrigiert.

= 1.0.19 =
* Präfix-Dokumentation + readme Stable-Tag-Korrektur (WordPress.org-Einreichung).

= 1.0.18 =
* Sicherheit: script-sicheres JSON-LD-Escaping, Input-Sanitisierung von Superglobals, Inline-CSS/JS auf die Enqueue-API umgestellt, External-Services im readme dokumentiert.

= 1.0.8 =
* Fix: Im Zusammenspiel mit dem Pro-Add-on entstand beim Laden eine Endlosschleife (das Plugin-Singleton wurde erst nach dem Modul-Registrierungs-Hook gesetzt), die zu einem Speicher-/kritischen Fehler führen konnte. Das Singleton wird nun vor dem Hook gesetzt (re-entranz-sicher). Betrifft nur Installationen mit aktivem Add-on.

= 1.0.7 =
* Umbenennung: Das Plugin tritt im gesamten Adminbereich und Editor jetzt durchgängig als „RezaTain SEO" auf (Menüeintrag, Seiten-Überschriften, Editor-Seitenleiste, Block-Namen, Einrichtungs-Assistent). Interne Bezeichner, Slugs und gespeicherte Daten bleiben unverändert.

= 1.0.6 =
* Neu: Eigener Amazon-Partner-Tag in den Affiliate-Box-Einstellungen. Jede Installation hinterlegt ihre eigene PartnerNet-Tracking-ID; ohne Tag werden Amazon-Links ohne Provisions-Kennung ausgegeben. Es ist kein Tracking-Tag mehr fest im Code hinterlegt.

= 1.0.5 =
* Fix: Block-Editor lud für die Blöcke „Tutorial-Hub", „Lernpfad" und „Affiliate-Box" eine nicht vorhandene Editor-CSS-Datei (404 in der Browser-Konsole). Diese Blöcke haben nur Frontend-Styles; das Editor-Style-Handle wird jetzt nur registriert, wenn die Datei existiert.

= 1.0.4 =
* Fix: Untermenü-Seiten (Einstellungen, Massenbearbeitung, Setup-Assistent) luden ihre React-Skripte nicht. Der Asset-Guard prüfte nur den Top-Level-Hook ('rezatain-seo'); Untermenü-Hooks tragen den Präfix der Menü-Titel-Sanitisierung ('ai-aide_page_*') und wurden fälschlich verworfen.

= 1.0.3 =
* Wartung: Versions-Bump (Hosting-Deploy).

= 1.0.2 =
* Fix: Frontend-Optimierungen (LCP-Bild-Preload, ARIA-Injektion, Bild-Dimensionen) booteten nach der Umbenennung nicht (falscher Klassen-Namespace).
* Fix: Editor- und Chat-Einstellungs-REST-Aufrufe nutzten den falschen Namespace (404).
* Aufräumen: Affiliate-Boxen-Massen-UI wird nur noch vom Pro-Add-on geladen.

= 1.0.1 =
* Fix: Admin-React-Seiten (Dashboard, Einstellungen, Massenbearbeitung, Beitrags-Strukturen) luden ihre Skripte nicht, weil die Hook-Suffix-Prüfungen nach der Umbenennung nicht mehr zum Menü-Slug passten.

= 1.0.0 =
* Erste Veröffentlichung des freien SEO-Kerns (zuvor Teil des kombinierten AI-Aide-Plugins).
