@dualmark/vercel

中文文档
0.11.0发布于 2026/08/24Apache-2.0TypeScriptESM + CJS构建来源已验证近 30 天下载 3150

Vercel Edge Middleware adapter for the Dualmark AEO framework. Wraps any upstream handler and transparently serves markdown to AI bots at the edge.

原始使用文档
文档目录6 节
  1. Install
  2. Usage
  3. How it works on Vercel
  4. Options
  5. What it does
  6. License

@dualmark/vercel

Vercel Edge Middleware adapter for the Dualmark AEO framework. Wraps any upstream handler and transparently serves markdown to AI bots at the edge — no changes to your existing site.

Install

bun add @dualmark/vercel @dualmark/core

Usage

// proxy.ts
import { NextResponse } from "next/server";
import { createAEOMiddleware } from "@dualmark/vercel";

const middleware = createAEOMiddleware({
  upstream: async () => NextResponse.next(),
  fetchAsset: async (url, init) => fetch(url.toString(), init),
  trailingSlash: "never",
  enableLinkHeader: true,
  hooks: {
    onAIRequest: (info) => console.log(`${info.botName} hit ${info.pathname}`),
    onMiss: (info) => console.warn(`miss: ${info.pathname}`),
  },
});

export default middleware;

export const config = {
  matcher: [
    {
      source: "/((?!_next/|favicon.ico).*)",
      missing: [{ type: "header", key: "next-router-prefetch" }],
    },
  ],
};

How it works on Vercel

Vercel Edge Middleware re-triggers for same-origin fetch() calls. To prevent infinite loops, the adapter adds an x-dualmark-subrequest header to internal fetchAsset calls and short-circuits when it detects a subrequest — returning NextResponse.next() so Vercel serves the static file directly.

  • upstream should return NextResponse.next() for browser requests. The adapter injects Link headers directly on the response object.
  • fetchAsset should forward the optional RequestInit to fetch() so the subrequest header is included.

Options

OptionTypeDefaultDescription
upstream(req) => Response—Handler for non-bot requests (return NextResponse.next())
fetchAsset(url, init?) => Response—Fetch a .md file by URL (forward init to fetch)
trailingSlash"never" | "always" | "preserve""never"Trailing slash mode
enableLinkHeaderbooleantrueInject Link rel=alternate on HTML responses
hooks{ onAIRequest?, onMiss? }—Lifecycle callbacks for AI request events
redirects{ internal?, external? }—Redirect rules for AI bots
skip{ prefixes?, extensions? }—Paths to skip entirely
headers{ cacheControl? }—Custom response headers

What it does

  1. Subrequest detection to prevent fetch() infinite loops on Vercel
  2. Trailing-slash enforcement (configurable: never, always, preserve)
  3. AI bot detection via UA
  4. Content negotiation via Accept header
  5. Serves pre-built .md via fetchAsset with full AEO headers
  6. Internal redirects: routes to target's .md
  7. External redirects: returns markdown notice
  8. 406 when neither HTML nor markdown is acceptable
  9. Link header injection on upstream NextResponse.next() for HTML responses
  10. Analytics hooks (onAIRequest / onMiss)

License

Apache 2.0

版本与发布记录

@dualmark/vercel 共发布 3 个版本,首次发布于 2026/06/04;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.11.0latest2026/08/242 个月前
0.10.02026/06/184 个月前
0.9.02026/06/045 个月前

关于 @dualmark/vercel 的常见问题

@dualmark/vercel 是什么?

Vercel Edge Middleware adapter for the Dualmark AEO framework. Wraps any upstream handler and transparently serves markdown to AI bots at the edge.

如何安装 @dualmark/vercel?

在项目目录运行 npm install @dualmark/vercel,或使用 pnpm add / yarn add / bun add。

@dualmark/vercel 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dualmark/vercel 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@dualmark/vercel 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dualmark/vercel 可以商用吗?

@dualmark/vercel 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@dualmark/vercel 的下载量有多少?

根据 npm 官方下载统计,@dualmark/vercel 在 2026/10/13 – 2026/11/11 这 30 天内被下载 3,150 次,日均约 105 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dualmark/vercel 还在维护吗?

最新版本 0.11.0 发布于 2026/08/24(2 个月前);至今共发布 3 个版本,其中过去 12 个月发布了 3 个;首次发布于 2026/06/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。