CONTENT NEG
B03 内容协商:Accept 头与 Markdown 优先策略
同一 URL 对 AI 爬虫返回干净 Markdown、对人类返回完整页面——内容协商是实现这一目标的钥匙。
B03 内容协商:对AI返回干净Markdown
title: "B03 内容协商:对AI返回干净Markdown" category: chapter num: "B03" order: 6 tags: [GEO, 内容协商, Markdown, AI爬虫] updated: 2026-08-09
什么是内容协商
内容协商(Content Negotiation)是HTTP协议的一种机制,允许服务器根据客户端的能力返回不同格式的内容。
对于GEO来说,关键在于:当AI爬虫请求内容时,返回干净的Markdown格式,而非HTML。
为什么返回Markdown很重要
1. 解析效率
- Markdown比HTML更简单,解析更快
- AI模型对Markdown的识别准确率更高
- 减少噪声,提升内容质量
2. 语义清晰
- Markdown的结构更明确(标题、列表、代码块)
- AI更容易提取关键信息
- 减少歧义,提升引用准确性
3. 存储效率
- Markdown文件更小,传输更快
- 减少服务器负载
- 提升爬虫效率
Accept Headers解析
常见的Accept Header
Accept: text/markdown
Accept: application/markdown
Accept: text/plain
Accept: */*
解析策略
- 优先匹配
text/markdown - 其次匹配
application/markdown - 最后匹配
text/plain - 默认返回HTML(兼容性)
实现示例(Nginx)
location / {
# 检查Accept header
if ($http_accept ~* markdown) {
rewrite ^(.*)$ /markdown$1 break;
}
# 默认返回HTML
}
实现示例(Node.js/Express)
app.get('/', (req, res) => {
const accept = req.headers.accept || '';
if (accept.includes('markdown') || accept.includes('text/plain')) {
// 返回Markdown
res.setHeader('Content-Type', 'text/markdown');
res.send(markdownContent);
} else {
// 返回HTML
res.setHeader('Content-Type', 'text/html');
res.send(htmlContent);
}
});
Markdown格式优化
1. 标题层级
- 使用清晰的H1-H6层级
- 避免跳过层级
- 每个章节有明确标题
2. 列表使用
- 优先使用有序/无序列表
- 避免大段纯文本
- 列表帮助AI识别结构化内容
3. 代码块
- 使用三反引号标记代码块
- 指定语言类型
- 代码块提供明确的语义边界
4. 表格
- 使用Markdown表格语法
- 表头清晰
- 避免复杂嵌套
技术实现建议
1. 缓存策略
- 缓存Markdown版本
- 避免每次请求都转换
- 设置合理的缓存过期时间
2. 错误处理
- 处理不支持的Accept header
- 提供回退机制
- 记录异常情况
3. 测试验证
- 使用不同的Accept header测试
- 验证Markdown渲染效果
- 检查AI爬虫的解析结果
检查清单
- [ ] 实现Accept header解析
- [ ] 配置Markdown内容类型
- [ ] 优化Markdown格式
- [ ] 设置缓存策略
- [ ] 添加错误处理
- [ ] 测试验证
本章要点
- 内容协商允许服务器根据客户端能力返回不同格式
- 对AI爬虫返回Markdown能提升解析效率和引用准确性
- 需要解析Accept header,优先匹配markdown类型
- Markdown格式优化包括标题层级、列表、代码块、表格
- 建议实现缓存、错误处理和测试验证
下一步
下一章我们将探讨反投毒与合规——如何保护你的内容。
来源:docs/content-negotiation.md + 相关译文