=== Active Twist SEO + JSON-LD ===
Contributors: activetwist
Tags: seo, json-ld, schema, metadata, canonical
Requires PHP: 7.4
Requires at least: 6.0
Tested up to: 6.9
Stable tag: 1.5.7
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Deterministic SEO controls and JSON-LD for WordPress: titles, descriptions, canonicals, robots, and social metadata without tracking or AI.

== Description ==
AI-Native SEO without the theater. Explicit signals. Deterministic output. No scoring. No upsells.

== Designed by Refusal ==
Active Twist SEO intentionally refuses:

* Content scoring
* AI content generation
* Telemetry / tracking
* Upsells and feature gating
* Dashboard bloat designed to create dependency

Instead, it focuses on explicit, inspectable SEO signals.

== Built for Modern Indexing ==
Active Twist SEO is built for search engines and AI crawlers:

* Machine-readable Markdown export
* LLMs.txt generation
* Raw JSON-LD preview and override
* Deterministic schema selection by post type
* Explicit canonical ownership
* Robots.txt and sitemap controls

== Capability Comparison ==

✓ Rejects content scoring  
✓ Rejects AI content generation  
✓ Rejects upsells & feature gating  
✓ Rejects telemetry / tracking  
✓ Explicit canonical ownership  
✓ Raw JSON-LD preview  
✓ Markdown export for AI indexing  
✓ LLMs.txt generation  

Most traditional SEO suites:
• Include scoring systems  
• Include AI content tools  
• Gate features  
• Collect telemetry  
• Abstract canonical control  
• Hide structured data behind UI layers


Our plugin focuses on the foundational mechanics of modern SEO:

== Core SEO Controls ==
- SEO title and meta description per post and page
- Canonical URL ownership and per-page override
- Robots meta control (index/noindex, follow/nofollow)
- Deterministic fallback logic for all fields
- Visible value source labels for all SEO fields (explicit, auto-generated, inherited)

== Search Preview ==
- Real-time Google search result preview
- Live title and meta description rendering
- Visual truncation and length guidance
- Preview reflects actual rendered output, not scores

== Structured Data (JSON-LD) ==
- Site-wide Organization and WebSite schema
- Optional LocalBusiness schema
- Per-post Article and BlogPosting schema
- Author (Person) schema sourced from WordPress user profiles
- BreadcrumbList generation
- Custom per-page JSON-LD override support
- Per-page schema modes: automatic, custom, or disabled

== Social Metadata ==
- Open Graph metadata for Facebook and LinkedIn
- Twitter Card metadata with configurable card type
- Per-post social title, description, and image overrides
- Deterministic fallback logic from SEO fields and featured images
- Live Facebook and Twitter share previews in the editor

== Markdown and AI Discovery ==
- Native HTML-to-Markdown conversion
- One-click Markdown download from post and page editor
- Markdown download available from post and page list views
- Machine-readable Markdown access via alternate content endpoint
- Explicit support for AI and indexing agents without tracking or content generation

== Site-Level SEO Files and Observability
- XML sitemap generation
- Virtual robots.txt editor
- llms.txt generation
- SEO Status dashboard with loopback inspection
- Canonical conflict detection
- Indexability and HTTP status reporting
- Lightweight 404 monitoring
- Site-wide health evaluation across recent public content
- Zero output buffering to ensure deterministic, low-overhead rendering

Active Twist SEO is designed to be boring in the best possible way. It does not generate content using AI, it does not track your competitors, and it does not sell you upgrades. Most importantly, it does not phone home or collect user data—your SEO strategy stays on your server.

It is designed to coexist safely with other SEO suites like Yoast or Rank Math, allowing you to gradually transition or use Active Twist as a lightweight alternative for specific deployments.

When Active Twist SEO output is enabled, it takes explicit ownership of canonical tags to ensure a single, deterministic source of truth.

== Frequently Asked Questions ==

= Does this replace Yoast or Rank Math? =
Yes, Active Twist SEO provides the essential technical features required for SEO and JSON-LD. It can be used as a standalone replacement or run alongside other plugins (where it will contextually disable its output to avoid conflicts unless manually overridden).

= Does this generate SEO content or keywords? =
No. Active Twist SEO does not generate content or predict keyword performance. It is a technical tool designed to ensure your existing content is communicated correctly to search engines.

= Does this track users or collect data? =
No. There is no tracking, no telemetry, and no data collection. The plugin operates entirely within your WordPress environment.

= Can this be used in production? =
Yes. Active Twist SEO is a production-grade tool designed for performance and reliability. It uses "Zero Output Buffering" to ensure minimal impact on page load times.

= Does it disable other SEO plugins? =
No. It detects other major SEO plugins and will disable its own output by default to prevent duplication. You can use the "Force Output" setting if you wish to override this behavior.

Support and issue tracking are handled through the WordPress.org plugin repository.

== Installation ==

1. Upload the `active-twist-seo-jsonld` folder to `/wp-content/plugins/`
2. Activate in **Plugins**
3. Go to **Active Twist SEO → Settings** to set defaults
4. Edit any post/page to set per-post SEO & JSON-LD settings

== Screenshots ==

== Screenshots ==

1. Post/Page SEO metabox with real-time Google preview and value source labels.
2. Open Graph (Facebook / LinkedIn) preview in the editor.
3. Twitter Card preview in the editor.
4. JSON-LD schema configuration and raw preview.
5. SEO Status dashboard with observability and health checks.
6. Site Data Files tab showing XML sitemap access.

== Changelog ==
= 1.5.7 =
* Admin: escape OG metabox preview style attribute output (PHPCS).

= 1.5.6 =
* Hotfix: fix Schema Helper namespace mismatch that could trigger a wp_head fatal.

= 1.5.5 =
* Refined positioning and documentation updates.

== Changelog ==
= 1.5.4 =
* Security: Applied late escaping to JSON-LD output (Issue 1.1).

= 1.5.3 =
* Security: Hardened sanitization for Settings and input handling (Issue 3).
* Security: Improved escaping for JSON-LD and HTML outputs (Issue 1).
* Tweak: Moved inline scripts and styles to external assets (Issue 2).
* Dev: Excluded development assets from distribution build (Issue 4).

= 1.0.0 =
* Initial release
