Z-Blog 站点怎么做 GEO:摘要、小标题、JSON-LD 逐项改
把 GEO 方法落到 Z-Blog 站点上,逐项说清改哪里:独立摘要必须填 log_Intro 字段而非靠正文截取、小标题控制在两级避免切片孤立、对比数据用表格提高结构化程度、JSON-LD 的 Article 需补齐 dateModified 等字段、伪静态 URL 本身是语义信号、canonical 防止同内容稀释引用权重。附本站改造前后实测字节数与状态码。
前两篇讲了原理和方法,这篇讲落地。全部基于本站(Z-BlogPHP + framehome 主题)实际改过的内容。
一、摘要必须单独填,不能靠截取
Z-Blog 文章有独立字段 log_Intro,后台叫“摘要”。不填的话,主题模板通常回退成截取正文前 N 个字。
问题在 GEO 场景下会被放大:<meta name="description"> 直接取这个值,等于告诉模型“这篇文章的开头长这样”。而正文开头往往是过渡句,不含信息量。
本站 /post/13.html 就踩过这个坑——description 和正文第一段一字不差,都是“上一篇把……收成了插件,能开关了”。模型拿到这段,提炼不出任何结论。
正确写法是一句话给出这篇的结论和范围,比如 /post/18.html 的:
{%page%} 为 1 时规则整段不生成,不是把 1 替换成空字符串。这篇把静态规则的段级跳过机制、尾斜杠、重复页面三条讲透,附实测状态码。
这条摘要能独立成句、能被单独引用,才算合格。
二、小标题控制在两级
模型切片引用时,会取“标题 + 下面那段”。级别太深会切出孤立的片段。
本站的做法:正文只用 <h2>,需要细分时用加粗引导句或表格,不再往下开 <h3>。三级标题在移动端显示也偏小,两件事一起解决。
三、能用表格就不用段落
表格是结构化程度最高的 HTML 元素。同一组对比,写成段落模型要自己抽三行,写成 table 直接拿走。
本站实测的对比表:
| 地址 | 状态码 | 说明 |
|---|---|---|
| /zblog/ | 200 | 正常 |
| /zblog_1/ | 200 | 与首页同内容,canonical 指向 /zblog/ |
| /zblog | 404 | 缺尾斜杠 |
| /zblog_2/ | 404 | 该分类仅 1 页 |
这张表被引用时,任何一个单元格单独拎出来都是完整信息。
四、JSON-LD 要补齐 Article 字段
本站模板输出的 application/ld+json 里是 Article 类型。字段清单:
@context:固定https://schema.org@type:Article,页面用WebPageheadline:标题,别超过 110 字符datePublished/dateModified:ISO 8601 格式author:对象,含@type与namedescription:就是上面说的 IntromainEntityOfPage:canonical 地址
缺 dateModified 是最常见的问题——模型判断内容新鲜度会用到这个字段,没有就退回用 datePublished。
五、URL 要能推出来
伪静态不只是好看。一个能看懂的 /post/18.html,比 /?id=18 多一层语义。模型在整理引用来源时,路径本身是信号。
本站已开 REWRITE 模式,ZC_STATIC_MODE 为 REWRITE。规则细节在 /post/18.html 那篇写了。
六、别忘 canonical
/zblog_1/ 和 /zblog/ 内容完全相同,靠 canonical 告诉抓取方哪个是正本。缺了这条,同一份内容可能被算成两份,稀释引用权重。
本站改造后的效果
能测到的:
- 文章 description 从“和正文首段相同”变为独立概括句
- 分类页
/zblog/字节数 20878 → 22330,说明新增文章被收进列表 - 页面响应时间 99~181ms 之间波动,与内容改造无直接关系
测不到的:实际被 AI 引用的次数。这个要等一段时间才有数据,有结果再补。
下一篇
打算写 /robots.txt 和 sitemap.xml 在 AI 抓取场景下的配置——哪些 UA 该放行、sitemap 里 lastmod 怎么给、要不要单独给 AI 爬虫开一份。