前回作ったブログでサイトマップを作ります。 generateで静的ページを作って公開する予定です。
Table of Contents
セットアップ
@nuxtjs/sitemapを使います。
$ yarn add @nuxtjs/sitemap
nuxt.config.js
のmodules
に'@nuxtjs/sitemap'
を追加します。
すべてのルートが確実にキャッチされるように、インクルードした他のモジュールの後で実行する必要があります。
nuxt.config.js
export default {
modules: [
'@nuxt/content',
'@nuxtjs/sitemap'
],
}
次に、サイトマップ構成のデフォルトをいくつか追加します—を追加hostnameして空の関数を設定します。この関数は、後でコンテンツのパスを取得して返すために使用します。
nuxt.config.js
export default {
sitemap: {
hostname: process.env.BASE_URL || 'https://www.suzu6.net/',
routes: async () => {} // routesにURLを渡す
},
}
routes: ['path/article1', 'path/article1']
のように配列を渡すとサイトマップを作ってくれます。
これから、この配列を網羅的に作っていく。
ドメイン名だけだとTypeError [ERR_INVALID_URL]: Invalid URL: www.suzu6.net\
が出る。
URLの形式じゃないとエラーが出るのは良いね。
httpから書きます。
URLのリストを作成する
routesにサイトマップの配列を渡します。
@nuxt/contentでは以下のコードでcontent/posts/*.md
のパスを渡します。
nuxt.config.js
routes: async () => {
const { $content } = require('@nuxt/content')
const posts = await $content('posts')
.only(['path'])
.fetch()
return posts.map((p) => p.path)
}
上記の設定でyarn run generate
で同時にsitemap.xmlが作られるようになります。
dist/sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>
https://www.suzu6.net/posts/102-katex-math-functions
</loc>
</url>
<url>
<loc>
https://www.suzu6.net/posts/14
</loc>
</url>
<url>
<loc>
https://www.suzu6.net/posts/10
</loc>
</url>
...
サイトマップにパス以外の情報を渡す。
routes: [
'/page/1',
'/page/2',
{
url: '/page/3',
changefreq: 'daily',
priority: 1,
lastmod: '2017-06-30T13:30:00.000Z'
}
]
nuxt.config.js
sitemap: {
hostname: process.env.BASE_URL || 'https://www.suzu6.net/',
routes: async () => {
let array = [
{
// トップページ
url: '/',
changefreq: 'daily',
priority: 1,
lastmod: new Date()
}
];
// コンテンツ
const { $content } = require('@nuxt/content')
const posts = await $content('posts')
.only(['path', 'updated_at'])
.fetch()
array = array.concat(
posts.map((p) =>
{
return {
url: p.path,
lastmod: p.updated_at,
priority: 1,
}
})
)
return array
}
},
sitemap.xml
<url>
<loc>
https://www.suzu6.net/
</loc>
<lastmod>
2020-12-16T09:50:32.366Z
</lastmod>
<changefreq>
daily
</changefreq>
<priority>
1.0
</priority>
</url>
<url>
<loc>
https://www.suzu6.net/posts/1
</loc>
<lastmod>
2019-01-04T00:00:00.000Z
</lastmod>
<priority>
1.0
</priority>
</url>
Reactに入門するよ
ReactTypeScriptschedule2021-12-12
【TypeScript】ジェネリックスな配列Array<T>を扱う関数を定義する
TypeScriptschedule2021-10-10
【TypeScript】Jestでdescribeなどの関数がnot findになってるのを解消する
TypeScriptテストエラー解消schedule2021-10-10
【TypeScript】JestでインポートしたモジュールがCannot find moduleとなるエラー
TypeScriptテストエラー解消schedule2021-10-10
【Electron】PCのスリープと起動イベントを検知する
ElectronNodejsJavaScriptTypeScriptschedule2021-09-06
axiosでリクエスト中の処理をキャンセルする
JavaScriptNodejsschedule2021-08-31
Electronでアプリの2重起動を防ぐためのコード
ElectronTypeScriptschedule2021-08-25
Node.jsでChrome.exeを起動してページを開く方法
NodejsJavaScriptWindowsschedule2021-08-25