
搜索结果只剩一行标题5 分钟给 Zola 网站加上搜索引擎看得懂的结构化数据【免费下载链接】zolaA fast static site generator in a single binary with everything built-in. https://www.getzola.org项目地址: https://gitcode.com/GitHub_Trending/zo/zola当你的博客文章在搜索结果里只剩一行标题和链接时问题通常不是内容写得不好而是搜索引擎“看不懂”它。Zola 是一个单二进制、模板完全由你掌控的静态网站生成器给它补上 Schema.org 结构化数据JSON-LD 形态就是 SEO 里最直接的翻译层机器读到标记用户在搜索框里看到富媒体卡片。一行标题和富卡片之间差的是机器可读的标记搜索结果里的“卡片”——摘要、作者头像、发布日期、缩略图——不是搜索引擎凭空生成的它来自页面里嵌在script typeapplication/ldjson中的一段 JSON。这段 JSON 遵循 Schema.org 的词表告诉机器这是 Article标题是 X发布日期是 Y作者是 Z。 没有这段标记时机器只能靠猜从一堆 HTML 里推断哪个是标题、哪段是正文。猜对是运气猜错就没有富媒体结果有了标记猜的过程直接跳过。所以差距清单很具体页面得声明类型Article、给出headline、datePublished、author、image这几个字段。Zola 的页面变量里这些几乎都有现成的缺的只是把它们写进模板那一步。可直接复制的最小 Article JSON-LD 模板能跑通的最短模板在 templates/ 下新建schema/article.html把下面的内容放进去。最关键的是date那一行Zola 内置的 feed 模板就是用%:z输出时区偏移的datePublished必须长成 ISO 8601 的样子才有效。script typeapplication/ldjson { context: https://schema.org, type: Article, headline: {{ page.title }}, image: [ {% for asset in page.assets if asset is matching(\\.(png|jpe?g|webp|avif)$) %} {{ get_url(pathasset) }}{% if not loop.last %},{% endif %} {% endfor %} ], author: { type: Person, name: {{ page.extra.author | default(valueconfig.extra.author) }} }, datePublished: {{ page.date | date(format%Y-%m-%dT%H:%M:%S%:z) }}, dateModified: {{ page.updated | default(valuepage.date) | date(format%Y-%m-%dT%H:%M:%S%:z) }}, mainEntityOfPage: {{ current_url }} } /script模板里每个字段对应哪个 Zola 变量page.title、page.date、page.updated、page.assets都是 Zola 页面对象自带的字段get_url(path...)负责把静态资源路径换算成带base_url的完整地址保证image里的链接在任何部署环境下都能访问current_url是模板内置变量直接给出当前页完整 URL供mainEntityOfPage使用。default过滤器则是给可选字段兜底——没写extra.author的文章不会渲染出空的作者名。⚠️ 唯一要留神的headline里如果出现英文双引号JSON 会直接断掉。标题保持简短或写死不带引号的措辞这个成本远低于做转义。让 JSON-LD 只在文章页生效用主题的话先查它做没做如果站点套了主题打开主题的文档和theme.toml找schema、JSON-LD这类词——不少主题已经内置了结构化数据重复注入两份标记反而会让验证工具报错。上面这个 AdiDoks 主题就是例子它的配置里专门留了[extra.schema]段落来下发站点级 JSON-LD。你在 themes/ 里翻自己的主题时看的就是这种写法。条件包含与站点级配置主题没做就在page.html的head里做定向包含{% if %}这一行决定了标记只跟着文章页走首页、分类页不会被误标成 Article。head ... {% if page.section posts %} {% include schema/article.html %} {% endif %} /head站点级信息沉到config.toml里模板就不必每篇 front matter 都重复写作者[extra] author 你的笔名产品页与首页也有各自的 Schema 类型产品页Product 加 Offer商品内容别沿用 Article 的类型——机器读到type: Article却找不到正文结构验证会直接报警。仿照文章模板建schema/product.html价格信息放在offers里extra字段从 front matter 取{ context: https://schema.org, type: Product, name: {{ page.title }}, offers: { type: Offer, price: {{ page.extra.price }}, priceCurrency: {{ page.extra.currency | default(valueCNY) }} } }包含方式和文章页完全一样换个 section 名再包一层{% if %}即可。首页WebSite首页是整站的入口标成WebSite才能让机器理解“这是一个站点而不是一篇文章”。只保留两个必填字段就够起步{ context: https://schema.org, type: WebSite, name: {{ config.title }}, url: {{ config.base_url }} }放进index.html的headconfig.title和config.base_url都是配置对象直接给的不需要额外设置。上线前验证确认标记真的生效用 zola build 在本地核对产物标记是构建时生成的改完模板先跑一次构建再在产物里搜——出现匹配说明脚本真的进了 HTMLzola build grep -rl ldjson public | head更直接的办法是zola serve起本地服务在浏览器开发者工具里搜application/ldjson肉眼确认字段值都填对了——这一步能拦下九成的低级错误。标记出错的三个高频位置headline、datePublished这类必需字段缺失Article 验证必挂模板里留空字符串也算缺失。日期不是 ISO 8601 格式比如只写了%Y-%m-%d或本地化格式机器无法解析时间。标题或作者名带英文引号把 JSON 结构打断页面能打开但整段标记被丢弃。✅ 本地构建的 HTML 过了验证就把它提交部署然后做两件事用 Google 的富媒体结果测试工具粘贴线上 URL 复查一遍再把站点自带的sitemap.xml提交到搜索引擎的站点管理工具里观察几天搜索结果卡片的变化。富媒体结果不是构建完立刻出现的——标记就位、提交 sitemap、给索引一点时间这三件事做完才算闭环。【免费下载链接】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),仅供参考