Zola 加结构化数据:从一篇 Article 到全站 JSON-LD 的实战流程

发布时间:2026/11/3 23:59:49

Zola 加结构化数据:从一篇 Article 到全站 JSON-LD 的实战流程 Zola 加结构化数据从一篇 Article 到全站 JSON-LD 的实战流程【免费下载链接】zolaA fast static site generator in a single binary with everything built-in. https://www.getzola.org项目地址: https://gitcode.com/GitHub_Trending/zo/zola搜自己的文章时Google 结果里只有标题和一段截断摘要竞品那条却带着作者和日期。差的正是页面源码里那份「结构化数据」。Zola 默认不会输出这些标记但在模板层补上 Zola JSON-LD搜索引擎就能读懂你的页面。为什么静态站也需要结构化数据结构化数据是写给搜索引擎读、不渲染给访客看的页面元信息用的是 Google、Bing 等几家共同认可的词汇表 Schema.org。页面带上 Article 类型的标记搜索结果里就能显示作者与发布日期带上 Product 类型则能显示价格。这种带附加信息的展示叫「富结果」直接影响搜索结果的点击率。要清楚一点Zola 的构建流程里没有输出这些标记的模块它的职责是把 Markdown 变成 HTML。所以 JSON-LD结构化数据的一种 JSON 写法得由你写进模板。好处是 Zola 的产物是纯静态文件模板里写了什么最终 HTML 里就是什么搜索引擎抓到的内容完全确定没有运行时差异。 准备确认你的模板与变量动手前先确认下面五项每项花不了几分钟三个默认模板index.html管首页section.html管章节列表页page.html管内容页用了主题就看主题里同名模板没有的话参考 test_site/templates/ 里的示例。本文会用到的页面变量page.title、page.description、page.date、page.updated、page.taxonomies、page.assets、page.extra以及全局的current_url和config完整字段清单见 docs/content/documentation/templates/pages-sections.md。Front matterMarkdown 文件顶部块里的元数据头部作者这类字段写在这里通过page.extra读取。本地预览站点根目录执行zola serve构建结果在http://localhost:1111随时能查看页面源码。确认 base_url检查config.toml里的base_url指向真实域名把本地路径转成完整网址的 get_url 函数依赖它。 最小实现一篇博客文章的 Article 标记拿一篇博客文章打样三步就能输出一段完整的 Article 结构化数据改动全部在你自己站点的templates/目录里。第 1 步在 page.html 的 head 里放 JSON-LD 脚本标签JSON-LD 是装在script typeapplication/ldjson标签里的一个 JSON 块TeraZola 的模板引擎语法接近 Jinja2会在构建时把{{ }}变量替换成真实值。把这段放进 page.html 的head标签内主题是现成模板的话先把同名模板复制到自己目录再改script typeapplication/ldjson { context: https://schema.org, type: Article, headline: {{ page.title }}, description: {{ page.description | default(valueconfig.description) }}, datePublished: {{ page.date | date(format%Y-%m-%d) }}, dateModified: {{ page.updated | default(valuepage.date) | date(format%Y-%m-%d) }}, author: {type: Person, name: {{ page.extra.author | default(valueconfig.extra.author) }}}, mainEntityOfPage: {type: WebPage, id: {{ current_url }}} } /script作者这里先取 front matter 的page.extra.author取不到就回落到config.extra.author在 config.toml 的extra里放一个默认作者全站文章就都有了。第 2 步补上图片、发布者和关键词字段往同一个 script 标签里的 JSON 对象中追加这三行位置紧挨description字段即可image: {{ get_url(pathpage.assets | first) }}, publisher: {type: Organization, name: {{ config.title }}}, keywords: {{ page.taxonomies.tags | join(sep, ) }}page.assets是和 Markdown 放在同目录的图片文件列表get_url把首个路径转成带域名的完整网址如果你的标签分类名不叫tags就把字段名改成对应的那个没有配图的页面可以把image换成固定 logo 路径。第 3 步核对日期格式与绝对 URL两个最容易出错的位置不需要新语法。日期字段里的date(format%Y-%m-%d)是 Tera 内置的 date 过滤器把 front matter 里的page.date格式化成标准日期字符串mainEntityOfPage里的current_url是 Zola 自动提供的当前页完整网址不要手写相对路径替代它。对某个变量拿不准时可以临时在模板里放一句{{ __tera_context }}打印完整上下文确认后再删掉。按页面类型切换首页与产品页Article 结构只适合内容页其他页面要换type用 Tera 的 if 语句控制触发条件完整文档只维护一份其余靠差异字段拼装。首页在 index.html 里写 WebSite 标记index.html只作用于首页直接放即可不需要判断。完整结构就是context加上下面四行放进 index.html 的head标签type: WebSite, name: {{ config.title }}, url: {{ config.base_url }}, potentialAction: {type: SearchAction, target: {{ config.base_url }}/search?q{search_term_string}}最后一行 SearchAction 描述站内搜索入口如果你的站点没有搜索页删掉它。产品页按 components 切到 Product 类型产品页如果都放在products/目录下可以用page.components页面从 content 根到文件的路径分段触发用{% if products in page.components %}包住下面的片段只有产品页会输出。完整结构同样是context加上这四行type: Product, name: {{ page.title }}, image: {{ get_url(pathpage.assets | first) }}, offers: {type: Offer, price: {{ page.extra.price }}, priceCurrency: CNY}价格与货币写在产品页 front matter 的extra里数据来自内容文件而不是模板写死改文章时顺手更新即可。抽成可复用片段并接入页面类型一多主模板里的 if 条件会失控。把每类标记移进独立模板片段再用 Tera 的 include 语法把一个文件的内容原样嵌入当前模板拉进来目录这样组织templates/ └── schema/ ├── article.html ├── website.html └── product.html在 page.html 的 head 里原输出标记的位置改成{% if products in page.components %} {% include schema/product.html %} {% endif %}schema/article.html的内容就是第 4 节第 1 步的完整块原样搬过去 首页的 WebSite 片段放进schema/website.html后在 index.html 里 include 即可主模板从此只留三行条件。 验证与一个最常见的坑验证走两条路。把页面 URL 提交到 Google 官方的富结果测试工具 https://search.google.com/test/rich-results 它会列出识别到的类型和出错的字段本地开发则执行zola serve浏览器打开文章页后查看源码并搜索ldjson确认 JSON 完整、值都对。最高频的坑是图片 URL 输出了相对路径。如果image字段直接写了page.assets | first而没经过 get_url输出会是/2018/foo.png这样的站内路径搜索引擎拉不到它图片标记等于缺失。定位分两步先查看源码搜ldjson看 image 字段的网址是否以/开头是的话把该字段包上get_url(path...)重新构建再查一次。下一步模板变量与内置函数get_url、date、default 等的完整清单见官方模板文档 docs/content/documentation/templates/overview.md个别过滤器的参数行为以官方文档为准。结构化数据的完整类型与字段规范参考 Google 的结构化数据文档 https://developers.google.com/search/docs/structured-data/intro-structured-data 。遇到拿不准的写法可以在 Zola 社区搜「Zola JSON-LD」常见的坑基本都有人踩过。【免费下载链接】zolaA fast static site generator in a single binary with everything built-in. https://www.getzola.org项目地址: https://gitcode.com/GitHub_Trending/zo/zola创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/3 5:38:18

LeetCode 1653 使字符串平衡的最少删除次数:动态规划与计数法详解

先交代一下背景,这道题我是在整理字符串类动态规划题目的时候重新刷到的。Leetcode 1653,题名很直白:使字符串平衡的最少删除次数。给定一个只包含字符a和b的字符串s,每次可以删除任意一个字符,问最少删除多少个字符&a…

2026/11/3 5:11:34

Python零基础入门全指南:从环境搭建到自动化脚本实战

1. 为什么Python能成为你的第一门编程语言这些年总有人问我:完全零基础,想学编程,到底从哪里开始?我的答案一直很统一——先学Python。不是因为它比别的语言“高级”,恰恰相反,是因为它足够“不高级”&…

2026/11/3 23:58:18

云服务器选购与配置全攻略:从AI开发到Web应用

1. 云服务器选购指南作为一名长期使用云服务器的开发者,我深知选择合适的云服务商对项目开发效率的影响。目前国内主流的云服务器平台中,阿里云和AutoDL是个人开发者和小团队常用的选择。阿里云作为国内市场份额最大的云服务商,其稳定性有保障…

2026/11/3 23:58:18

SQL优化实战:从执行计划到高级技巧

1. 为什么SQL优化是每个开发者的必修课记得刚入行时接手过一个报表系统,某天突然接到业务部门投诉:"导个Excel要半小时!"排查发现核心查询语句居然嵌套了5层子查询,执行计划显示全表扫描了上百万条数据。那次惨痛教训让…

2026/11/3 23:58:18

1.73亿token按官方价多少钱?拆解大模型API计费与缓存优化

1. 一笔1.73亿token的账,到底该怎么算九月份的时候,我拿 WorkBuddy 跑了一整个月的自动化任务,月底看后台统计,消耗了 1.73 亿 token。这个数字第一次跳出来的时候我自己都愣了一下——不是心疼,是好奇:如果…

2026/11/3 23:58:18

CSDN是什么:中文开发者社区的内容生态、检索甄别与技术写作

被人问“CSDN 是什么”的时候,我第一反应通常是反问一句:你是想找现成的代码片段,还是想认真写点东西发出去?这两个问题的答案完全不一样。对多数中文开发者来说,这个站点是绕不开的存在——搜一个报错信息&#xff0c…

2026/11/3 23:58:18

微信小程序+Java构建疫苗预约系统的高并发实践

1. 项目背景与核心价值新冠疫苗接种作为全球公共卫生事件中的重要环节,其预约管理系统的便捷性直接影响接种效率。传统线下预约方式存在排队时间长、信息不对称等问题,而基于微信小程序的解决方案具有天然优势:微信月活用户超12亿&#xff0c…

2026/11/3 23:53:18

AquaAI水系统遥感智能监测:水质反演与蓝藻预警实战解析

做水体遥感这些年,我接过不少跟水质监测、蓝藻预警相关的项目,说实话,真正能把“水体范围、水深、水温、水质遥感反演”这一整套链路完整跑通的机会并不多。多数项目要么卡在数据源选择上,要么倒在精度验证最后一关。这次想分享的…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑