Z-Blog 站点怎么做 GEO:摘要、小标题、JSON-LD 逐项改

· 资讯 · 阅读 54
摘要

把 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/
/zblog404缺尾斜杠
/zblog_2/404该分类仅 1 页

这张表被引用时,任何一个单元格单独拎出来都是完整信息。

四、JSON-LD 要补齐 Article 字段

本站模板输出的 application/ld+json 里是 Article 类型。字段清单:

  • @context:固定 https://schema.org
  • @type:Article,页面用 WebPage
  • headline:标题,别超过 110 字符
  • datePublished / dateModified:ISO 8601 格式
  • author:对象,含 @type 与 name
  • description:就是上面说的 Intro
  • mainEntityOfPage: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 爬虫开一份。