VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据

冴羽
• 阅读 1011

前言

《一篇带你用 VuePress + Github Pages 搭建博客》中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档

本篇讲 SEO 中的 JSON-LD。

JSON-LD

如果我们打开掘金任意一篇文章,比如这篇《VuePress 博客优化之增加 Vssue 评论功能》,查看 DOM 元素,我们可以在 head 中找到这样一段 script 标签:

VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据

在思否等其他平台也是可以看到的:

VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据

那这个 type 为 application/ld+json 的 script,到底是什么意思呢? 又是什么作用呢?

这就是我们今天要介绍的 JSON-LD,英文全程:JavaScript Object Notation for Linked Data,官方地址:https://json-ld.org/,简单的来说,就是用来描述网页的类型和内容,方便搜索引擎做展现。

比如如果我们在 Google 搜索 「Chocolate in a mug」,我们会看到这样的搜索结果:

VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据

我们打开页面,就可以看到搜索展示的内容对应了 application/ld+json 中的内容:

VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据

添加 JSON-LD

如果我们也要实现这样的效果,方便搜索引擎展现,该怎么做呢?

在页面加入结构化数据的方法很简单,只用在页面添加这样一段脚本就可以了:

<script type="application/ld+json">
    // ...
</script>

具体里面的内容需要参考比如 Google 搜索中心提供的《结构化数据常规指南》,因为我写的是具体的文章,所以参考 Article 章节后,我决定写入以下这些属性:

<script type="application/ld+json">
     {
      "@context": "https://schema.org",
      "@type": "Article",
      "headline": "这里填写标题",
      "image": [
        "https://ts.yayujs.com/icon-144x144.png"
       ],
      "datePublished": "2021-11-10T22:06:06.000Z",
      "dateModified": "2022-03-04T16:00:00.000Z",
      "author": [{
          "@type": "Person",
          "name": "冴羽",
          "url": "https://github.com/mqyqingfeng/Blog"
        }]
    }
</script>

VuePress 实现

经过搜索,我并没有发现现成的插件,由于每个页面的标题、发布时间、更新时间都不同,那成吧,那就自己写个本地插件实现吧。

其实要实现的内容很简单,就是在编译的时候在 head 中写入一个 script 脚本,脚本的内容根据页面的属性而定,但毕竟我用的是 vuepress 1.x,实现方式受制于工具,完全看工具提供了什么 API 来实现,我们直接看最终的实现方式:

vuepress-plugin-jsonld

在 .vuepress 目录下建立 vuepress-plugin-jsonld 文件夹,然后执行 npm init ,创建 package.json

创建 index.js,代码写入:

const { path } = require('@vuepress/shared-utils')

module.exports = options => ({
  name: 'vuepress-plugin-jsonld',
  enhanceAppFiles () {
    return [path.resolve(__dirname, 'enhanceAppFile.js')]
  },
  globalUIComponents: ['JSONLD']
})

创建 enhanceAppFile.js,代码写入:

import JSONLD from './JSONLD.vue'

export default ({ Vue, options }) => {
  Vue.component('JSONLD', JSONLD)
}

创建 JSONLD.vue,代码写入:

<template></template>

<script>
export default {
  created() {
    if (typeof this.$ssrContext !== "undefined") {
      this.$ssrContext.userHeadTags += 
      `<script type='application/ld+json'>
          {
            "@context": "https://schema.org",
            "@type": "Article",
            "headline": "${this.$page.title}",
            "url": "${'https://yayujs.com' + this.$page.path}",
            "image": [
              "https://ts.yayujs.com/icon-144x144.png"
              ],
            "datePublished": "${this.$page.frontmatter.date && (new Date(this.$page.frontmatter.date)).toISOString()}",
            "dateModified": "${this.$page.lastUpdated && (new Date(this.$page.lastUpdated)).toISOString()}",
            "author": [{
                "@type": "Person",
                "name": "冴羽",
                "url": "https://github.com/mqyqingfeng/Blog"
            }]
          }
      <\/script>`;
    }
  }
};
</script>

这里之所以能够给所有的页面都注入脚本内容,是因为借助了 globalUIComponents

你可能想注入某些全局的 UI,并固定在页面中的某处,如 back-to-top, popup。在 VuePress 中,一个全局 UI 就是一个 Vue 组件。

config.js

接下来我们修改 config.js:

module.exports = {
    title: 'title',
    description: 'description',
       plugins: [
      require('./vuepress-plugin-jsonld')
    ]
}

注意我们在本地运行的时候并不能看到,我们可以关闭 deploy.sh 推送到远程的命令,然后本地编译一下,查一下输出的 HTML:

VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据

验证

发布到线上后,我们可以在 Google 提供的富媒体搜索测试中进行验证,打开网址,输入页面地址,就可以看到抓取的结构化数据:

VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据

如果有错误,这里也会展示警告。

系列文章

博客搭建系列是我至今写的唯一一个偏实战的系列教程,预计 20 篇左右,讲解如何使用 VuePress 搭建、优化博客,并部署到 GitHub、Gitee、私有服务器等平台。本篇为第 31 篇,全系列文章地址:https://github.com/mqyqingfeng/Blog

微信:「mqyqingfeng」,进冴羽的读者群。

如果有错误或者不严谨的地方,请务必给予指正,十分感谢。如果喜欢或者有所启发,欢迎 star,对作者也是一种鼓励。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
冴羽 冴羽
2年前
搭建 VuePress 站点必做的 10 个优化
前言在中,我们使用VuePress搭建了一个博客,最终的效果查看:。在搭建这样一个博客后,其实还有很多的优化工作需要做,本篇我们来盘点一下那些完成基础搭建后必做的10个优化。1.开启HTTPS开启HTTPS有很多好处,比如可以实现数据加密传输等,SEO也会更容易收录:Google会优先选择HTTPS网页(而非等效的HTTP网
冴羽 冴羽
2年前
VuePress 博客之 SEO 优化(六)站长工具
前言在中,我们使用VuePress搭建了一个博客,最终的效果查看:。本篇接着讲讲SEO优化会用到的站长平台和工具等。1.百度统计地址:网站流量分析工具,能够告诉用户访客是如何找到并浏览用户的网站,在网站上做了些什么2.百度搜索资源平台地址:在添加站点后,可以看到自己站点在百度搜索结果中的一些表现:百度搜索中心也提供了一些教程如:1.《平
冴羽 冴羽
2年前
VuePress 博客之 SEO 优化(一)之 sitemap 与搜索引擎收录
前言在中,我们使用VuePress搭建了一个博客,最终的效果查看:。本篇讲讲如何进行SEO优化。1.生成sitemap借助生成站点地图:1.1安装bashyarnaddvuepresspluginsitemapD1.2修改config.jsjavascript//.vuepress/config.jsmodule.expo
冴羽 冴羽
2年前
VuePress 博客之 SEO 优化(四) Open Graph protocol
前言在中,我们使用VuePress搭建了一个博客,最终的效果查看:。本篇讲讲SEO优化中的OpenGraphprotocol。meta标签如果我们打开思否任意一篇文章,比如这篇,查看DOM元素,我们可以在head中找到这样一段meta标签:我们可以发现name都是以og:开头,这是什么意思呢,又是什么作用呢?其实这是
冴羽 冴羽
2年前
VuePress 博客之 SEO 优化(三)标题、链接优化
前言在中,我们使用VuePress搭建了一个博客,最终的效果查看:。本篇讲讲SEO中的一些细节优化。1.设置全局的title、description、keywordsjavascript//config.jsmodule.exportstitle:"title",description:'description',
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
冴羽
冴羽
Lv1
男 · 淘宝 · 前端工程师
GitHub 26K Star 的博客: https://github.com/mqyqingfeng/Blog
文章
32
粉丝
15
获赞
67