# VuePress SEO plugin

分享網頁到 Facebook 可以透過 Facebook Open Graph Protocol 來自定封面,那在 VuePress 要自訂 HTML meta 可以透過全域的 head 及每篇文章的 Frontmatter 的方式來添加 html meta

但是這樣的設定方式有一個缺點,像是要設定 og:title 這個變數就必須要用文字的方式設定進去,像下面這樣,就沒辦法取用 $page.title 這個 VuePress 變數。

---
meta:
  - property: og:title
    content: VuePress SEO plugin
---

要解決這個問題可以用 vuepress-plugin-seo (opens new window) 這個 plugin 。

# 安裝 vuepress-plugin-seo

  npm install vuepress-plugin-seo

# 啟用

.vuepress/config.js 加入 seo plugin,同時貼上 vuepress-plugin-seo 的 sample code,這些 code 已經可以幫忙設定好大部分的 meta ,如果有其他的 meta 也可以透過 customMeta 的方式加入。

plugins: {
  seo: {
    siteTitle: (_, $site) => $site.title,
    title: $page => $page.title,
    description: $page => $page.frontmatter.description,
    author: (_, $site) => $site.themeConfig.author,
    tags: $page => $page.frontmatter.tags,
    twitterCard: _ => 'summary_large_image',
    type: $page => ['articles', 'posts', 'blog'].some(folder => $page.regularPath.startsWith('/' + folder)) ? 'article' : 'website',
    url: (_, $site, path) => ($site.themeConfig.domain || '') + path,
    image: ($page, $site) => $page.frontmatter.image && (($site.themeConfig.domain && !$page.frontmatter.image.startsWith('http') || '') + $page.frontmatter.image),
    publishedAt: $page => $page.frontmatter.date && new Date($page.frontmatter.date),
    modifiedAt: $page => $page.lastUpdated && new Date($page.lastUpdated),
  }
}

那 vuepress-plugin-seo 的 sample code 已經可以處理大部分的 meta ,剩下就是個別文章不同的 meta ,其中有 descriptionimagetags 要在文章的 Frontmatter 設定,像是下面這樣。

---
description: 透過 VuePress SEO plugin 提升網頁的
image: https://ianwu.tw/press/vuepress/imgs/plugin_seo_facebook_cover.jpg
tags: ['VuePress', 'SEO', 'Open Graph Protocol', '瘋人院院長']
---

這樣最後 render 出來的網頁就會包含相關的 meta 了。

VuePress SEO plugin 產出的 html

Last Updated: 2021-11-26 16:02:26
贊助商連結
    贊助商連結
    (adsbygoogle = window.adsbygoogle || []).push({});