=== SEOries Markdown Generator ===
Contributors: orkun53
Tags: markdown, ai, llm, content-negotiation, text
Requires at least: 6.4
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 0.1.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Generates clean, structured Markdown representations of WordPress content for AI systems and Markdown-compatible consumers.

== Description ==

**SEOries Markdown Generator** is an independent WordPress plugin developed by **Mahmut Orkun Köksalan**, built to provide clean, structured Markdown representations of WordPress content for AI systems, Large Language Models (LLMs), and automated markdown consumers.

### Key Capabilities & Architectural Principles

* **Canonical URL Negotiation**: Delivers `text/markdown` directly over canonical URLs via standard HTTP `Accept: text/markdown` content negotiation. Normal visitors and web browsers continue receiving standard HTML.
* **Public .md Policy**: Direct public `.md` URLs (e.g. `/post-slug.md`) are disabled by default and return 404 Not Found to prevent URL fragmentation and preserve canonical SEO integrity.
* **AI Bot Automatic Delivery**: Optional automated Markdown delivery for recognized AI search indexers and user-action bots (OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User) and training bots (GPTBot, ClaudeBot).
* **Search Engine Protection**: Major search engine crawlers (Googlebot, Bingbot, YandexBot) always receive standard HTML, ensuring zero interference with traditional search indexation.
* **Access Control & Privacy**: Drafts, pending reviews, private posts, trashed items, and password-protected content are strictly excluded from public Markdown delivery.
* **Robots Directives & Noindex**: Robots meta directives and headers are not access control mechanisms. Directives such as `noindex` do not prevent Markdown delivery; instead, robots directives are preserved and forwarded in the Markdown response headers (`X-Robots-Tag`) where applicable.
* **User-Agent Advisory**: User-Agent matching is an ergonomic content-representation selector, not a security boundary or authentication mechanism.
* **DOM-Driven Content Extraction**: Generic HTML parsing using native DOM & XPath, extracting clean semantic content without hard-coded theme or page-builder dependencies.
* **Safe CSS Selectors**: Configure global, post-type, per-post (meta box), and archive-level main content and excluded selectors with built-in fail-safe protection.
* **High-Performance Caching**: Integrates with WordPress Object Cache API (Redis / Memcached) with automatic Transients fallback, conditional HTTP (ETag / 304 Not Modified), and event-driven cache invalidation.
* **Buffer-Isolated Raw Delivery**: Unified output buffer management ensuring newlines, frontmatter, and code fences are never corrupted by third-party HTML minifiers or theme output filters.
* **Admin Preview & Download**: Authorized post editors can preview generated Markdown, inspect live extraction diagnostics, copy to clipboard, or download `.md` files directly from the WordPress editor.
* **Official Documentation**: Comprehensive guides, bot user-agent tables, and integration tutorials are available at https://ai-markdown.seories.com/docs/

== Installation ==

1. Upload the `seories-markdown-generator` directory to the `/wp-content/plugins/` directory.
2. Activate the plugin through the 'Plugins' menu in WordPress.
3. Configure your preferences under **Settings > SEOries Markdown Generator**.
4. Test delivery by requesting any published post or archive with `Accept: text/markdown`.

== Frequently Asked Questions ==

= Where can I find documentation and technical guides? =

Comprehensive technical documentation, AI crawler reference tables, and setup guides are available at https://ai-markdown.seories.com/docs/ . Official product information is available at https://ai-markdown.seories.com/ .

= Who is the author of this plugin? =

SEOries Markdown Generator is developed by Mahmut Orkun Köksalan.

= How do I request Markdown format for a post or page? =

Send an HTTP GET request to the canonical URL of any published post with the `Accept: text/markdown` header:
`curl -i -H "Accept: text/markdown" https://example.com/my-post/`

= Why are public .md URLs returning 404 Not Found? =

The plugin adheres to modern Web architecture and SEO best practices by serving alternative content representations from the canonical URL via HTTP Content Negotiation. Standalone `.md` endpoints are disabled by default to prevent duplicate content indexing.

= Are draft or password-protected posts accessible via Markdown? =

No. Only published, publicly viewable, non-password-protected content can be delivered as public Markdown.

= How does the plugin handle robots and noindex directives? =

Robots directives are presentation indexing metadata, not access control. The plugin preserves detected robots rules (such as `noindex` or `noarchive`) and sends them as `X-Robots-Tag` HTTP response headers in the Markdown response so consumers and crawlers receive consistent indexing guidance.

= Can I exclude specific banners, widgets, or sidebars from the Markdown output? =

Yes. Navigate to **Settings > SEOries Markdown Generator > Selector & Kurallar** to define global, post-type-specific, or archive-specific CSS selectors to strip (e.g. `.site-banner`, `#sidebar`, `.author-bio`).

= How does caching and invalidation work? =

Markdown responses are cached using the WordPress Object Cache (if available) or Transients API. When content is published, updated, trashed, or settings change, the cache generation key is automatically incremented.

= How do I translate the plugin into other languages? =

Translations for official WordPress.org releases are managed via translate.wordpress.org. For manual zip distributions, place compiled translation files (.po / .mo) inside the plugin's `languages/` directory or `wp-content/languages/plugins/` using the standard naming format `seories-markdown-generator-{locale}.mo` (e.g. `seories-markdown-generator-tr_TR.mo`). A complete translation template is provided at `languages/seories-markdown-generator.pot`.

== Screenshots ==

1. Admin Settings Dashboard with tabbed layout and delivery metrics.
2. AI Bot Delivery configuration with vendor categorization.
3. Content Scope configuration for singular post types and taxonomy archives.
4. CSS Selector & Output Rules management.
5. Single post Markdown Preview modal with copy to clipboard and `.md` file download.

== Changelog ==

= 0.1.0 =
* Initial stable release.
* HTTP Accept header content negotiation engine (`Accept: text/markdown`).
* Selectable AI Bot automatic delivery with search, user, and training categories.
* Traditional search engine (Googlebot, Bingbot, YandexBot) HTML protection.
* Content eligibility engine (publish-only, password-protected fail-closed).
* Robots directive header forwarding (`X-Robots-Tag`).
* Safe CSS selector validator with fail-safe root container protection.
* Object Cache and Transients caching layer with conditional HTTP (ETag / 304).
* Automated multi-event cache invalidation on content, taxonomy, and settings update.
* Tabbed admin settings panel under Settings > SEOries Markdown Generator.
* Admin single-post Markdown preview modal and secure download endpoint.
* Raw response buffer isolation preventing newline stripping.
* Complete PHPUnit test suite (363 tests, 1211 assertions).
