---
title: "Markdown negotiation checker: test Accept: text/markdown"
description: "Test one page for free: does it return Markdown to Accept: text/markdown, with the right Content-Type and Vary: Accept, or HTML under a Markdown label?"
url: "https://goodforbots.com/tools/markdown-negotiation-checker"
---

# Markdown negotiation checker

Test one page for free: does it return Markdown to Accept: text/markdown, with the right Content-Type and Vary: Accept, or HTML under a Markdown label?

Run it at https://goodforbots.com/tools/markdown-negotiation-checker: enter a page address in the form, which needs JavaScript.

Each run reads robots.txt, then the page you enter as HTML and, if it answers with a page, again with `Accept: text/markdown`, as [GoodForBotsBot](https://goodforbots.com/bot). Nothing else on the site is requested. Results are not saved, and no listing is created.

## What the Markdown negotiation checker checks

It grades the page you enter the way the full scan grades each page it reads, under the same rules. The full scan reads your homepage and up to three other pages and takes the median; this tool reads one page. The descriptions below come from our [standards catalogue](https://goodforbots.com/standards). Unlike the full scan, it never retries through a browser, so a page behind bot protection can fail here and still pass in a report.

### Markdown negotiation

We request the homepage and up to three pages chosen from the sitemap and homepage links with Accept: text/markdown, and inspect each response's status, media type, body and Vary: Accept header. Each page is graded on its own, and the median page decides. We reject HTML merely labelled as Markdown: a body that starts as an HTML document is HTML whatever its label, while Markdown that mentions HTML tags further in, in a code example for instance, is still Markdown.

**Results:** Pass: HTTP 200 labelled as Markdown (text/markdown, or the older text/x-markdown), at least 200 characters and Vary: Accept. Warn: useful plain text, a shorter Markdown response or a missing Vary: Accept. Fail: refusal, an error response, HTML or another representation, including the unregistered application/markdown.

[Full methodology and sources](https://goodforbots.com/standards#markdown-negotiation)

## Fix what it finds

- [How to serve Markdown to AI agents with content negotiation](https://goodforbots.com/guides/markdown-negotiation): Return Markdown from the same URL when an AI agent sends Accept: text/markdown, with tested responses, Vary and CDN caching, and nginx and Next.js setups.

[Run the full scan](https://goodforbots.com/#scan) · [All free tools](https://goodforbots.com/tools)

## Structured data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebPage",
      "@id": "https://goodforbots.com/tools/markdown-negotiation-checker#webpage",
      "url": "https://goodforbots.com/tools/markdown-negotiation-checker",
      "name": "Markdown negotiation checker: test Accept: text/markdown",
      "description": "Test one page for free: does it return Markdown to Accept: text/markdown, with the right Content-Type and Vary: Accept, or HTML under a Markdown label?",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://goodforbots.com/#website"
      },
      "breadcrumb": {
        "@id": "https://goodforbots.com/tools/markdown-negotiation-checker#breadcrumb"
      },
      "mainEntity": {
        "@id": "https://goodforbots.com/tools/markdown-negotiation-checker#app"
      }
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://goodforbots.com/tools/markdown-negotiation-checker#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://goodforbots.com/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Tools",
          "item": "https://goodforbots.com/tools"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Markdown negotiation checker",
          "item": "https://goodforbots.com/tools/markdown-negotiation-checker"
        }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://goodforbots.com/tools/markdown-negotiation-checker#app",
      "name": "Markdown negotiation checker",
      "url": "https://goodforbots.com/tools/markdown-negotiation-checker",
      "description": "Test one page for free: does it return Markdown to Accept: text/markdown, with the right Content-Type and Vary: Accept, or HTML under a Markdown label?",
      "applicationCategory": "DeveloperApplication",
      "browserRequirements": "Requires JavaScript.",
      "isAccessibleForFree": true,
      "provider": {
        "@id": "https://goodforbots.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://goodforbots.com/#organization",
      "name": "Good for Bots",
      "url": "https://goodforbots.com",
      "logo": "https://goodforbots.com/icon-512.png",
      "founder": {
        "@id": "https://goodforbots.com/#person-mateusz-pawlica"
      },
      "contactPoint": {
        "@type": "ContactPoint",
        "contactType": "customer support",
        "email": "support@goodforbots.com",
        "url": "https://goodforbots.com/contact"
      }
    },
    {
      "@type": "WebSite",
      "@id": "https://goodforbots.com/#website",
      "name": "Good for Bots",
      "url": "https://goodforbots.com",
      "description": "Check if AI crawlers can access and read your website, free. Get a score out of 100 with every finding and fix prompts, then browse reports in the directory.",
      "inLanguage": "en",
      "publisher": {
        "@id": "https://goodforbots.com/#organization"
      },
      "potentialAction": {
        "@type": "SearchAction",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://goodforbots.com/directory?q={q}"
        },
        "query-input": "required maxlength=120 name=q"
      }
    },
    {
      "@type": "Person",
      "@id": "https://goodforbots.com/#person-mateusz-pawlica",
      "name": "Mateusz Pawlica",
      "givenName": "Mateusz",
      "familyName": "Pawlica",
      "jobTitle": "Founder of Good for Bots",
      "description": "Web developer who builds directories and AI-powered products, and the founder of Good for Bots.",
      "url": "https://goodforbots.com/about#founder",
      "sameAs": [
        "https://pl.linkedin.com/in/mateusz-pawlica-65238816b",
        "https://pawlicaweb.pl/o-mnie"
      ],
      "knowsAbout": [
        "llms.txt",
        "robots.txt",
        "AI crawlers",
        "Markdown content negotiation",
        "Structured data",
        "Technical SEO",
        "Web directories",
        "Next.js",
        "TypeScript",
        "Generative AI"
      ],
      "worksFor": {
        "@id": "https://goodforbots.com/#organization"
      }
    }
  ]
}
```
