import{t as e}from"./react-CIf97Jej.js";import{n as t}from"./Layout-clxOrcre.js";import{n,t as r}from"./entry-render-DpCpGTCF.js";import{t as i}from"./CodeBlock-CPTKK1oj.js";import{t as a}from"./normalizeWebsiteInput-zvTQZkZo.js";var o=e(),s=t(),c=`// vite.config.ts import { agentmarkup } from '@agentmarkup/vite' export default defineConfig({ plugins: [ agentmarkup({ site: 'https://myshop.com', name: 'My Shop', globalSchemas: [ { preset: 'webSite', name: 'My Shop', url: 'https://myshop.com' }, { preset: 'organization', name: 'My Shop', url: 'https://myshop.com' }, ], llmsTxt: { sections: [{ title: 'Products', entries: [ { title: 'Wallets', url: '/products/wallets', description: 'Leather wallets' }, ]}], }, llmsFullTxt: { enabled: true, }, markdownPages: { enabled: true, }, contentSignalHeaders: { enabled: true, }, aiCrawlers: { GPTBot: 'allow', ClaudeBot: 'allow', CCBot: 'disallow' }, }), ], })`,l=`// astro.config.mjs import { agentmarkup } from '@agentmarkup/astro' export default defineConfig({ integrations: [ agentmarkup({ site: 'https://myblog.com', name: 'My Blog', globalSchemas: [ { preset: 'webSite', name: 'My Blog', url: 'https://myblog.com' }, { preset: 'organization', name: 'My Blog', url: 'https://myblog.com' }, ], llmsTxt: { sections: [{ title: 'Posts', entries: [ { title: 'Hello World', url: '/blog/hello', description: 'First post' }, ]}], }, llmsFullTxt: { enabled: true, }, markdownPages: { enabled: true, }, contentSignalHeaders: { enabled: true, }, aiCrawlers: { GPTBot: 'allow', ClaudeBot: 'allow' }, }), ], })`,u=`// next.config.ts import type { NextConfig } from 'next' import { withAgentmarkup } from '@agentmarkup/next' const nextConfig: NextConfig = { output: 'export', } export default withAgentmarkup( { site: 'https://myapp.com', name: 'My App', globalSchemas: [ { preset: 'webSite', name: 'My App', url: 'https://myapp.com' }, { preset: 'organization', name: 'My App', url: 'https://myapp.com' }, ], llmsTxt: { sections: [{ title: 'Docs', entries: [ { title: 'Getting Started', url: '/docs/getting-started', description: 'First steps' }, ]}], }, llmsFullTxt: { enabled: true, }, markdownPages: { enabled: true, }, contentSignalHeaders: { enabled: true, }, aiCrawlers: { GPTBot: 'allow', ClaudeBot: 'allow' }, }, nextConfig, )`,d={next:`pnpm add -D @agentmarkup/next`,vite:`pnpm add -D @agentmarkup/vite`,astro:`pnpm add -D @agentmarkup/astro`},f={next:u,vite:c,astro:l},p={next:`next.config.ts`,vite:`vite.config.ts`,astro:`astro.config.mjs`};function m(){let[e,t]=(0,o.useState)(`next`),[n,r]=(0,o.useState)(``);function c(e){e.preventDefault();let t=a(n);t&&(r(t),window.location.assign(`/checker/?url=${encodeURIComponent(t)}`))}return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(`header`,{children:[(0,s.jsx)(`h1`,{children:`Make your website machine-readable for LLMs and AI agents`}),(0,s.jsx)(`p`,{className:`tagline`,children:`Build-time llms.txt, optional A2A Agent Cards, JSON-LD, markdown mirrors, AI crawler controls, Content-Signal headers, and validation for Next.js, Vite, and Astro websites.`}),(0,s.jsx)(`p`,{className:`subtitle`,children:`Zero runtime cost. Type-safe. Open source.`}),(0,s.jsxs)(`section`,{className:`hero-checker`,"aria-labelledby":`hero-checker-title`,children:[(0,s.jsxs)(`div`,{className:`hero-checker-copy`,children:[(0,s.jsx)(`h2`,{id:`hero-checker-title`,children:`Run the website checker first`}),(0,s.jsx)(`p`,{children:`Check any public site for llms.txt, JSON-LD, markdown mirrors, robots.txt, sitemap discovery, canonical tags, and thin HTML before you install anything.`})]}),(0,s.jsxs)(`form`,{className:`hero-checker-form`,action:`/checker/`,method:`get`,onSubmit:c,children:[(0,s.jsx)(`label`,{className:`hero-checker-label`,htmlFor:`hero-checker-url`,children:`Website URL`}),(0,s.jsx)(`p`,{className:`hero-checker-note`,children:`Only the root website is checked first. Enter any public page URL and the checker will normalize it to the site root before fetching metadata.`}),(0,s.jsxs)(`div`,{className:`checker-form-row hero-checker-row`,children:[(0,s.jsx)(`input`,{id:`hero-checker-url`,className:`checker-input`,type:`text`,name:`url`,placeholder:`https://example.com`,value:n,onChange:e=>r(e.target.value),onBlur:()=>r(e=>a(e)),inputMode:`url`,autoComplete:`url`,spellCheck:!1,required:!0}),(0,s.jsx)(`button`,{className:`checker-submit`,type:`submit`,children:`Check website`})]})]})]}),(0,s.jsxs)(`div`,{className:`fw-tabs-hero`,children:[(0,s.jsx)(`button`,{className:e===`next`?`fw-tab active`:`fw-tab`,onClick:()=>t(`next`),children:`Next.js`}),(0,s.jsx)(`button`,{className:e===`vite`?`fw-tab active`:`fw-tab`,onClick:()=>t(`vite`),children:`Vite`}),(0,s.jsx)(`button`,{className:e===`astro`?`fw-tab active`:`fw-tab`,onClick:()=>t(`astro`),children:`Astro`})]}),(0,s.jsx)(`pre`,{className:`install-hero`,children:(0,s.jsx)(`code`,{children:d[e]})})]}),(0,s.jsxs)(`main`,{children:[(0,s.jsx)(`section`,{className:`about`,children:(0,s.jsxs)(`p`,{children:[`agentmarkup makes your website understandable by LLMs and AI agents. It generates `,(0,s.jsx)(`a`,{href:`/docs/llms-txt/`,children:`llms.txt`}),` and optional `,(0,s.jsx)(`code`,{children:`llms-full.txt`}),` files, can emit an optional `,(0,s.jsx)(`code`,{children:`/.well-known/agent-card.json`}),` for an existing A2A service, injects `,(0,s.jsx)(`a`,{href:`/docs/json-ld/`,children:`schema.org JSON-LD`}),`, can generate `,(0,s.jsx)(`a`,{href:`/blog/markdown-mirrors/`,children:`markdown mirrors`}),` from final HTML when raw pages are thin or noisy, manages `,(0,s.jsx)(`a`,{href:`/docs/ai-crawlers/`,children:`AI crawler robots.txt rules`}),`, patches host-friendly headers with Content-Signal directives and markdown canonicals, and validates the final output at build time. Same core config, same feature set, whether you use Next.js, Vite, or Astro.`]})}),(0,s.jsxs)(`section`,{className:`features`,children:[(0,s.jsxs)(`div`,{className:`feature`,children:[(0,s.jsx)(`h2`,{children:`llms.txt generation`}),(0,s.jsxs)(`p`,{children:[`Auto-generate an llms.txt file following the `,(0,s.jsx)(`a`,{href:`https://llmstxt.org`,target:`_blank`,rel:`noopener noreferrer`,children:`llmstxt.org`}),` spec, inject the homepage discovery link automatically, and optionally emit `,(0,s.jsx)(`code`,{children:`llms-full.txt`}),` with inlined same-site markdown context.`]})]}),(0,s.jsxs)(`div`,{className:`feature`,children:[(0,s.jsx)(`h2`,{children:`Optional A2A Agent Card`}),(0,s.jsxs)(`p`,{children:[`Publish `,(0,s.jsx)(`code`,{children:`/.well-known/agent-card.json`}),` for an existing A2A-compatible agent service from the same build pipeline. agentmarkup handles the static discovery file and validation, not the runtime A2A server.`]})]}),(0,s.jsxs)(`div`,{className:`feature`,children:[(0,s.jsx)(`h2`,{children:`JSON-LD structured data`}),(0,s.jsx)(`p`,{children:`Inject schema.org JSON-LD into every page with XSS-safe serialization. Use 6 built-in presets for common types or bring your own custom schemas.`})]}),(0,s.jsxs)(`div`,{className:`feature`,children:[(0,s.jsx)(`h2`,{children:`AI crawler management`}),(0,s.jsx)(`p`,{children:`Allow or block AI crawlers like GPTBot, ClaudeBot, PerplexityBot, Google-Extended, and CCBot with idempotent robots.txt patching that will not break your existing rules.`})]}),(0,s.jsxs)(`div`,{className:`feature`,children:[(0,s.jsx)(`h2`,{children:`Markdown mirrors`}),(0,s.jsxs)(`p`,{children:[`Optionally generate a clean `,(0,s.jsx)(`code`,{children:`.md`}),` companion for built HTML pages when fetch-based agents need a better path than the raw HTML. Useful for thin or noisy output. If your HTML already ships substantial content, keep HTML as the primary fetch target. `,(0,s.jsx)(`a`,{href:`/blog/when-markdown-mirrors-help/`,children:`Read when mirrors help and when they do not`}),`.`]})]}),(0,s.jsxs)(`div`,{className:`feature`,children:[(0,s.jsx)(`h2`,{children:`Content-Signal headers`}),(0,s.jsxs)(`p`,{children:[`Patch or generate a host-friendly `,(0,s.jsx)(`code`,{children:`_headers`}),` file, or merge server header rules, with `,(0,s.jsx)(`code`,{children:`Content-Signal`}),` directives and markdown canonicals.`]})]}),(0,s.jsxs)(`div`,{className:`feature`,children:[(0,s.jsx)(`h2`,{children:`Final-output validation`}),(0,s.jsx)(`p`,{children:`Catch missing required fields, incomplete schema.org schemas, thin client-shell HTML, broken markdown alternate links, missing llms mirror coverage, AI crawler conflicts, and malformed llms files before you deploy.`})]})]}),(0,s.jsx)(`section`,{className:`checker-cta`,children:(0,s.jsxs)(`div`,{className:`checker-cta-card`,children:[(0,s.jsx)(`h2`,{children:`Check your website before you ship it`}),(0,s.jsx)(`p`,{children:`Run the built-in website checker to inspect any public homepage for llms.txt, JSON-LD, markdown mirrors, robots.txt, sitemap discovery, canonical tags, and thin-HTML issues. It follows at most one same-origin link, does not invent a score, and tells you exactly what is missing.`}),(0,s.jsx)(`a`,{className:`checker-cta-link`,href:`/checker/`,children:`Open the website checker`})]})}),(0,s.jsx)(`section`,{className:`checker-cta`,children:(0,s.jsxs)(`div`,{className:`checker-cta-card`,children:[(0,s.jsx)(`h2`,{children:`Repo-local Codex skill`}),(0,s.jsxs)(`p`,{children:[`This repo also includes a repo-local Codex skill at`,` `,(0,s.jsx)(`code`,{children:`.agents/skills/agentmarkup-audit`}),` `,`for auditing final-output ownership, llms.txt, llms-full.txt, JSON-LD, robots.txt, `,(0,s.jsx)(`code`,{children:`_headers`}),`, and whether markdown mirrors help. It stays separate from the published packages and uses the website checker as guidance rather than a runtime dependency.`]}),(0,s.jsx)(`a`,{className:`checker-cta-link`,href:`https://github.com/agentmarkup/agentmarkup/tree/main/.agents/skills/agentmarkup-audit`,target:`_blank`,rel:`noopener noreferrer`,children:`View the Codex skill in GitHub`})]})}),(0,s.jsxs)(`section`,{className:`presets`,children:[(0,s.jsx)(`h2`,{children:`Schema.org presets`}),(0,s.jsx)(`p`,{className:`presets-description`,children:`Type-safe builders for common structured data types. Apply globally or per-page.`}),(0,s.jsxs)(`div`,{className:`preset-list`,children:[(0,s.jsx)(`span`,{className:`preset`,children:`webSite`}),(0,s.jsx)(`span`,{className:`preset`,children:`organization`}),(0,s.jsx)(`span`,{className:`preset`,children:`article`}),(0,s.jsx)(`span`,{className:`preset`,children:`faqPage`}),(0,s.jsx)(`span`,{className:`preset`,children:`product`}),(0,s.jsx)(`span`,{className:`preset`,children:`offer`})]})]}),(0,s.jsxs)(`section`,{className:`example`,children:[(0,s.jsxs)(`div`,{className:`fw-tabs`,children:[(0,s.jsx)(`button`,{className:e===`next`?`fw-tab active`:`fw-tab`,onClick:()=>t(`next`),children:`Next.js`}),(0,s.jsx)(`button`,{className:e===`vite`?`fw-tab active`:`fw-tab`,onClick:()=>t(`vite`),children:`Vite`}),(0,s.jsx)(`button`,{className:e===`astro`?`fw-tab active`:`fw-tab`,onClick:()=>t(`astro`),children:`Astro`})]}),(0,s.jsxs)(`h2`,{children:[`Add to `,p[e]]}),(0,s.jsx)(i,{code:f[e]})]}),(0,s.jsxs)(`section`,{className:`output`,children:[(0,s.jsx)(`h2`,{children:`Build output from this website`}),(0,s.jsxs)(`p`,{className:`output-note`,children:[`This is a recent build output from agentmarkup.dev, which currently uses `,(0,s.jsx)(`code`,{children:`@agentmarkup/vite`}),`. The same output types are available through the Astro and Next.js adapters; the exact page and entry counts change as the docs site grows.`]}),(0,s.jsx)(`img`,{src:`/agentmarkup-build-output.webp`,alt:`Terminal output from a recent agentmarkup.dev build showing llms.txt generation, JSON-LD injection, markdown page generation, Content-Signal headers, markdown canonical headers, and a clean validation report`,className:`output-screenshot`,width:`974`,height:`534`,loading:`lazy`})]}),(0,s.jsxs)(`section`,{className:`packages`,children:[(0,s.jsx)(`h2`,{children:`All packages`}),(0,s.jsxs)(`div`,{className:`package-grid`,children:[(0,s.jsxs)(`div`,{className:`package-card`,children:[(0,s.jsx)(`h3`,{children:(0,s.jsx)(`a`,{href:`https://www.npmjs.com/package/@agentmarkup/next`,target:`_blank`,rel:`noopener noreferrer`,children:`@agentmarkup/next`})}),(0,s.jsxs)(`p`,{className:`package-desc`,children:[`Next.js adapter. Best for static export, prerendered HTML, and server deployments with build output. Fully dynamic SSR routes should use `,(0,s.jsx)(`code`,{children:`@agentmarkup/core`}),` in app code. `,(0,s.jsx)(`a`,{href:`/blog/nextjs-llms-txt-json-ld/`,children:`Read the Next.js guide`}),`.`]})]}),(0,s.jsxs)(`div`,{className:`package-card`,children:[(0,s.jsx)(`h3`,{children:(0,s.jsx)(`a`,{href:`https://www.npmjs.com/package/@agentmarkup/vite`,target:`_blank`,rel:`noopener noreferrer`,children:`@agentmarkup/vite`})}),(0,s.jsx)(`p`,{className:`package-desc`,children:`Vite plugin for final-output builds on React, Vue, Svelte, or plain HTML sites.`})]}),(0,s.jsxs)(`div`,{className:`package-card`,children:[(0,s.jsx)(`h3`,{children:(0,s.jsx)(`a`,{href:`https://www.npmjs.com/package/@agentmarkup/astro`,target:`_blank`,rel:`noopener noreferrer`,children:`@agentmarkup/astro`})}),(0,s.jsx)(`p`,{className:`package-desc`,children:`Astro integration for sites where Astro owns the built HTML output.`})]}),(0,s.jsxs)(`div`,{className:`package-card`,children:[(0,s.jsx)(`h3`,{children:(0,s.jsx)(`a`,{href:`https://www.npmjs.com/package/@agentmarkup/core`,target:`_blank`,rel:`noopener noreferrer`,children:`@agentmarkup/core`})}),(0,s.jsx)(`p`,{className:`package-desc`,children:`Framework-agnostic generators and validators for custom build pipelines.`})]})]})]}),(0,s.jsxs)(`section`,{className:`use-cases`,children:[(0,s.jsx)(`h2`,{children:`Use cases`}),(0,s.jsxs)(`div`,{className:`blog-list`,children:[(0,s.jsxs)(`a`,{href:`/blog/ecommerce-llm-optimization/`,className:`blog-card`,children:[(0,s.jsx)(`h3`,{children:`E-commerce`}),(0,s.jsx)(`p`,{children:`Make your products visible in AI shopping recommendations. Product schema, llms.txt catalogs, and crawler access so ChatGPT and Perplexity can cite your store.`})]}),(0,s.jsxs)(`a`,{href:`/blog/brand-awareness-ai/`,className:`blog-card`,children:[(0,s.jsx)(`h3`,{children:`Brand awareness`}),(0,s.jsx)(`p`,{children:`Get your brand mentioned in AI conversations. Organization schema, FAQ markup, and clear positioning so AI systems accurately represent what you do.`})]}),(0,s.jsxs)(`a`,{href:`/blog/json-ld-structured-data-guide/`,className:`blog-card`,children:[(0,s.jsx)(`h3`,{children:`Content websites`}),(0,s.jsx)(`p`,{children:`Power Google rich results and AI citations with Article, FAQ, and WebSite schemas. Build-time validation catches broken markup before it goes live.`})]})]})]}),(0,s.jsxs)(`section`,{className:`faq`,children:[(0,s.jsx)(`h2`,{children:`Frequently asked questions`}),(0,s.jsxs)(`details`,{children:[(0,s.jsx)(`summary`,{children:`What does agentmarkup actually do?`}),(0,s.jsxs)(`p`,{children:[`It adds machine-readable build output: an `,(0,s.jsx)(`code`,{children:`llms.txt`}),` file, optional `,(0,s.jsx)(`code`,{children:`llms-full.txt`}),` context, an optional `,(0,s.jsx)(`code`,{children:`/.well-known/agent-card.json`}),` for an existing A2A service, the homepage `,(0,s.jsx)(`code`,{children:`llms.txt`}),` discovery link, `,(0,s.jsx)(`code`,{children:`