PHPackages                             zeix/craft-marked-down - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. zeix/craft-marked-down

ActiveCraft-plugin[Parsing &amp; Serialization](/categories/parsing)

zeix/craft-marked-down
======================

Marked Down detects Accept headers and user agents to serve raw Markdown to command-line tools and APIs, while browsers get the full HTML treatment. Perfect for documentation sites, blogs, and content that needs to work everywhere

1.0.1(3mo ago)415mitPHPPHP &gt;=8.2

Since Feb 4Pushed 3mo agoCompare

[ Source](https://github.com/zeixcom/craft-marked-down)[ Packagist](https://packagist.org/packages/zeix/craft-marked-down)[ RSS](/packages/zeix-craft-marked-down/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (4)Versions (3)Used By (0)

Marked Down
===========

[](#marked-down)

A Craft CMS plugin that intelligently serves Markdown content to AI tools, APIs, and command-line clients, while browsers continue to receive HTML.

Why Marked Down?
----------------

[](#why-marked-down)

### The Problem

[](#the-problem)

Modern websites are designed for humans viewing them in browsers—complete with navigation menus, sidebars, footers, analytics scripts, and styling. But when AI tools like ChatGPT, Claude scrape your site, they get the entire HTML payload.

Result: **Wasted tokens, confused AI models, cluttered API responses, and poor developer experience.**

### The Solution

[](#the-solution)

Marked Down uses HTTP content negotiation to serve clean, semantic Markdown when appropriate:

**Benefits:**

- 🎯 **10-15x smaller responses** - Markdown is dramatically more compact than HTML
- 🤖 **Better AI understanding** - LLMs process clean Markdown more effectively than noisy HTML
- 🔌 **Standard HTTP** - Uses the `Accept: text/markdown` header (proper content negotiation)
- 🌐 **Zero impact on browsers** - Your website looks and works exactly the same for human visitors
- ⚡ **Built-in caching** - Fast responses with configurable cache duration
- 🎨 **Smart extraction** - Automatically finds and converts your main content, stripping navigation and boilerplate

### Real-World Use Cases

[](#real-world-use-cases)

- **Documentation sites** - Let AI assistants cite your docs accurately
- **Technical blogs** - Make your content easily consumable by AI tools
- **API documentation** - Serve both human-readable HTML and machine-readable Markdown
- **Content APIs** - Provide Markdown output without building separate endpoints
- **AI training** - Offer clean content for AI model training datasets
- **Command-line tools** - Enable CLI users to read your content in their terminal

Installation
------------

[](#installation)

### Standard Installation

[](#standard-installation)

```
composer require zeix/craft-marked-down
./craft plugin/install marked-down
```

### DDEV Installation

[](#ddev-installation)

If you're using DDEV for local development:

```
ddev composer require zeix/craft-marked-down
ddev craft plugin/install marked-down
```

How It Works
------------

[](#how-it-works)

Marked Down uses **HTTP content negotiation** - a standard web protocol where clients tell servers what format they prefer. When a request includes the `Accept: text/markdown` header, the plugin automatically converts your HTML response to clean Markdown.

### Quick Test

[](#quick-test)

Try it with curl:

```
# Get Markdown
curl -H "Accept: text/markdown" https://yoursite.com/blog/my-article

# Get HTML (default)
curl https://yoursite.com/blog/my-article
```

**What happens behind the scenes:**

1. Plugin checks if request has `Accept: text/markdown` header
2. If yes: Extracts main content, converts to Markdown
3. If no: Serves normal HTML (zero impact on regular traffic)

Configuration
-------------

[](#configuration)

### Plugin Settings

[](#plugin-settings)

Navigate to **Settings → Plugins → Marked Down**:

- **Enable Marked Down**: Toggle the plugin on/off
- **Excluded Paths**: Paths that always serve HTML (e.g., `/admin`, `/actions/*`)
- **Include Only Paths**: (Optional) Restrict Markdown to specific paths
- **Caching**: Enable caching and set cache duration (default: 24 hours)

### Config File

[](#config-file)

Create `config/marked-down.php` to exclude specific CSS selectors from Markdown output:

```
