Keynote.org.cn Schema.org 从零到全站覆盖
背景
Keynote.org.cn 是一个150篇的AI演示工具评测内容站,通过 Google AdSense 变现。站上有内容、有流量,但最大的问题藏在搜索引擎看不见的地方。
用自动化工具扫描后发现:全站零 Structured Data(结构化数据)。这意味着 Google 能收录页面,但 AI 搜索引擎(Perplexity、Google SGE、元宝)完全无法理解页面结构、作者信息、面包屑导航——它们不会引用这些页面作为答案源。
对于以AI搜索流量为主的2026年来说,这等于白做了内容。
问题诊断
- **零 Schema.org** —— 首页、文章页全无结构化数据,连最基础的 Organization 都没有
- **零 canonical** —— 搜索引擎可能收录错误URL,权重分散
- **无 robots.txt** —— 返回404,爬虫没有官方规则指引
- **120/150篇文章不足1500字** —— 最短仅549字,被 Google 判定为"薄内容"风险极高
- **GEO评分:D+(35分)**—— AI搜索引擎不会引用这些页面
解决方案
Schema.org 全覆盖
修改 Astro 项目的 Layout.astro 模板文件,一处改动覆盖全站177页:
// Layout.astro 中添加
关键坑:Astro 中 <script> 标签内不能用模板表达式({变量}),Astro 会把它当作客户端 JS 直接输出到 HTML,导致 JSON-LD 里出现 {JSON.stringify(...)} 的字面文本。
正确做法是用 Fragment set:html:
<Fragment set:html={`</script><script type="application/ld+json">${JSON.stringify(schema)}</script>`} />
这是 Astro 注入动态 JSON-LD 的唯一正确方式。
文章结构化
文章详情页 [slug].astro 添加了 Article + BreadcrumbList 双 Schema:
- **Article**:headline、datePublished、author、publisher、mainEntityOfPage
- **BreadcrumbList**:首页 → 所有文章 → 当前文章
其他修复
- 添加 canonical URL 到 Layout 模板,自动覆盖全站
- 创建 robots.txt 指向 sitemap-index.xml
- 补全 Open Graph 标签,微信/微博分享有预览图
- 3个AI代理并行扩写,21篇文章从500-800字提升至1500+字
成果
| 指标 | 修复前 | 修复后 |
|---|---|---|
| Schema.org | 0% | 100%(4种类型) |
| Canonical | 0% | 100% |
| Robots.txt | 404 | 200 |
| GEO评分 | D+(35) | B(78) |
| 文章达标率 | 20% | 35% |
踩过的坑
- **Astro 的 JSON-LD 陷阱**:
<script>内写 `{变量}` 不报错、不警告,直接输出字面文本,线上跑了几天才发现 - **文章扩写超时**:3个代理并行处理21篇文章,前几篇顺利,但单个代理超过20篇就会超出600秒限制。后续需分批处理
- **宝塔nginx路径特殊**:conf.d 目录不存在,需用面板自带路径配置
后续
- 98篇短文分批扩写至1500+字
- 考虑接入 Google Search Console 监控 Schema 抓取情况
- AI搜索引擎引用效果追踪(Perplexity / Google AI Overviews 中的出现频率)