ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

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),仅供参考
返回列表