Meta tags:
description= Open-source AEO (Answer Engine Optimization) infrastructure — every page, dual-marked. Markdown twins for AI agents alongside HTML for humans, picked by HTTP content negotiation. - dodopayments/dualmark;
Headings (most frequently used words):
seconds, 60, uh, oh, dualmark, navigation, code, saved, searches, to, files, what, in, converters, the, end, contributing, license, footer, search, repositories, users, issues, pull, requests, provide, feedback, dodopayments, menu, use, filter, your, results, more, quickly, folders, and, latest, commit, history, repository, quickstart, why, marketing, teams, need, this, you, actually, ship, built, verify, any, site, against, spec, box, verified, where, it, goes, from, here, status, about, releases, 12, contributors, languages, astro, 30, next, js, app, router, sveltekit, cloudflare, workers, deno, deploy, vercel, edge, topics, resources, of, conduct, stars, watchers, forks,
Text of the page (most frequently used words):
#dualmark (79), markdown (32), the (26), from (24), your (23), 125 (21), astro (20), for (20), and (20), with (19), import (18), code (15), dev (15), bun (15), next (15), blog (15), github (14), negotiation (14), tests (14), examples (14), sveltekit (14), npm (14), you (13), content (13), com (13), full (13), deno (13), marketing (12), pass (12), yourcompany (12), this (11), docs (11), page (11), aeo (11), all (11), vercel (11), app (11), edge (11), export (11), security (10), cloudflare (10), html (10), run (10), pricing (10), https (10), config (10), json (10), converter (9), llms (9), txt (9), nextjs (9), every (9), spec (9), any (9), pages (9), url (9), score (9), const (9), get (9), converters (8), same (8), under (8), fastly (8), that (7), reload (7), contributing (7), license (7), search (7), bots (7), open (7), source (7), bot (7), verify (7), adapter (7), twin (7), example (7), seconds (7), view (7), status (6), netlify (6), nuxt (6), framework (6), existing (6), more (6), default (6), vite (6), header (6), site (6), handler (6), middleware (6), upstream (6), auto (6), generated (6), what (6), conformance (6), text (6), add (6), enterprise (6), can (5), navigation (5), was (5), engine (5), seo (5), infrastructure (5), agents (5), build (5), link (5), issues (5), analytics (5), router (5), apps (5), glossary (5), cli (5), fetch (5), hooks (5), tested (5), community (4), there (4), error (4), while (4), loading (4), please (4), api (4), readme (4), optimization (4), integration (4), humans (4), picked (4), dodopayments (4), see (4), use (4), vitest (4), packages (4), read (4), integrations (4), play (4), serve (4), 120 (4), perfect (4), end (4), accept (4), public (4), wraps (4), serves (4), built (4), generates (4), rel (4), alternate (4), package (4), drop (4), type (4), siteurl (4), clean (4), problem (4), documentation (4), pull (4), customer (4), posts (4), name (4), chatgpt (4), why (4), dualmarkconfig (4), defineconfig (4), tsconfig (4), actions (4), quality (4), support (4), releases (3), stars (3), conduct (3), apache (3), resources (3), answer (3), workers (3), topics (3), dual (3), marked (3), twins (3), http (3), change (3), production (3), pre (3), includes (3), required (3), notice (3), install (3), across (3), turbo (3), sanity (3), non (3), changelog (3), route (3), compute (3), deploy (3), now (3), skip (3), core (3), createaeomiddleware (3), worker (3), endpoints (3), createdualmarkhandle (3), createdualmarkroutehandler (3), createdualmarkmiddleware (3), response (3), bunx (3), advanced (3), noindex (3), tag (3), battle (3), compare (3), engineering (3), services (3), direct (3), collections (3), they (3), files (3), commit (3), insights (3), requests (3), signed (3), settings (3), another (3), tab (3), window (3), refresh (3), session (3), sign (3), saved (3), feedback (3), grade (3), features (3), copilot (3), platform (3), solutions (3), explore (3), not (2), manage (2), privacy (2), terms (2), footer (2), 2026 (2), typescript (2), latest (2), adapters (2), reference (2), report (2), repository (2), forks (2), custom (2), alongside (2), authoritative (2), early (2), anything (2), never (2), typecheck (2), test (2), implement (2), want (2), release (2), reports (2), stack (2), one (2), issue (2), builder (2), plugins (2), sitemap (2), toward (2), hook (2), which (2), onairequest (2), tables (2), sites (2), way (2), live (2), into (2), routes (2), wrangler (2), check (2), agnostic (2), rfc (2), programmatic (2), lifecycle (2), detection (2), known (2), rendering (2), zero (2), size (2), workflows (2), tokens (2), robots (2), vary (2), body (2), advertises (2), gptbot (2), receives (2), convert (2), compareconverter (2), collection (2), returns (2), right (2), faq (2), links (2), video (2), stripe (2), marketplace (2), feature (2), competitor (2), new (2), changes (2), case (2), stories (2), has (2), team (2), human (2), our (2), don (2), write (2), over (2), out (2), them (2), nav (2), cites (2), without (2), teams (2), _next (2), favicon (2), ico (2), matcher (2), init (2), async (2), nextresponse (2), server (2), proxy (2), myapp (2), createaeohandler (2), main (2), wrap (2), static (2), file (2), createaeoworker (2), src (2), generatestaticparams (2), missing (2), post (2), quickstart (2), google (2), base (2), lock (2), code_of_conduct (2), prettierrc (2), prettierignore (2), gitignore (2), changeset (2), 162 (2), commits (2), last (2), message (2), menu (2), projects (2), appearance (2), cancel (2), available (2), searches (2), repositories (2), business (2), developer (2), devops (2), merge (2), perform, action, time, share, personal, information, cookies, contact, inc, other, mdx, languages, contributors, jun, pluggable, tokenizer, watching, watchers, properties, activity, generative, geo, about, apis, may, patch, until, follows, ready, adopters, running, patent, grant, attribution, appreciated, orchestrated, elsewhere, language, implementation, loop, flow, prs, tried, broke, are, welcome, engineer, reading, those, would, land, contentful, engineers, author, cms, structured, data, hints, per, section, anchors, evolution, hosted, dashboard, top, reads, when, remix, react, building, being, tailwind, became, css, hosting, roadmap, where, goes, here, 407, integrated, prerendered, 200, using, fixture, backed, 174, fast, property, surface, verified, ten, working, interactive, tester, fumadocs, 2119, compliant, rust, php, ruby, call, specification, plus, too, scheduled, info, completed, functions, context, natively, proxies, backends, background, telemetry, module, injects, generator, createllmstxthandler, withdualmark, ships, factories, primitives, 7231, token, estimation, composition, helpers, runtime, deps, does, box, exits, fails, staging, yml, three, levels, prevent, regressions, standard, basic, duration, 107ms, passed, reachable, contenttype, charset, utf, tokensheader, present, empty, linkalternate, botua, acceptheader, against, layout, yourcomparepage, basepath, each, takes, entry, structure, consumption, title, description, breadcrumbs, extraction, related, prompt, webinar, replays, landing, currency, standalone, calculators, tool, component, health, incidents, uptime, san, francisco, facts, cross, pseo, tier, comparison, ctas, dpa, policy, legal, connect, acme, slack, connector, payment, gateway, term, definitions, webhooks, sso, solution, product, getting, started, guides, alternative, grouped, notes, logos, stats, quote, wins, study, long, form, generation, types, duplicate, penalties, sets, rewrites, retraining, stay, else, pointing, user, agent, claudebot, perplexitybot, different, automatically, visitors, discover, everything, actually, ship, own, extracted, oss, have, wrapping, dodo, payments, done, bundled, waits, weeks, slow, roll, vendor, country, traffic, conforms, repo, none, quite, rebuilds, drives, hand, maintained, drifts, proposal, keeps, changing, line, item, failures, hope, know, discoverable, polished, scrape, menus, errors, pick, cleaner, competitors, instead, already, invested, invest, fraction, effort, need, tostring, fetchasset, reader, ai_agent_analytics, binding, trailingslash, single, digit, first, byte, 300, cities, handle, sveltejs, kit, uas, browsers, urls, force, dynamic, toentry, map, getentries, lib, path, prefetch, key, its, via, crawler, sees, slug, localhost, 4321, true, enabled, llmstxt, mjs, some, meta, thing, two, formats, gives, engines, claude, perplexity, gemini, overviews, web, differently, chrome, javascript, cookie, banners, most, give, soup, wonder, ignored, ranks, items, history, date, folders, tags, branches, additional, options, star, fork, must, notification, notifications, dismiss, alert, switched, accounts, resetting, focus, create, qualifiers, query, filter, results, quickly, submit, include, email, address, contacted, piece, take, input, very, seriously, provide, syntax, tips, clear, users, jump, premium, ons, powered, trending, archive, program, accelerator, maintainer, lab, programs, fund, developers, sponsors, partners, trust, center, forum, skills, ebooks, events, webinars, software, development, topic, industries, government, manufacturing, financial, healthcare, industry, cases, devsecops, modernization, nonprofits, startups, small, medium, enterprises, company, stop, leaks, before, start, secret, protection, secure, find, fix, vulnerabilities, application, enforce, review, plan, track, work, instant, environments, codespaces, automate, workflow, integrate, external, tools, mcp, registry, better, creation, toggle,
Text of the page (random words):
load to refresh your session you signed out in another tab or window reload to refresh your session you switched accounts on another tab or window reload to refresh your session dismiss alert message uh oh there was an error while loading please reload this page dodopayments dualmark public notifications you must be signed in to change notification settings fork 27 star 96 code issues 11 pull requests 11 actions projects security and quality 0 insights additional navigation options code issues pull requests actions projects security and quality insights dodopayments dualmark main branches tags go to file code open more actions menu folders and files name name last commit message last commit date latest commit history 162 commits 162 commits changeset changeset github github apps docs apps docs examples examples packages packages spec spec gitignore gitignore prettierignore prettierignore prettierrc json prettierrc json code_of_conduct md code_of_conduct md contributing md contributing md license license notice notice readme md readme md bun lock bun lock package json package json tsconfig base json tsconfig base json tsconfig json tsconfig json turbo json turbo json vitest config ts vitest config ts view all files repository files navigation readme code of conduct contributing apache 2 0 license more items dualmark the aeo infrastructure your marketing site is missing your blog ranks 1 on google chatgpt cites your competitor that s not a content problem it s an infrastructure problem ai search engines chatgpt claude perplexity gemini google ai overviews read the web differently from humans they want clean markdown without nav chrome javascript or cookie banners most marketing sites give them html soup and wonder why they get ignored dualmark gives every page a markdown twin same url two formats picked by http content negotiation drop it into your astro next js sveltekit cloudflare stack in 30 seconds score it with dualmark verify npm install next seo some meta tag thing bun add dualmark astro quickstart why examples spec docs quickstart astro 30 seconds bun add dualmark astro astro config mjs import defineconfig from astro config import dualmark from dualmark astro export default defineconfig site https yourcompany com integrations dualmark siteurl https yourcompany com collections blog converter blog blog md auto generated glossary converter glossary glossary md auto generated llmstxt enabled true llms txt auto generated bun run build bunx dualmark verify https localhost 4321 blog your post score 80 80 that s it every blog post has a markdown twin at blog slug md llms txt is generated every html response advertises its twin via link rel alternate type text markdown chatgpt crawler sees clean markdown your existing pages don t change next js app router 60 seconds bun add dualmark nextjs proxy ts or middleware ts on next 15 import createdualmarkmiddleware from dualmark nextjs export default createdualmarkmiddleware siteurl https yourcompany com export const config matcher source _next favicon ico md missing type header key next router prefetch app md path route ts import createdualmarkroutehandler from dualmark nextjs import posts from lib posts const handler createdualmarkroutehandler siteurl https yourcompany com collections blog converter blog getentries posts map toentry export const dynamic force static export const get handler get export const generatestaticparams handler generatestaticparams that s it bot uas get markdown browsers get html with a link rel alternate header direct md urls serve markdown full example with next dev 120 125 conformance score full next js example sveltekit 60 seconds bun add dualmark sveltekit vite config ts import sveltekit from sveltejs kit vite import defineconfig from vite import dualmark from dualmark sveltekit import dualmarkconfig from src dualmark config export default defineconfig plugins dualmark dualmarkconfig sveltekit src hooks server ts import createdualmarkhandle from dualmark sveltekit import dualmarkconfig from dualmark config export const handle createdualmarkhandle dualmarkconfig full example with vite dev 125 125 conformance score full sveltekit example cloudflare workers 60 seconds wrap your existing worker ai bots get markdown at the edge single digit ms first byte from 300 cities import createaeoworker from dualmark cloudflare import upstream from your existing worker js export default createaeoworker upstream trailingslash never analytics binding ai_agent_analytics full example with wrangler dev 125 125 conformance score deno deploy 60 seconds wrap any deno fetch handler a static file reader or an existing app main ts import createaeohandler from dualmark deno import myapp from app ts deno serve createaeohandler upstream myapp fetch full example with deno run 125 125 conformance score vercel edge 60 seconds drop a middleware that serves your pre built md twins to ai bots at the edge proxy ts import nextresponse from next server import createaeomiddleware from dualmark vercel export default createaeomiddleware upstream async nextresponse next fetchasset async url init fetch url tostring init export const config matcher _next favicon ico full next js vercel example 120 125 why marketing teams need this you already invested in seo now invest in aeo for a fraction of the effort problem without dualmark with dualmark ai cites competitors instead of you bots scrape your html get nav menus js errors pick the cleaner source same url serves clean markdown to bots polished html to humans no way to know if you re discoverable we hope chatgpt can read this dualmark verify returns a 0 125 score with line item failures llms txt proposal keeps changing hand maintained drifts from sitemap auto generated from the same config that drives your routes every team rebuilds this custom middleware in every repo none of them quite right one battle tested package conforms to a public spec no analytics for ai traffic was that a bot or a human onairequest hook cloudflare analytics engine integration bot name vendor page tokens country slow to roll out across pages marketing waits weeks for engineering add converter compare to a collection done production tested converters bundled built and battle tested at dodo payments for our own marketing site now extracted as oss so you don t have to write the same content negotiation bot detection and edge wrapping over and over what you actually ship yourcompany com pricing human visitors get this yourcompany com pricing md ai agents get this yourcompany com llms txt ai agents discover everything same url same content different rendering picked automatically by accept text markdown header markdown known ai bot user agent gptbot claudebot perplexitybot 21 more markdown direct md url markdown anything else html with link rel alternate pointing to the twin no duplicate content penalties markdown twin sets x robots tag noindex no js framework rewrites no content team retraining your existing pages stay the same built in converters dualmark converters drop in markdown generation for the page types every marketing site has converter what it s for marketing examples blog long form posts engineering blog customer stories case study customer wins logos with stats and pull quote changelog release notes what s new in v1 4 with grouped changes compare us vs competitor stripe alternative pages docs documentation getting started api guides feature product feature pages webhooks sso problem solution faq glossary term definitions what is a payment gateway integration app marketplace integrations connect stripe to acme slack connector pages legal policy pages terms privacy dpa pricing pricing tables tier comparison with ctas pseo programmatic seo seo services in san francisco with facts cross links status page uptime status public component health incidents tool standalone calculators currency converter video video landing pages webinar replays each converter takes your collection entry returns clean markdown with the right structure for ai consumption title description breadcrumbs faq extraction related links no prompt engineering required import compareconverter from dualmark converters const convert compareconverter siteurl https yourcompany com basepath compare const md convert yourcomparepage battle tested markdown layout verify any site against the spec bunx dualmark cli verify https yourcompany com pricing dualmark conformance report url https yourcompany com pricing markdown https yourcompany com pricing md score 125 125 duration 107ms passed 20 md fetch markdown twin url is reachable 10 md contenttype content type is text markdown charset utf 8 10 md tokensheader x markdown tokens header is present 10 md noindex x robots tag includes noindex 10 md vary vary header includes accept 10 md body body is non empty markdown 10 html linkalternate html response advertises markdown twin 10 negotiation botua gptbot ua receives text markdown 10 negotiation acceptheader accept text markdown receives text markdown three conformance levels basic 60 standard 80 advanced 95 drop the score in your ci to prevent regressions github workflows ci yml run bunx dualmark cli verify https staging yourcompany com pricing exits non zero if any required check fails what s in the box package npm size what it does dualmark core npm i dualmark core 14 kb framework agnostic primitives content negotiation rfc 7231 ai bot detection 24 known bots markdown response builder token estimation composition helpers llms txt rendering zero runtime deps dualmark converters npm i dualmark converters 16 kb production tested converter factories dualmark astro npm i dualmark astro 22 kb astro 5 integration auto generates md endpoints ships middleware generates llms txt dualmark nextjs npm i dualmark nextjs 15 kb next js app router adapter withdualmark createdualmarkmiddleware createdualmarkroutehandler createllmstxthandler dualmark sveltekit npm i dualmark sveltekit 19 kb sveltekit adapter vite route generator createdualmarkhandle generated md endpoints and llms txt dualmark nuxt npm i dualmark nuxt 15 kb nuxt module auto generates md endpoints injects link rel alternate middleware generates llms txt dualmark cloudflare npm i dualmark cloudflare 9 kb workers edge adapter wraps any upstream worker hooks for analytics telemetry dualmark fastly npm i dualmark fastly 9 kb fastly compute edge adapter natively proxies to fastly backends with background hooks dualmark netlify npm i dualmark netlify 9 kb netlify edge functions adapter wraps context next and serves markdown to ai bots at the edge dualmark vercel npm i dualmark vercel 9 kb vercel edge middleware adapter createaeomiddleware wraps any upstream handler serves pre built md with lifecycle hooks dualmark deno npm i dualmark deno 8 kb deno deploy edge adapter wraps any deno fetch handler lifecycle hooks scheduled on info completed dualmark cli npm i g dualmark cli 16 kb dualmark verify url programmatic api too plus spec the aeo specification v1 0 public framework agnostic rfc 2119 compliant implement it in go rust php ruby your call apps docs fumadocs site at dualmark dev apps docs app play interactive accept header ua tester live at dualmark dev play examples ten end to end working examples astro astro cloudflare sanity astro next js sveltekit nuxt deno netlify fastly vercel end to end verified surface status dualmark core 174 tests pass vitest fast check property tests dualmark converters 31 tests pass dualmark cloudflare 23 tests pass dualmark fastly 19 tests pass dualmark deno 23 tests pass dualmark cli 25 tests pass dualmark astro 39 tests pass dualmark nextjs 47 tests pass dualmark sveltekit 17 tests pass dualmark nuxt 37 tests pass dualmark netlify 28 tests pass dualmark vercel 28 tests pass examples astro blog 80 80 under astro dev skip negotiation examples sanity astro 80 80 under astro dev skip negotiation for fixture backed blog glossary docs examples astro cloudflare full 125 125 perfect under wrangler dev full negotiation examples nextjs app router 120 125 under next dev now using dualmark nextjs examples sveltekit blog 125 125 perfect under vite dev full negotiation examples deno deploy 125 125 perfect under deno run full negotiation examples fastly compute 125 125 perfect under fastly compute serve full negotiation examples vercel edge full 120 125 under next dev dualmark vercel apps docs 26 routes prerendered all serve 200 play route live at dualmark dev play integrated into the docs app bun install bun run build bun run test bun run typecheck 407 tests across 9 packages where it goes from here we re building toward dualmark being the aeo infrastructure for marketing sites the same way tailwind became the default for marketing css or vercel for marketing hosting the roadmap more framework adapters remix react router more converters pricing tables changelog docs api reference status pages integrations aeo analytics a hosted dashboard on top of the onairequest hook so marketing can see which bot reads which page when spec evolution toward aeo 1 1 with structured data hints per section markdown anchors and sitemap md cms integrations sanity contentful builder io plugins so non engineers can author dual marked content if you re a marketing engineer reading this and any of those would land in your stack open an issue or 1 an existing one contributing we re early issues prs and i tried it on framework and it broke reports are all welcome read contributing md for the dev loop and release flow the aeo spec is authoritative if you implement it elsewhere in any language we want to link to your implementation bun install bun run build turbo orchestrated build bun run test vitest across all packages bun run typecheck license apache 2 0 see license and notice includes a patent grant use it for anything attribution appreciated never required status pre 1 0 apis may change in patch releases until 1 0 the aeo spec v1 0 is authoritative framework code follows production ready for early adopters we re running it on dodopayments com about open source aeo answer engine optimization infrastructure every page dual marked markdown twins for ai agents alongside html for humans picked by http content negotiation dualmark dev topics markdown open source typescript nextjs geo ai bots content negotiation ai search cloudflare workers aeo astro integration ai seo llms txt generative engine optimization answer engine optimization resources readme license apache 2 0 license code of conduct code of conduct contributing contributing uh oh there was an error while loading please reload this page activity custom properties stars 96 stars watchers 1 watching forks 27 forks report repository releases 12 v0 10 0 dualmark netlify dualmark nuxt adapters api reference converter pluggable tokenizer latest jun 18 2026 11 releases uh oh there was an error while loading please reload this page contributors uh oh there was an error while loading please reload this page languages...
|