@nuxtjs/sitemapを使ってsitemap.xmlを生成する機会があったので、設定方法についてメモ。
設定方法
今回は以前作成したデモサイトをベースに設定を試してみます。
サイト構成は以下のようになっていて、新着情報詳細だけ動的なURLになります。
- トップ(pages/index.vue)
- 会社概要(pages/company.vue)
- 新着情報一覧(pages/info/index.vue)
- 新着情報詳細(pages/info/_slug/index.vue)
まずはNuxt.jsの環境にインストールします。
yarn add @nuxtjs/sitemap
npmの場合は下記になります。
npm install @nuxtjs/sitemap
nuxt.config.jsのmodulesに@nuxtjs/sitemapを追加します。
export default { modules: [ '@nuxtjs/sitemap' ] }
これで準備ができたのでブラウザで/sitemap.xmlにアクセスしてみると、以下のように新着情報詳細以外の静的なページのみが追加されました。
<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>http://localhost:3000/company</loc> </url> <url> <loc>http://localhost:3000/info</loc> </url> <url> <loc>http://localhost:3000/</loc> </url> </urlset>
sitemap.xmlの設定の追加は、nuxt.config.jsにsitemapを追加して行います。
export default { modules: [ '@nuxtjs/sitemap' ], sitemap: { hostname: 'https://example.com', exclude: [ '/company' ], routes: [ '/sample/aaa', { url: '/sample/bbb', changefreq: 'daily', priority: 1, lastmod: '2017-06-30T13:30:00.000Z' } ] } }
上記の場合、hostnameがホスト名、excludeが除外するページパス、routesが追加したいページの指定になります。
再度ブラウザで確認してみると、設定内容の反映が確認できました。
<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://example.com/sample/aaa</loc> </url> <url> <loc>https://example.com/sample/bbb</loc> <lastmod>2017-06-30T13:30:00.000Z</lastmod> <changefreq>daily</changefreq> <priority>1.0</priority> </url> <url> <loc>https://example.com/info</loc> </url> <url> <loc>https://example.com/</loc> </url> </urlset>
sitemapのroutesでは関数の指定もできるので、これを使って動的なページの追加も行えます。
const axios = require('axios'); export default { modules: [ '@nuxtjs/sitemap' ], sitemap: { hostname: 'https://example.com', exclude: [ '/company' ], routes: async () => { const res = await axios.get( process.env.API_URL, { headers: { 'X-API-KEY': process.env.API_KEY } } ) return res.data.contents.map((info) => `/info/${info.id}`) } } }
ブラウザで確認すると、新着情報詳細も追加されていることが確認できました。
<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://example.com/info/z4yk0ox_tqa</loc> </url> <url> <loc>https://example.com/info/1hpnqckp0j_i</loc> </url> <url> <loc>https://example.com/info/e5evol2afqgv</loc> </url> <url> <loc>https://example.com/info/6irp7tjwo_qj</loc> </url> <url> <loc>https://example.com/info/v249mt0p71</loc> </url> <url> <loc>https://example.com/info/3hn_7p6e1m</loc> </url> <url> <loc>https://example.com/info</loc> </url> <url> <loc>https://example.com/</loc> </url> </urlset>
コメントが承認されるまで時間がかかります。