@ dualmark/ vercel (韩语)
用于Dualmark AEO框架的Vercel Edge Middleware适配器. 将任何上游处理器包起来,并透明地为边缘的AI bots服务-您现有的站点没有变化.
安装
bun add @dualmark/vercel @dualmark/core
使用量
// 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" }],
},
],
};
Vercel上的情况
Vercel Edge Middleware 为同一来源重新触发 fetch() 打电话 为了防止无限循环,适配器增加了一个 x-dualmark-subrequest 标题到内部 fetchAsset 检测到子请求时的电话和短路——返回 NextResponse.next() 所以Vercel直接为静态文件服务.
upstream应返回NextResponse.next()用于浏览器请求。 适配器直接向响应对象上注入链接头.fetchAsset应当转发可选RequestInit改为fetch()因此包含子请求头 .
选项
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
upstream | (req) => Response | —— 说 | 非机器人请求处理器( 返回) NextResponse.next()(中文(简体) ) |
fetchAsset | (url, init?) => Response | —— 说 | 获取一个 .md 按 URL 编写的文件( 前导) init 改为 fetch(中文(简体) ) |
trailingSlash | "never" | "always" | "preserve" | "never" | 拖曳斜线模式 |
enableLinkHeader | boolean | true | 弹出 Link rel=alternate 关于 HTML 回复 |
hooks | { onAIRequest?, onMiss? } | —— 说 | AI请求事件的生命周期回调 |
redirects | { internal?, external? } | —— 说 | 为 AI bots 重定向规则 |
skip | { prefixes?, extensions? } | —— 说 | 完全跳过路径 |
headers | { cacheControl? } | —— 说 | 自定义响应头 |
它会做什么
- 子请求检测防止
fetch()vercel上无限循环 - 轨迹- 斜线执行( 可配置 :
never, (中文(简体) ),always, (中文(简体) ),preserve(中文(简体) ) - 通过 UA 检测AI 机器人
- 通过接受信头进行内容谈判
- 服务于预建
.md通过fetchAsset带有全 AEO 页眉 - 内部重定向:通向目标路径
.md - 外部重定向: 返回减记通知
- 406 当 HTML 或 markdown 都无法接受时
- 上游的链接信头注入
NextResponse.next()用于 HTML 回复 - 分析钩(应AI要求/关于Miss)
许可证
Apache 2.0 (英语)