博主头像
mxd's Blog

以技术为翼,以生活为魂

给自己的博客加上了 JSON-LD 站内搜索结构化数据

最近整理自己的博客时,顺手把首页的 JSON-LD 结构化数据重新改了一下。

之前主页使用的是 WebSite 类型,不过里面写的还是个人主页的信息。现在博客早就已经单独使用 blog.mxdyeah.com,所以觉得继续沿用原来的配置有点不合适,也正好趁这个机会把站内搜索一起补进去。

我希望搜索引擎看到的站点名称是 mxd's Blog,而不是之前个人主页上的 mxd (@mxdyeah)。作者仍然是我自己,个人主页、GitHub、X 和 Telegram 这些链接也保留。

改完之后大概是这样:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "@id": "https://blog.mxdyeah.com",
  "url": "https://blog.mxdyeah.com",
  "name": "mxd's Blog",
  "description": "Empowered by technology, inspired by life.",
  "author": {
    "@type": "Person",
    "name": "mxd",
    "url": "https://www.mxdyeah.com",
    "sameAs": [
      "https://x.com/mxdabc",
      "https://github.com/mxdabc",
      "https://t.me/mxdshare"
    ]
  },
  "potentialAction": {
    "@type": "SearchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "https://blog.mxdyeah.com/search/{search_term_string}"
    },
    "query-input": {
      "@type": "PropertyValueSpecification",
      "valueRequired": true,
      "valueName": "search_term_string"
    }
  }
}
</script>

这里比较值得注意的是 potentialAction

它不是在网页上真的创建一个搜索框,而是在结构化数据里告诉搜索引擎:这个网站有搜索功能,如果需要构造站内搜索 URL,可以按照这个模板来。

我的博客搜索地址本身比较简单:

https://blog.mxdyeah.com/search/xxx

所以对应的 urlTemplate 就写成:

https://blog.mxdyeah.com/search/{search_term_string}

比如搜索 Linux,实际地址就是:

https://blog.mxdyeah.com/search/Linux

这种写法对我来说比较舒服,因为博客本身的 URL 结构就已经这么设计了,不需要为了结构化数据再额外做一个 /search?q=xxx 的接口。

还有一个小坑,是我一开始贴出来的 JSON-LD 里面 URL 看起来像这样:

"[https://blog.mxdyeah.com](https://blog.mxdyeah.com)"

这是 Markdown 的链接写法,但 JSON-LD 不是 Markdown。放进 JSON-LD 后,URL 应该就是普通字符串:

"url": "https://blog.mxdyeah.com"

这个问题看起来挺小,但如果直接把 Markdown 里的内容复制进 <script type="application/ld+json">,最终得到的就不是一个正常的 URL。

@id 也顺便从原来的个人主页改成了博客自己的地址:

"@id": "https://blog.mxdyeah.com"

我觉得这个比较合理。个人主页和博客虽然都是我的网站,但它们在内容定位上还是两个东西。个人主页负责介绍自己和放各种链接,博客则主要放技术记录、折腾过程以及一些杂谈。结构化数据里把这两个站点分开,也更符合实际的网站结构。

作者信息则没有必要重新造一份,继续使用:

"author": {
  "@type": "Person",
  "name": "mxd",
  "url": "https://www.mxdyeah.com"
}

然后用 sameAs 把几个常用账号关联起来。

这类东西我一般不会特别在意“写得越多越好”。JSON-LD 的目的还是尽可能准确地描述页面,而不是把所有能想到的字段都塞进去。博客首页是什么,就描述成什么;作者是谁,就指向作者;有搜索,就把真实存在的搜索 URL 模板写进去。

毕竟这些结构化数据最后不是给人看的,维护的时候却还是人来维护。过几年回头看,如果发现 JSON-LD 里面写了一堆已经不存在的 URL,反而挺麻烦。

目前这份配置对我的博客来说已经够用了。以后如果再增加分类页、文章页之类的结构化数据,再根据实际页面补 BlogPostingBreadcrumbList 等类型,而不是现在一次性全部堆上去。

对于个人博客,我还是更喜欢这种一点一点补的方式。网站本身能正常访问、URL 设计清楚,再让结构化数据准确反映这些东西,就已经很好了。🤤

给自己的博客加上了 JSON-LD 站内搜索结构化数据
https://blog.mxdyeah.com/post/json-ld-blog-search
本文作者 mxdyeah
发布时间 2026-08-13
许可协议 CC BY-NC-SA 4.0
发表新评论