11.3 边缘函数返回精简版内容给AI机器人
在生成式搜索时代,AI机器人(如 GPTBot、ClaudeBot、Bytespider)和传统搜索引擎爬虫(如 Googlebot)对内容的需求存在显著差异。传统爬虫需要完整的 HTML 页面以进行索引和排名,而 AI 机器人通常只提取核心文本信息用于训练或生成答案。边缘函数(Edge Function)提供了一种高效、灵活的解决方案,允许你根据请求来源动态返回不同版本的内容,从而优化资源消耗并提升 AI 机器人的数据提取效率。
11.3.1 为什么需要精简版内容?
- 降低带宽与计算成本:AI 机器人通常不需要 CSS、JavaScript、图片或复杂的布局。返回精简版内容(仅包含核心文本和结构化数据)可显著减少传输数据量。
- 提升数据提取速度:精简内容去除了噪音,使 AI 机器人能更快地定位到关键信息(如定义、步骤、结论)。
- 避免内容污染:防止 AI 机器人抓取到广告、弹窗、用户评论等非核心内容,从而影响生成答案的准确性。
- 控制引用内容:通过精心设计的精简版内容,你可以主动引导 AI 机器人引用你希望被展示的特定段落,而非随机抓取。
11.3.2 边缘函数的工作原理
边缘函数运行在 CDN 边缘节点上(如 Cloudflare Workers、AWS Lambda@Edge、Vercel Edge Functions、Akamai EdgeWorkers)。当请求到达时,函数会检查 User-Agent 或其他请求头,判断是否为已知的 AI 机器人爬虫。如果是,则返回一个预定义的精简版内容(通常为纯文本或精简 HTML),否则返回完整的页面。
基本流程:
- 请求到达 CDN 边缘节点。
- 边缘函数检查
User-Agent或自定义请求头。 - 若匹配 AI 机器人列表,则从缓存或源站获取精简版内容并返回。
- 若不匹配,则正常请求源站返回完整页面。
11.3.3 实现方案:以 Cloudflare Workers 为例
以下是一个使用 Cloudflare Workers 实现的边缘函数示例,用于识别 AI 机器人并返回精简版内容。
// AI 机器人 User-Agent 列表
const AI_BOTS = [
'GPTBot',
'GoogleOther',
'CCBot',
'ClaudeBot',
'Bytespider',
'DeepSeek-Bot',
'PerplexityBot',
'YouBot',
'ChatGPT-User'
];
// 精简版内容生成函数(示例)
function generateLightweightContent(request) {
// 实际应用中,这里可以返回从缓存或源站获取的纯文本内容
// 或者直接返回一个预定义的 JSON/HTML 片段
const originalUrl = new URL(request.url);
const path = originalUrl.pathname;
// 假设我们有一个映射表,根据路径返回对应的精简内容
const contentMap = {
'/article/how-to-seo': 'SEO 的核心步骤包括:关键词研究、技术优化、内容创建和链接建设。',
'/faq/what-is-geo': 'GEO(生成引擎优化)是针对 AI 生成式搜索的优化策略。',
'/product/ai-tool': '我们的 AI 工具提供自动化内容生成和优化功能。'
};
const content = contentMap[path] || '未找到对应内容。';
// 返回精简版 HTML(无 CSS/JS)
return new Response(
`<html><body><main>${content}</main></body></html>`,
{
headers: {
'Content-Type': 'text/html; charset=utf-8',
'X-Robots-Tag': 'noindex, follow', // 可选:防止精简版被索引
'Cache-Control': 'public, max-age=3600'
}
}
);
}
// 主处理函数
async function handleRequest(request) {
const userAgent = request.headers.get('User-Agent') || '';
const isAIBot = AI_BOTS.some(bot => userAgent.includes(bot));
if (isAIBot) {
return generateLightweightContent(request);
}
// 非 AI 机器人,正常请求源站
return fetch(request);
}
// 注册事件监听
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
11.3.4 动态内容适配策略
对于动态页面(如产品详情页、博客文章),边缘函数需要从源站获取内容并提取核心部分。以下是一个更高级的方案:
- 源站提供 API 端点:在源站创建一个专门为 AI 机器人服务的 API 端点(如
/api/lightweight?url=xxx),返回 JSON 格式的核心内容(标题、摘要、正文、结构化数据)。 - 边缘函数缓存:边缘函数缓存 API 响应,避免每次请求都回源。
- 内容提取规则:如果无法修改源站,边缘函数可以抓取完整页面,然后使用正则表达式或 HTML 解析器(如
cheerio)提取<main>、<article>或特定class内的文本。
示例:使用 Cloudflare Workers + HTMLRewriter 提取核心内容
class ContentExtractor {
constructor() {
this.text = '';
this.inContent = false;
}
element(element) {
// 只提取 <main> 或 <article> 内的内容
if (element.tagName === 'main' || element.tagName === 'article') {
this.inContent = true;
}
}
text(text) {
if (this.inContent) {
this.text += text.text;
}
}
end(element) {
if (element.tagName === 'main' || element.tagName === 'article') {
this.inContent = false;
}
}
}
async function handleRequest(request) {
const userAgent = request.headers.get('User-Agent') || '';
const isAIBot = AI_BOTS.some(bot => userAgent.includes(bot));
if (isAIBot) {
const originalResponse = await fetch(request);
const extractor = new ContentExtractor();
const transformed = new HTMLRewriter()
.on('main', extractor)
.on('article', extractor)
.transform(originalResponse);
const body = await transformed.text();
return new Response(
`<html><body><main>${extractor.text}</main></body></html>`,
{ headers: { 'Content-Type': 'text/html; charset=utf-8' } }
);
}
return fetch(request);
}
11.3.5 针对不同 AI 机器人的差异化策略
不同的 AI 机器人可能对内容格式有不同偏好。例如:
- GPTBot:偏好纯文本或简洁的 HTML。
- Bytespider(字节跳动):可能更关注视频元数据和结构化数据。
- DeepSeek-Bot:对逻辑链条和结构化内容敏感。
你可以通过边缘函数实现差异化响应:
const botSpecificConfig = {
'GPTBot': { format: 'text/plain', includeSchema: false },
'Bytespider': { format: 'application/json', includeSchema: true },
'DeepSeek-Bot': { format: 'text/html', includeSchema: true, includeLogicChain: true }
};
async function handleRequest(request) {
const userAgent = request.headers.get('User-Agent') || '';
const matchedBot = AI_BOTS.find(bot => userAgent.includes(bot));
if (matchedBot) {
const config = botSpecificConfig[matchedBot] || { format: 'text/html', includeSchema: false };
// 根据 config 生成不同格式的精简内容
return generateCustomContent(request, config);
}
return fetch(request);
}
11.3.6 注意事项与最佳实践
- 不要屏蔽所有 AI 机器人:完全屏蔽可能导致你的内容在生成式搜索中消失。边缘函数应返回有价值的内容,而非空响应或 403 错误。
- 保持内容一致性:精简版内容应与完整页面内容一致,避免因差异导致 AI 模型生成错误答案。
- 缓存策略:为精简版内容设置合理的
Cache-Control头部,减少源站压力。但注意,AI 机器人可能不遵循缓存指令。 - 日志与监控:记录 AI 机器人的访问日志,分析哪些内容被频繁抓取,以便优化精简版内容的质量。
- 避免过度优化:不要为了迎合 AI 机器人而制造虚假或重复内容,这可能导致被判定为垃圾内容。
- 测试:使用
curl或 Postman 模拟不同 User-Agent 请求,验证边缘函数是否正确返回精简版内容。
11.3.7 总结
边缘函数返回精简版内容给 AI 机器人,是全栈工程师在 GEO 时代的一项关键技能。它不仅能优化资源消耗,还能主动控制 AI 机器人对内容的解读和引用。通过动态适配、差异化策略和合理的缓存机制,你可以确保你的内容在生成式搜索中保持高可见性和高准确性。
